SVM算法-线性分类

import numpy as np
import matplotlib.pyplot as plt
from sklearn import svm
# 创建40个点
x_data = np.r_[np.random.randn(20, 2) - [2, 2], np.random.randn(20, 2) + [2, 2]]
y_data = [0]*20 +[1]*20plt.scatter(x_data[:,0],x_data[:,1],c=y_data)
plt.show()

#fit the model
model = svm.SVC(kernel='linear')
model.fit(x_data, y_data)

model.coef_

model.intercept_

# 获取分离平面 plt.scatter(x_data[:,0],x_data[:,1],c=y_data)
x_test = np.array([[-5],[5]])
d = -model.intercept_/model.coef_[0][1]
k = -model.coef_[0][0]/model.coef_[0][1]
y_test = d + k*x_test
plt.plot(x_test, y_test, 'k')
plt.show()

model.support_vectors_

# 画出通过支持向量的分界线
b1 = model.support_vectors_[0]
y_down = k*x_test + (b1[1] - k*b1[0])
b2 = model.support_vectors_[-1]
y_up = k*x_test + (b2[1] - k*b2[0])
plt.scatter(x_data[:,0],x_data[:,1],c=y_data)
x_test = np.array([[-5],[5]])
d = -model.intercept_/model.coef_[0][1]
k = -model.coef_[0][0]/model.coef_[0][1]
y_test = d + k*x_test
plt.plot(x_test, y_test, 'k')
plt.plot(x_test, y_down, 'r--')
plt.plot(x_test, y_up, 'b--')
plt.show()

SVM算法-非线性分类

import matplotlib.pyplot as plt
import numpy as np
from sklearn.metrics import classification_report
from sklearn import svm
# 载入数据
data = np.genfromtxt("LR-testSet2.txt", delimiter=",")
x_data = data[:,:-1]
y_data = data[:,-1]def plot():x0 = []x1 = []y0 = []y1 = []# 切分不同类别的数据for i in range(len(x_data)):if y_data[i]==0:x0.append(x_data[i,0])y0.append(x_data[i,1])else:x1.append(x_data[i,0])y1.append(x_data[i,1])# 画图scatter0 = plt.scatter(x0, y0, c='b', marker='o')scatter1 = plt.scatter(x1, y1, c='r', marker='x')#画图例plt.legend(handles=[scatter0,scatter1],labels=['label0','label1'],loc='best')plot()
plt.show()

# fit the model
# C和gamma
# 'linear', 'poly', 'rbf', 'sigmoid'
model = svm.SVC(kernel='rbf', C=2, gamma=1)
model.fit(x_data, y_data)

model.score(x_data,y_data)

# 获取数据值所在的范围
x_min, x_max = x_data[:, 0].min() - 1, x_data[:, 0].max() + 1
y_min, y_max = x_data[:, 1].min() - 1, x_data[:, 1].max() + 1# 生成网格矩阵
xx, yy = np.meshgrid(np.arange(x_min, x_max, 0.02),np.arange(y_min, y_max, 0.02))z = model.predict(np.c_[xx.ravel(), yy.ravel()])# ravel与flatten类似,多维数据转一维。flatten不会改变原始数据,ravel会改变原始数据
z = z.reshape(xx.shape)# 等高线图
cs = plt.contourf(xx, yy, z)
plot()
plt.show()

SVM-人脸识别

import matplotlib.pyplot as plt
from sklearn.model_selection import train_test_split
from sklearn.datasets import fetch_lfw_people
from sklearn.model_selection  import GridSearchCV
from sklearn.metrics import classification_report
from sklearn.svm import SVC
from sklearn.decomposition import PCA
# 载入数据lfw_people = fetch_lfw_people(min_faces_per_person=70, resize=0.4)
plt.imshow(lfw_people.images[6],cmap='gray')
plt.show()

# 照片的数据格式
n_samples, h, w = lfw_people.images.shape
print(n_samples)
print(h)
print(w)

lfw_people.data.shape

lfw_people.target

target_names = lfw_people.target_names
target_names

n_classes = lfw_people.target_names.shape[0]
x_train, x_test, y_train, y_test = train_test_split(lfw_people.data, lfw_people.target)
model = SVC(kernel='rbf', class_weight='balanced')
model.fit(x_train, y_train)

predictions = model.predict(x_test)
print(classification_report(y_test, predictions, target_names=lfw_people.target_names))


PCA降维

# 100个维度
n_components = 100pca = PCA(n_components=n_components, whiten=True).fit(lfw_people.data)x_train_pca = pca.transform(x_train)
x_test_pca = pca.transform(x_test)
x_train_pca.shape

model = SVC(kernel='rbf', class_weight='balanced')
model.fit(x_train_pca, y_train)

predictions = model.predict(x_test_pca)
print(classification_report(y_test, predictions, target_names=target_names))


调参

param_grid = {'C': [0.1, 1, 5, 10, 100],'gamma': [0.0005, 0.001, 0.005, 0.01], }
model = GridSearchCV(SVC(kernel='rbf', class_weight='balanced'), param_grid)
model.fit(x_train_pca, y_train)
print(model.best_estimator_)

predictions = model.predict(x_test_pca)
print(classification_report(y_test, predictions, target_names=target_names))

param_grid = {'C': [0.1, 0.6, 1, 2, 3],'gamma': [0.003, 0.004, 0.005, 0.006, 0.007], }
model = GridSearchCV(SVC(kernel='rbf', class_weight='balanced'), param_grid)
model.fit(x_train_pca, y_train)
print(model.best_estimator_)

predictions = model.predict(x_test_pca)
print(classification_report(y_test, predictions, target_names=target_names))


画图

