【机器学习】吴恩达作业6.0,python实现SVM支持向量机
6.0支持向量机
使用支持向量机(SVM)处理各种两维的样本数据集,了解支持向量机如何工作,以及如何使用带高斯核函数的SVM。
SVM(鲁棒性,大间距分类器)
支持向量机(support vector machines, SVM)是一种二分类模型,它的基本模型是定义在特征空间上的 间隔最大的线性分类器 ,间隔最大使它有别于感知机;SVM还包括 核技巧 ,这使它成为实质上的非线性分类器。 SVM的的学习策略就是间隔最大化,可形式化为一个求解凸二次规划的问题,也等价于正则化的合页损失函数的最小化问题。 SVM的的学习算法就是求解凸二次规划的最优化算法。
假设函数
, = 1
, = 0
带正则化的损失函数
核函数 :
, x far from ,
Predict 1,if
给新特征x,计算x与标记点的距离之和,标记点在给的特征向量里选择
SVM与核函数
给定特征向量,计算核函数,, x far from ,,得到,判断y = 1
参数
C = :
C值大,低偏差,高方差,C值小,高偏差,低方差
:
大,特征变化较缓,高偏差,低方差。
小,特征变化较快,低偏差,高方差
选择
当特征数量多、训练集数量较少时,一般选用逻辑回归或者不带核函数的SVM(线性核函数)
当特征数量少、训练集数量适中时,一般选用带高斯核函数的SVM
当特征数量少、训练集数量很大时,一般选用逻辑回归或者不带核函数的SVM(如果用高斯核函数可能过慢)对于大部分情况神经网络表现都很好,但是训练慢。
且SVM是凸优化问题,因此总会找到一个全局最小值,不用担心局部极小的情况。逻辑回归与SVM比较:逻辑回归对异常值敏感,SVM对异常值不敏感(抗噪能力强)——支持向量机改变非支持向量样本并不会引起决策面的变化;但是逻辑回归中改变任何样本都会引起决策面的变化
高斯核函数
python
1 Scikit-learn(sklearn)是机器学习中常用的第三方模块,对常用的机器学习方法进行了封装,包括回归(Regression)、降维(Dimensionality Reduction)、分类(Classfication)、聚类(Clustering)等方法。里面包含了SVM的程序,直接调用调节参数即可。
2 svm.SVC( ) 可以选择C值,以及核函数,调用之后先fit,再predict,predict时输入为一个二维数组,因此在画等高线的时候需要先把网格展开成二维数组进行predict再重新组成网格画图。在选择核函数时可以自己定义,例如:svm.SVC(kernel=my_kernel),内置核函数默认为rbf高斯核,其中包含一个gamma关键词,gamma默认为1/n_features。
1 线性可分SVM
1.1 导入数据可视化
import numpy as np
import matplotlib.pyplot as plt
import scipy.io as siodata1 = sio.loadmat('ex6data1')
data2 = sio.loadmat('ex6data2')
data3 = sio.loadmat('ex6data3')data1.keys()#dict_keys(['__header__', '__version__', '__globals__', 'X', 'y'])
data2.keys()#dict_keys(['__header__', '__version__', '__globals__', 'X', 'y'])
data3.keys()#dict_keys(['__header__', '__version__', '__globals__', 'X', 'y', 'yval', 'Xval'])X1,y1 = data1['X'],data1['y'].flatten()
X2,y2 = data2['X'],data2['y'].flatten()
X3,y3 = data3['X'],data3['y'].flatten()
Xval,yval = data3['Xval'],data3['yval'].flatten()
X1.shape,y1.shape#((51, 2), (51,))
X2.shape,y2.shape#((863, 2), (863,))
X3.shape,y3.shape#((211, 2), (211,))
Xval.shape,yval.shape#((200, 2), (200,))def plot_data(x,y):n = x[y == 0]p = x[y == 1]plt.scatter(p[:,0],p[:,1],c='r', marker='x', label='y=1')plt.scatter(n[:,0],n[:,1],c='g', marker='o', edgecolors='g', linewidths=0.5, label='y=0')plt.legend()plt.show
1.2 用sklearn拟合并预测
from sklearn.svm import SVC
svc1 =SVC(C = 1,kernel = 'linear')#线性核函数
svc1.fit(X1,y1.flatten())svc1.predict(X1)svc1.score(X,y.flatten())#0.9803921568627451
1.3 决策边界
#决策边界
def plot_boundary(svc,x):u = np.linspace(np.min(X1[:,0]),np.max(X1[:,0]),500)v = np.linspace(np.min(X1[:,1]),np.max(X1[:,1]),500)x,y = np.meshgrid(u,v)#将x,y转化为网格(500*500)z = svc.predict(np.c_[x.flatten(),y.flatten()])#因为predict中是要输入一个二维的数据,因此需要展开z = z.reshape(x.shape) #重新转为网格plt.contour(x,y,z,1,colors = 'b') #画等高线plt.title('The Decision Boundary')plt.showplt.figure(1)
plot_data(X1, y1)
plot_boundary(svc1, X1)
plt.show
2 线性不可分SVM
可视化并训练模型
plot_data(X2,y2)
#定义高斯函数
def gaussianKernel(x1,x2,sigma):return np.exp( -((x1-x2).T@(x1-x2)) / (2*sigma*sigma) )a1 = np.array([1, 2, 1])
a2 = np.array([0, 4, -1])
sigma = 2
gaussianKernel(a1, a2, sigma) #训练模型(这里使用内置高斯核)
svc2 = SVC(C = 100,kernel = 'rbf',gamma=np.power(0.1, -2)/2)##对应sigma=0.1
svc2.fit(X2,y2)svc2.predict([[0.4, 0.9]])
svc2.score(X2,y2.flatten())#画图
plt.figure(2)
plot_data(X2, y2)
plot_boundary(svc2, X2)
plt.show
3 在验证集上寻找最佳参数
plot_data(X3,y3)
plot_data(Xval, yval)
#寻找最优参数C和gamma
gammas = [0.01,0.03,0.1,0.3,1,3,10,30,100]#9
Cvalues = [0.01,0.03,0.1,0.3,1,3,10,30,100]#9
best_score = 0
best_pramas = (0,0)
for c in Cvalues:for gamma in gammas:svc3 = SVC(c,kernel = 'rbf')svc3.fit(X3,y3)score = svc3.score(Xval,yval)if score > best_score:best_score = scorebest_pramas = (c,gamma)print(best_score,best_pramas)#0.96 (30, 0.01)plt.figure(3)
plot_data(X3, y3)
plot_boundary(svc3, X3)
plt.show
【机器学习】吴恩达作业6.0,python实现SVM支持向量机相关推荐
- 机器学习-吴恩达网易云课堂笔记
机器学习-吴恩达网易云课堂笔记 Machine Learning: A computer program is said to learn from experience E with respect ...
- coursera-斯坦福-机器学习-吴恩达-第9周笔记(下)-推荐系统
coursera-斯坦福-机器学习-吴恩达-第9周笔记(下)-推荐系统 coursera-斯坦福-机器学习-吴恩达-第9周笔记下-推荐系统 1预测电影等级 1任务设想 2基于内容的推荐 2协同过滤 1 ...
- python第六周实验_机器学习 | 吴恩达机器学习第六周编程作业(Python版)
实验指导书 下载密码:ovyt 本篇博客主要讲解,吴恩达机器学习第六周的编程作业,作业内容主要是实现一个正则化的线性回归算法,涉及本周讲的模型选择问题,绘制学习曲线判断高偏差/高方差问题.原始实 ...
- 机器学习 | 吴恩达机器学习第六周编程作业(Python版)
实验指导书 下载密码:ovyt 本篇博客主要讲解,吴恩达机器学习第六周的编程作业,作业内容主要是实现一个正则化的线性回归算法,涉及本周讲的模型选择问题,绘制学习曲线判断高偏差/高方差问题.原始实 ...
- 【笔记】迈向人工智能 | Coursera-斯坦福大学-机器学习-吴恩达(已完结)
课程首页:Coursera-Stanford-Machine Learning 授课教授:吴恩达(Andrew Ng) ------Week 1------2018.10.10------ Intro ...
- 机器学习-吴恩达-笔记-7-机器学习系统的设计
目录 误差分析 类偏斜的误差度量 查准率和查全率之间的权衡 机器学习的数据 [此为本人学习吴恩达的机器学习课程的笔记记录,有错误请指出!] 误差分析 在本次课程中,我们将会讲到误差分析( Error ...
- 【机器学习 吴恩达】CS229课程笔记notes3翻译-Part V支持向量机
CS229 课程笔记 吴恩达 Part V 支持向量机 这部分展现了支持向量机(SVM)学习算法.SVM是最好的监督学习算法之一.为了讲述SVM,我们需要首先谈论边界和用大的间隔分离数据.接下来,我们 ...
- 机器学习-吴恩达-笔记-15-总结
[此为本人学习吴恩达的机器学习课程的笔记记录,有错误请指出!] 机器学习是一门对科技.工业产生深远影响的重要学科. 机器学习的理论知识:微积分.线性代数.统计学.信息论等. 机器学习的实践框架:PyT ...
- 机器学习-吴恩达-笔记-14-应用实例:图片文字识别
目录 问题描述和流程图 滑动窗口 获取大量数据和人工数据 上限分析:哪部分管道得接下去做 [此为本人学习吴恩达的机器学习课程的笔记记录,有错误请指出!] 问题描述和流程图 图像文字识别应用,是从一张给 ...
最新文章
- 使用post向webservice发送请求,并且返回值
- 关于对cross-browser支持的一些看法
- linux内核I2C子系统学习(三)
- C语言再学习 -- Xargs用法详解
- Eclipse启动时布局不合理调整
- 计算机原理期中考试,计算机组成原理期中考试试题
- USACO-Section2.3 Zero Sum
- linux kernel_thread执行过程
- docker k8s helm常用命令梳理
- grpc python异步实现_在grpcpython中处理异步流请求
- 用sqoop从mysql导数hive_使用sqoop从mysql导入到hive基本操作
- PDF编辑器(widsmob pdfedit)v3.0.1
- pdf 编辑器 linux
- Bouncing Ball (dp)
- 我可以在iPad上使用WhatsApp吗?
- Oracle LiveLabs DB Security (数据库安全)实验汇总
- Javad 方法,方法的重载,递归,类,类的构造方法
- 如何激励自己专注学习
- cmd命令和终端怎么实现切换目录
- 《四维全息算法》9--四维全息算法的基本思路是什么?股市数据是具有分形迭代特征的随机游走