• 感知机


    原始形式

    模型

    线性二分类模型

    [fleft( x ight) = signleft( {w cdot x + b} ight)]

    学习策略

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

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

    参数更新方式

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

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

    其中$eta $是学习率

     

    对偶形式

    模型表示

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

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

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

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

    [fleft( x ight) = signleft( {sumlimits_{j = 1}^N {{alpha _j}{y_j}{x_j} cdot x + b} } ight)]

     参数更新方式

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

    [egin{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矩阵(${ m{G}} = {left[ {{x_i} cdot {x_j}} ight]_{N imes 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

  • 相关阅读:
    使用 MongoDB 存储商品分类信息
    什么鬼!基于备份恢复的实例数据还能变多?
    MongoDB账号管理及实践
    TiDB和MongoDB分片集群架构比较
    MongoDB复制集与Raft协议异同点分析
    MongoDB安全事件的防范与反思
    [翻译]pytest测试框架(二):使用
    浏览器渲染原理及解剖浏览器内部工作原理
    html实现鼠标悬停变成手型实现方式
    用ul li实现边框重合并附带鼠标经过效果
  • 原文地址:https://www.cnblogs.com/xumaomao/p/11022503.html
Copyright © 2020-2023  润新知