总结
本系列是机器学习课程的系列课程,主要介绍机器学习中分类算法,本篇为分类算法与SVM算法部分。
本门课程的目标
完成一个特定行业的算法应用全过程:
懂业务+会选择合适的算法+数据处理+算法训练+算法调优+算法融合
+算法评估+持续调优+工程化接口实现
参考
看了这篇文章你还不懂SVM你就来打我https://tangshusen.me/2018/10/27/SVM/
斯坦福CS229 | 机器学习-吴恩达主讲(2018·完整版)
https://www.bilibili.com/video/BV1hT4y1r73X/
机器学习定义
关于机器学习的定义,Tom Michael Mitchell的这段话被广泛引用:
对于某类任务T 和性能度量P ,如果一个计算机程序在T上其性能P随着经验E而自我完善 ,那么我们称这个计算机程序从经验E中学习 。
SVM算法
SVM算法简介与分类
支持向量机,因其英文名为support vector machine,故一般简称SVM,通俗来讲,它是一种二类分类模型,其基本模型定义为特征空间上的间隔最大的线性分类器,其学习策略便是间隔最大化,最终可转化为一个凸二次规划问题的求解。
目标:找到最好点到决策边界最大SVM,这是曾经在机器学习界有着近乎「垄断」地位的模型,影响力持续了好多年。直至今日,即使深度学习神经网络的影响力逐渐增强,但 SVM 在中小型数据集上依旧有着可以和神经网络抗衡的极好效果和模型鲁棒性。
x到面的距离就是画一个垂线,面上有两个点x' 和 x" ,则点x' 和 x" 是满足平面方程的,假设平面方程为
y = W x + b y=Wx+b y=Wx+b,把x' 和 x"代入则 W T x ′ + b = 0 和 W T x " + b = 0 W^Tx'+b=0 和 W^Tx"+b=0 WTx′+b=0和WTx"+b=0
我们计算x到点x' 和 x" 的距离,因为点到点的距离相比点到面的距离好算些。
法向量W是垂直于平面的,在对这个x到点x' 或者 x到点x"的距离按照法向量W进行投影,就得到了点x到平面的距离
法向量是没有方向的,用 W T W^T WT 处于自身的模 ∣ ∣ W ∣ ∣ ||W|| ∣∣W∣∣就得到了单位方向向量
∣ W T ∣ ∣ W ∣ ∣ ( X − X ′ ) ∣ |\frac{W^T} {||W||}(X-X')| ∣∣∣W∣∣WT(X−X′)∣就是在单位方向的投影,对其展开,由于 W T X ′ = − b W^TX'= -b WTX′=−b
∣ 1 ∣ ∣ W ∣ ∣ ∣ ( W T X + b ) ∣ |\frac{1} {||W||}|(W^TX+b)| ∣∣∣W∣∣1∣(WTX+b)∣
因为 ∣ ( W T X + b ) ∣ |(W^TX+b)| ∣(WTX+b)∣有绝对值,但 y i ∗ y ( x i ) > 0 y_i*y(x_i)>0 yi∗y(xi)>0就可以实现把绝对值符号去掉
此时的优化目标函数就等价于 :与该分割线最近点距离最大
放缩变换从>0变为>1的目的是为了便于计算,因为1*任何数都为自身
最终就得到了目标函数 a r g m a x w , b 1 ∣ ∣ W ∣ ∣ argmax_{w,b}\frac{1}{||W||} argmaxw,b∣∣W∣∣1
把最大值转换为求最小值, W 2 W^2 W2表示一个向量,添加 1 2 \frac{1}{2} 21不影响求最小值
这里我们需要在约束条件下,求极值
在拉格朗日法中,包含不等式和等式的约束条件,在此约束条件下求方程的最小值。
如本体中,我们求W和b,不好求,但可以求一个 α \alpha α, α \alpha α和W和b有关系
KKT条件
这一步求出了最小距离的点
再求最小距离最大的点依然把最大值转换为最小值,最大值的整数,加上负号 就是 求最小值了
这里的约束条件就是如下的约束条件
代入的代入X1 ,X2,X3的值为:
这里的 18 α 2 18\alpha^2 18α2是当i=1并且j=1时,把 x 1 x_1 x1为(3,3)点代入,把 y 1 y_1 y1为+1代入后的结果
支持向量机学习方法,针对不同的情况,有由简至繁的不同模型:
线性可分支持向量机(linear support vector machine in linearly separable case):训练数据线性可分的情况下,通过硬间隔最大化(hard margin maximization),学习一个线性的分类器,即线性可分支持向量机(亦称作硬间隔支持向量机)。
线性支持向量机(linear support vector machine):训练数据近似线性可分的情况下,通过软间隔最大化(soft margin maximization),学习一个线性的分类器,称作线性支持向量机(又叫软间隔支持向量机)。
非线性支持向量机(non-linear support vector machine):训练数据线性不可分的情况下,通过使用核技巧(kernel trick)及软间隔最大化,学习非线性分类器,称作非线性支持向量机。
支持向量机可以借助核技巧完成复杂场景下的非线性分类,当输入空间为欧式空间或离散集合、特征空间为希尔贝特空间时,核函数(kernel function)表示将输入从输入空间映射到特征空间得到的特征向量之间的内积。通过使用核函数可以学习非线性支持向量机,等价于隐式地在高维的特征空间中学习线性支持向量机。这样的方法称为核技巧。
最大间隔分类器
分类问题的数学理解是空间划分(或者寻找不同类别的决策边界),如图所示是一个简单的线性分类器(这部分更详细的讲解参考ShowMeAI文章 图解机器学习| 机器学习基础知识 和 图解机器学习 | 逻辑回归算法详解)。
不同的模型在解决分类问题时,会有不同的处理方式,直观上看,我们会使用不同的决策边界对样本进行划分,完成该分类任务的决策边界有无数个。SVM 模型,要求更高一些,它不仅仅希望把两类样本点区分开,还希望找到鲁棒性最高、稳定性最好的决策边界(对应图中的黑色直线)。
这个决策边界与两侧「最近」的数据点有着「最大」的距离,这意味着决策边界具有最强的容错性,不容易受到噪声数据的干扰。直观的理解就是,如果决策边界抖动,最不容易「撞上」样本点或者进而导致误判。
支持向量机详解
1)线性可分 SVM 与硬间隔最大化
SVM 总结
1)模型总结
支持向量机(Support vector machines, SVM)是一种二分类模型,它的基本模型是定义在特征空间上的间隔最大的线性分类器,他的学习策略就是间隔最大化,同时该方法可以形式化为一个求解图二次规划。
2)模型优缺点
(1)SVM模型优点
基于Python的 SVM 代码实践
python
import numpy as np
import matplotlib.pyplot as plt
from sklearn import svm, datasets
iris = datasets.load_iris()
X = iris.data[:, :2] #只取前两维特征,方便可视化
y = iris.target
svc = svm.SVC(kernel='linear', C=1).fit(X, y)
x_min, x_max = X[:, 0].min() - 1, X[:, 0].max() + 1
y_min, y_max = X[:, 1].min() - 1, X[:, 1].max() + 1
h = (x_max / x_min) / 100
xx, yy = np.meshgrid(np.arange(x_min, x_max, h), np.arange(y_min, y_max, h))
plt.subplot(1, 1, 1)
Z = svc.predict(np.c_[xx.ravel(), yy.ravel()])
Z = Z.reshape(xx.shape)
plt.contourf(xx, yy, Z, cmap=plt.cm.Paired, alpha=0.8)
plt.scatter(X[:, 0], X[:, 1], c=y, cmap=plt.cm.Paired)
plt.xlabel('Sepal length')
plt.ylabel('Sepal width')
plt.xlim(xx.min(), xx.max())
plt.title('SVC with linear kernel')
plt.show()
输出为:
使用多项式核函数
初始化 SVM 对象的代码替换为下面这行
python
# svc = svm.SVC(kernel='linear', C=1).fit(X, y)
svc = svm.SVC(kernel='poly', degree=3).fit(X, y)
输出为:
使用rbf核函数(高斯核函数)
初始化 SVM 对象的代码替换为下面这行
python
# svc = svm.SVC(kernel='linear', C=1).fit(X, y)
# svc = svm.SVC(kernel='poly', degree=3).fit(X, y)
svc = svm.SVC(kernel='rbf', C=1).fit(X, y)**
输出为:
确定方向过程
针对完全没有基础的同学们
1.确定机器学习的应用领域有哪些
2.查找机器学习的算法应用有哪些
3.确定想要研究的领域极其对应的算法
4.通过招聘网站和论文等确定具体的技术
5.了解业务流程,查找数据
6.复现经典算法
7.持续优化,并尝试与对应企业人员沟通心得
8.企业给出反馈