不用走啦,看得明白的。
感知机介绍
感知机是二分类的线性分类模型,输入为实例的特征向量,输出为实例的类别,取+1和-1二值,属于判别模型。
感知机对输入空间(特征空间)将实例分为正负两类的分离超平面,本质上就是在训练集(输入空间)找到一个合适的“ 平面 ”将所有实例进行正确的二类分类。
感知机学习旨在求出将训练数据进行线性划分的分离超平面,为此,导入基于误分类的损失函数,利用梯度下降法对损失函数进行及消化,求得感知机模型。
1.感知机模型
感知机:假设输入空间为X,输出空间为Y,其中Y={+1,-1}。有输入空间到输出空间的如下函数f(x),称为感知机。其中,w和b为感知机模型参数,w为权重值,b为偏置,sign为符号函数。
感知机的几何解释:线性方程w ⋅ x+b=0,它代表了法向量为w,截距为b的超平面S,这个超平面将特征空间分为两个部分,分别对应正类和负类(+1和-1)。
直观的解释是在输入空间找到一个超平面将实例向量划分为正负两类。说一下个人对超平面的理解,对应于二维空间超平面就是一条直线,对应于三维空间超平面就是一个平面,对于三维以上的空间我们就不好想象了,所以就出现了超平面这个名词;就理解成一个“平面”把训练数据集划分为正负两类。
2.感知机学习策略
感知机学习的目标是求得一个能够将训练集正负实例点完全正确分开的分离超平面,即求出感知机模型参数w、b。
对于正确分类的点:w ⋅ x + b > 0,对应的y值为 +1,即(w ⋅ x + b)* y > 0
w ⋅ x + b < 0,对应的y值为 -1,即(w ⋅ x + b)* y > 0
对于误分类的点:w ⋅ x + b > 0,对应的y值为 -1,即(w ⋅ x + b)* y < 0
w ⋅ x + b < 0,对应的y值为+1,即(w ⋅ x + b)* y < 0
这里损失函数是选择误分类点到超平面S的总距离,|| w ||是w的L2范数。
之所以不考虑分母是因为|| w ||是一个常数,例如(x1,x2)的L2范数是根号内(x12 + x22)。
3.感知机学习算法
感知机学习算法是对上述损失函数进行极小化,求得w和b,使得上述损失函数最小。感知机学习算法是误分类驱动的,可以采用随机梯度下降法。
这种学习算法直观解释为:初始化一个超平面S,然后不断的移动S向误分类点的一侧移动,直至超平面最终对数据集正确分类。
原始算法
代码:
import numpy as np
class Perceptron:
def __init__(self):
self.weights = None
self.bias = None
def sign(self,value):
return 1 if value >=0 else -1
def train(self,data_set,labels):
lr = 1 #学习率
data_set = np.array(data_set)
n = data_set.shape[