# 画图,3行4列
def plot_gallery(images, titles, h, w, n_row=3, n_col=5):plt.figure(figsize=(1.8 * n_col, 2.4 * n_row))plt.subplots_adjust(bottom=0, left=.01, right=.99, top=.90, hspace=.35)for i in range(n_row * n_col):plt.subplot(n_row, n_col, i + 1)plt.imshow(images[i].reshape((h, w)), cmap=plt.cm.gray)plt.title(titles[i], size=12)plt.xticks(())plt.yticks(())# 获取一张图片title
def title(predictions, y_test, target_names, i):pred_name = target_names[predictions[i]].split(' ')[-1]true_name = target_names[y_test[i]].split(' ')[-1]return 'predicted: %s\ntrue:      %s' % (pred_name, true_name)# 获取所有图片title
prediction_titles = [title(predictions, y_test, target_names, i) for i in range(len(predictions))]# 画图
plot_gallery(x_test, prediction_titles, h, w)plt.show()

机器学习实战-SVM算法-27相关推荐

  1. 机器学习实战-KNN算法-20

    机器学习实战-KNN算法-鸢尾花分类 # 导入算法包以及数据集 from sklearn import neighbors from sklearn import datasets from skle ...

  2. 【阿旭机器学习实战】【27】贝叶斯模型:新闻分类实战----CounterVecorizer与TfidVectorizer构建特征向量对比

    [阿旭机器学习实战]系列文章主要介绍机器学习的各种算法模型及其实战案例,欢迎点赞,关注共同学习交流. 本文介绍了新闻分类实战案例,并通过两种方法CounterVecorizer与TfidVectori ...

  3. 【机器学习】SVM算法

    目录 什么是SVM SVM 基本概念 SVM相关问题 SVM算法原理 点到超平面的距离公式 最大间隔的优化模型 松弛变量 核函数:线性不可分-高维可分 SVM实现对鸢尾花数据集的二分类 数据集详情 S ...

  4. 机器学习-支持向量机SVM算法

    文章目录 简介 原理 硬间隔 支持向量 对偶问题 软间隔 核函数 SMO算法 小结 多分类问题 回归问题 应用示例 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家.点 ...

  5. 姚老板讲机器学习之SVM算法

    1.背景 1.1 最早是由 Vladimir N. Vapnik 和 Alexey Ya. Chervonenkis 在1963年提出1.2 目前的版本(soft margin)是由Corinna C ...

  6. 机器学习实战8-Apriori算法

    1. 用途和原理 1.1 用途 用于关联分析,即在大规模数据中寻找有趣的关系,有两种形式:频繁项集和关联规则.频繁项集:指经常出现在一块的物品集合.关联规则:暗示两种物品之间可能存在很强的关系.典型一 ...

  7. 机器学习实战-FP-growth算法

    本章内容 发现事物数据中的公共模式 FP-growth算法 发现Twitter源中共现词 搜索引擎自动补全查询此项,可以找出互联网上经常一块出现的词对.这需要一种高效发现频繁项集的方法.FP-grow ...

  8. 机器学习实战-SVM模型实现人脸识别

    文章目录 SVM建模进行人脸识别案例 1.导包 2.加载数据集 3.直接使用SVM模型建模 4.数据可视化 5.网络搜索优化确定最佳性能 6.使用最佳性能SVM建模 7.优化后的数据可视化 8.完整代 ...

  9. 【机器学习算法专题(蓄力计划)】十九、机器学习中SVM算法代码实操

    文章目录 支持向量机(SVM) 支持向量基本原理 Code Support Vector Machines: 最小化 *雷区* 训练一个基本的SVM 引入核函数的SVM 调节SVM参数: Soft M ...

最新文章

  1. DLL基础——Windows核心编程学习手札之十九
  2. php 单用户登录,Linux 系统的单用户模式、修复模式、跨控制台登录在系统修复中的运用...
  3. activeMq初识 - 2
  4. 部署Squid 代理服务器(内含传统、透明代理服务器的配置、ACL访问控制、日志分析、反向代理)
  5. python自动获取天气_用python获取天气数据,并作定时播报
  6. Linux:文件描述符
  7. MySql DDL语言(数据库和数据表的管理)
  8. C++ make_shared() shared_ptr()用法
  9. 登录后主机名变成-bash-4.2解决
  10. JavaSE入门学习10:Java修饰符
  11. MongoDB 分片操作
  12. 无缓冲I/O与有缓冲I/O区别
  13. 全球经典《深入解析Windows 操作系统,第4 版》4月19日全国发货!
  14. python机器人编程教材_python人工智能机器人工具书籍: Learn Robotics Programming(python and Raspberry Pi 3) - 2018...
  15. 黑帽seo技术大揭秘
  16. 推销员基础解法c++
  17. 实现主人领养宠物并带宠物去玩,狗狗叼飞碟,企鹅去南极游泳
  18. logstash过滤器--mutate
  19. 1个月拿下7个offer! 5分钟掌握81个数学模型,小白也能逆袭数据分析师!
  20. 软件测试常见笔试题(附带答案)—初级篇01

热门文章

  1. mysql ef_在EF中使用MySQL的方法及常见问题
  2. 微信小程序之redirectTo、switchTab和navigateTo
  3. htaccess简介和16个小技巧
  4. html背景图片自适应纵向,HTML5 body设置全屏背景图片 如何让body的背景图片自适应整个屏----实战经验...
  5. 组态王c语言编程实例,组态王命令语言程序.doc
  6. java线程6种状态转换,java6种线程状态
  7. 【thymeleaf】th:with
  8. Linux 利用yum源安装nginx
  9. Tomcat的安装和运行
  10. select * 映射错误_高性能IO模型分析-浅析Select、Poll、Epoll机制(三)