李航-第2章感知机

说白了,感知机就是找到一条直线(称作超平面)用来把两类点分开,这个直线用线性方程表示就是感知机。关键是如何找到分隔两类点的这个(最优)线性方程。


感知机模型
感知机模型.jpg
感知机模型的损失函数

因为点到超平面的距离是正的,所以损失函数是非负的。误分类点越少,误分类点离超平面越近,损失函数值就越小。感知机的学习策略就是找到使损失函数最小的参数w,b,也即是找到了感知机模型。

损失函数.jpg
一些问题:

误分类点.jpg
1、为什么对于误分类点,上面的公式是成立的?
因为:
当数据点是正确值为+1的时候,你误分类了,那么你判断为-1,则算出来f(x)<0,所以-yi * f(x)>0
当数据点是正确值为-1的时候,你误分类了,那么你判断为+1,则算出来f(x)>0,所以-yi * f(x)>0
参考链接:浅析感知机(一)--模型与学习策略

误分类点到超平面距离.jpg
这个点到超平面(直线)的距离的公司是如何来的,怎么推导?这里用的其实是向量的形式,而且值都是大于0的。所以可以直接进行求和,然后迭代求极值。可参考点到直线的距离推导:点到直线距离公式的几种推导

2、因为两类是线性可分的,则很显然可能不只有一个分隔超平面。那么如何确定最优的超平面呢?

方程中yi什属于{+1,-1},具体什么时候应该是+1,什么时候应该是-1呢?

3、如何保证没有误分类点?如何是二分类的,则在有限次迭代后即可。

sign是符号函数

感知机模型损失函数的优化方法,什么是梯度下降法

梯度下降法即表示进行求导,然后向函数值减少的方向不断调整,直到找到极小值。这里要可以参考凸优化以及微积分里面的求导数和偏导数。


梯度下降法.jpg
感知机模型算法过程

随机抽取一个误分类点,通过更新参数w,b使其梯度下降。当实例点被误分类,即位于分离超平面的错误侧,则调整w, b的值,使分离超平面向该无分类点的一侧移动,直至误分类点被正确分类

感知机学习算法的原始形式
感知机学习算法原始形式.jpg
# 感知机学习算法初始形式实现代码
import numpy as np

def Train(X_train, Y_train):
    #获取维度参数
    m, n = np.shape(X_train)
    #初始化w,b
    w = np.zeros((n, 1))
    b = 0

    while True:
        count = m     #统计修改次数,若没有变化,则退出while语句
        for i in range(m):
            result = Y_train[i]*(np.dot(X_train[i], w) + b)
            if result <= 0:           #计算yi(w*xi+b),其中np.dot表示矩阵相乘
                count -= 1
                #更新w,b。注意这里面的对w,b的循环的更新情况
                for j in range(n):
                    w[j] = w[j] + Y_train[i]*X_train[i][j]
                b = b + Y_train[i]

                print("w:(",w,")","b:",b)
                break
        if count== m:
            break
    return w,b

def main():
    X_train = np.array(([3, 3], [4,3], [1,1]))
    Y_train = np.array(([1,1,-1]))
    print(Train(X_train, Y_train))

if __name__ == '__main__':
    main()


感知机学习算法的对偶形式

感知机算法的对偶形式看的不是很懂,还需要花时间来看。一个是参数变了以及更新的形式变了。
另外一个就是算法的收敛性的以及证明还需要细看。


感知机学习算法的对偶形式.jpg

参考链接:
点到直线距离公式的几种推导
如何理解感知机学习算法的对偶形式?
浅析感知机(一)--模型与学习策略
感知机
感知机学习算法的对偶形式

你可能感兴趣的:(李航-第2章感知机)