我算是有点基础的(有过深度学习和机器学的项目经验),但也是半路出家,无论是学Python还是深度学习,都是从问题出发,边查边做,没有系统的学过相关的知识,这样的好处是入门快(如果想快速入门,大家也可以试试,直接上手项目,从小项目开始),但也存在一个严重的问题就是,很多东西一知半解,容易走进死胡同出不来(感觉有点像陷入局部最优解,找不到出路),所以打算系统的学习几本口碑比较不错的书籍。
??书籍选择: 当然,机器学习相关的书籍有很多,很多英文版的神书,据说读英文版的书会更好,奈何英文不太好,比较难啃。国内也有很多书,周志华老师的“西瓜书”我也有了解过,看了前几章,个人感觉他肯能对初学者更友好一点,讲述的非常清楚,有很多描述性的内容。对比下来,更喜欢《统计学习方法》,毕竟能坚持看完才最重要。
??笔记内容: 笔记内容尽量省去了公式推导的部分,一方面latex编辑太费时间了,另一方面,我觉得公式一定要自己推到一边才有用(最好是手写)。尽量保留所有标题,但内容会有删减,通过标黑和列表的形式突出重点内容,要特意说一下,标灰的部分大家最好读一下(这部分是我觉得比较繁琐,但又不想删掉的部分)。
??代码实现: 最后是本章内容的实践,如果想要对应的.ipynb文件,可以留言
??感知机 (perceptron) 是二类分类的线性分类模型,其输入为实例的特征向量,输 出为实例的类别,取 +1 和-1 二值。
??感知机对应于输入空间(特征空间)中将实例划 分为正负两类的分离超平面,属于判别模型。
??感知机学习旨在求出将训练数据进行线性划分的分离超平面,为此:
- 导入基于误分类的损失函数,
- 利用梯度下降法对损失函 数进行极小化,求得感知机模型。
??感知机学习算法具有简单而易于实现的优点,分为 原始形式和对偶形式。
??感知机是一种线性分类模型,属于判别模型。
??感知机模型的假设空间是定义在特征空间中的所有线性分类模型(linear classification modeD 或线性分类器 (linear classifier) ,即函数集合
f ∣ f ( x ) = ω ? x + b {{f|f(x) = ω ? x + b}} f∣f(x)=ω?x+b
几何解释:线性方程
ω ? x + b = 0 ω\cdot x+b=0 ω?x+b=0
??对应于特征空间 R n R^n Rn 中的一个超平面 S , 其中 ω 是超平面的法向量 , b 是超平面的截距。
??这个超平面将特征空间划分为两个部分。位于两部分的点(特征向量)分别被分为 正、负两类。因此,超平面 S称为分离超平面 (separating hyperplane) ,如图 2.1 所示。
??给定一个数据集T:
T = ( x l , y 1 ) , ( x 2 , y 2 ) , … , ( x n , y n ) T = {(x_l ,y_1), (x_2 ,y_2) ,… , (x_n,y_n)} T=(xl?,y1?),(x2?,y2?),…,(xn?,yn?)
??其中 , x i ∈ X = R n , y i ∈ Y = ( + 1 , ? 1 ) , i = 1 , 2 , … , n x_i \in X = R^n, y_i \in Y=(+1 ,-1) , i= 1 , 2,… , n xi?∈X=Rn,yi?∈Y=(+1,?1),i=1,2,…,n
??如果存在某个超乎面 S
ω ? x + b = 0 ω\cdot x+b=0 ω?x+b=0
??能够将数据集的正实例点和负实例点完全正确地划分到超平面的两侧,则称数据集 T 为线性可分数据集( linearly separable data set ) ;否则,称数据集 T 线性不可分。
??假设训练数据集是线性可分的,感知机学习的目标是求得一个能够将训练集正实例点和负实例点完全正确分开的分离超平面。
??损失函数的一个自然选择是误分类点的总数。但是,这样的损失函数不是连续可导函数,不易优化。损失函数的另一个选择是误分类点到超平面 S 的总距离。
1 ∣ ∣ w ∣ ∣ ∣ w ? x 0 + b ∣ \frac{1}{||w||}|w \cdot x_0+b| ∣∣w∣∣1?∣w?x0?+b∣
? y i ( ω ? x i + b ) > O -y_i(ω \cdot x_i+b)>O ?yi?(ω?xi?+b)>O
- 当 ω ? x i + b > 0 ω ? x_i + b > 0 ω?xi?+b>0 时 , y i = ? 1 y_i = -1 yi?=?1
- 当 ω ? x i + b < 0 ω ? x_i + b < 0 ω?xi?+b<0 时, x i = + 1 x_i = +1 xi?=+1
? 1 ∣ ∣ w ∣ ∣ ∑ x i ∈ M y i ( w ? x 0 + b ) -\frac{1}{||w||}\sum_{x_i\in M}y_i(w \cdot x_0+b) ?∣∣w∣∣1?xi?∈M∑?yi?(w?x0?+b)
??感知机 s i g n ( w ? x + b ) sign(w ? x + b) sign(w?x+b) 学习的损失函数定义为:
L ( w , b ) = ? ∑ x i ∈ M y i ( w ? x 0 + b ) L(w,b)=-\sum_{x_i\in M}y_i(w \cdot x_0+b) L(w,b)=?xi?∈M∑?yi?(w?x0?+b)
??其中 M 为误分类点的集合。
??这个损失函数就是感知机学习的经验风险函数。
??感知机学习问题转化为求解损失函数式的最优化问题,最优化的方法是随 机梯度下降法。
求参数 w , b w, b w,b , 使其为以下损失函数极小化问题的解:
m i n w , b L ( w , b ) = ? ∑ x i ∈ M y i ( w ? x i + b ) min_{w,b}L(w,b)=-\sum_{x_i\in M}y_i(w \cdot x_i+b) minw,b?L(w,b)=?xi?∈M∑?yi?(w?xi?+b)
??其中 M 为误分类点的集合。
求解思路:
? w L ( w , b ) = ? ∑ x i ∈ M y i x i \nabla_w L(w,b)=-\sum_{x_i\in M}{y_ix_i} ?w?L(w,b)=?xi?∈M∑?yi?xi?
? b L ( w , b ) = ? ∑ x i ∈ M y i \nabla _b L(w,b)=-\sum_{x_i\in M}{y_i} ?b?L(w,b)=?xi?∈M∑?yi?
w ← w + η y i x i w\leftarrow w+ηy_ix_i w←w+ηyi?xi?
b ← b + η y i b \leftarrow b+ηy_i b←b+ηyi?
??式中 η ( 0 < η ≤ 1 ) η(0 <η\leq1) η(0<η≤1) 是步长,在统计学习中又称为学习率(learning rate) 。
??这种学习算法直观上有如下解释:
??当一个实例点被误分类,即位于分离超平面的 错误一侧时,则调整 ω, b 的值,使分离超平面向该误分类点的一侧移动,以减少该误分类点与超平面间的距离,直至超平面越过该误分类点使其被正确分类。
??定理表明,误分类的次数 k 是有上界的,经过有限次搜索可以找到将训练数据完 全正确分开的分离超平面。也就是说,当训练数据集线性可分时,感知机学习算法原 始形式迭代是收敛的。
??对偶形式的基本想法是,将 ω ω ω 和 b b b 表示为实例 x i x_i xi? 和标记 y i y_i yi? 的线性组合的形式, 通过求解其系数而求得 ω ω ω 和 b b b。
??对偶形式中训练实例仅以内积的形式出现。
??为了方便,可以预先将训练集中实例间的内积计算出来并以矩阵的形式存储,这个矩阵就是所谓的 Gram 矩阵 (Gram matrix):
G
=
[
x
i
?
x
i
]
N
×
N
G=[x_i \cdot x_i]_{N \times N}
G=[xi??xi?]N×N?