感知机

原始形式

模型

线性二分类模型

\[f\left( x \right) = sign\left( {w \cdot x + b} \right)\]

学习策略

误分类点到超平面函数距离最小化

损失函数:$\mathop {\min }\limits_{w,b} L\left( {w,b} \right) =  - \sum\limits_{{x_i} \in M} {{y_i}\left( {w \cdot {x_i} + b} \right)} ,M$是误分类点集合

参数更新方式

随机选择一个误分类点$\left( {{x_i},{y_i}} \right)$,对w,b进行更新:

\[\begin{array}{l}
w \leftarrow w + \eta {y_i}{x_i}\\
b \leftarrow b + \eta {y_i}
\end{array}\]

其中$\eta $是学习率

 

 

对偶形式

模型表示

假设w,b初始值为0,则最后学习到的w,b可表示为:

\[\begin{array}{l}
w = \sum\limits_{i = 1}^N {{\alpha _i}{y_i}{x_i}} \\
b = \sum\limits_{i = 1}^N {{\alpha _i}{y_i}} \\
{\alpha _i} = {n_i}\eta
\end{array}\]

其中${n_i}$表示第$i$个误分类点修改的次数

这样感知机模型可以表示为:

\[f\left( x \right) = sign\left( {\sum\limits_{j = 1}^N {{\alpha _j}{y_j}{x_j} \cdot x + b} } \right)\]

 参数更新方式

随机选择一个样本$\left( {{x_i},{y_i}} \right)$,如果${y_i}\left( {\sum\limits_{j = 1}^N {{\alpha _j}{y_j}{x_j} \cdot {x_i} + b} } \right) \le 0$,对$w,b$进行更新:

\[\begin{array}{l}
{\alpha _i} \leftarrow {\alpha _i} + \eta \\
b \leftarrow b + \eta {y_i}
\end{array}\]

这个公式可以理解为:对于第$i$个样本每被误分类一次,这个样本对应的参数${\alpha _i}$就更新一次。

 对偶形式的优点

对偶形式的模型计算每个样本的预测值时向量乘积部分以${x_j} \cdot {x_i}$的形式存在,这样通过提前计算Gram矩阵(${\rm{G}} = {\left[ {{x_i} \cdot {x_j}} \right]_{N \times N}}$)来加快运算速度。

 

代码实现

class Model(object):
    def __init__(self, W, b, l_rate):
        self.W = W
        self.b = b
        self.l_rate = l_rate
    
    def sign(self, X):
        y = np.dot(self.W, X) + self.b
        return y
    
    def fit(self, X_train, y_train):
        while True:
            have_wrong = False
            for i in range(len(X_train)):
                X = X_train[i].transpose()
                y = y_train[i]
                if y * self.sign(X) <= 0:
                    self.W += (self.l_rate * y * X).transpose()
                    self.b += self.l_rate * y
                    have_wrong = True
            if have_wrong == False:
                break
View Code

完整代码见github:https://github.com/xmm1994/machine-learning/blob/master/感知机.ipynb

 

posted @ 2019-06-14 11:37  xd_xumaomao  阅读(226)  评论(0编辑  收藏  举报