zoukankan      html  css  js  c++  java
  • 统计学习方法 | 感知机 | python实现

    感知机是二类分类的线性分类模型,利用随机梯度下降法对基于误分类的损失函数进行极小化。

    书中算法可以将所有样本和系数向量写成增广向量的形式,并将所有负样本乘以-1,统一形式,方便计算。

    (1)训练数据集线性可分时,感知机学习算法原始形式迭代收敛

    (2)算法存在许多解

    感知机学习算法的对偶形式使得训练过程中实例仅以内积形式出现,可以提前存储(Gram矩阵)。

    # train = [[(3, 3), 1], [(4, 3), 1], [(1, 1), -1]]
    train = [[(0, 0), 1], [(0, 1), 1], [(1, 0), -1], [(1, 1), -1]]
    w = [0, 0]
    b = 0
    
    def update(data):
        global w, b
        for i in range(len(data[0])):
            w[i] = w[i] + 1 * data[1] * data[0][i]
        b = b + 1 * data[1]
        # print(w, b)
    
    def cal(data):
        global w, b
        res = 0
        for i in range(len(data[0])):
            res += data[0][i] * w[i]
        res += b
        res *= data[1]
        return res
    
    def check():
        flag = False
        for data in train:
            if cal(data) <= 0:
                flag = True
                update(data)
        if not flag:
            print("w: " + str(w) + " b: " + str(b))
            return True
        return False
    
    for times in range(1000):
        if check():
            break
    

    算法的实现参考了这篇文章

  • 相关阅读:
    RestKit ,一个用于更好支持RESTful风格服务器接口的iOS库
    Pop–实现任意iOS对象的任意属性的动态变化
    界面传值失败
    UIImagePickerController
    NSURLSession
    iOS图标尺寸
    cocoapods
    duplicate symbol _OBJC_IVAR
    MAC升级openssl
    Mac
  • 原文地址:https://www.cnblogs.com/hellozy/p/11430759.html
Copyright © 2011-2022 走看看