栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

Perceptron 感知机算法 (对偶形式) Python numpy 实现

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Perceptron 感知机算法 (对偶形式) Python numpy 实现

Perceptron 感知机算法 (对偶形式)

参考:李航.统计学习方法[M]. 北京:清华大学出版社, 2019. 43-45.

import numpy as np


# 感知机对偶形式
class Perceptron:
    E: float  # 学习率
    A: np.array([])  # alpha, A = n * E
    W: np.array([])  # weight, W = sum(Ai* yi * xi)
    B: float  # b = sum(Ai * yi)
    Gram: np.array([])  # Gram 矩阵为 [xi · xj] n*n

    # 初始化
    def __init__(self, E=1.0):
        self.E = E

    def fit(self, X, Y):
        self.Gram = X.dot(X.T)
        self.A = np.zeros(X.shape[0])
        self.B = 0.0

        flag = True
        # 是否 未分好类
        while flag:
            flag = False
            for i in range(X.shape[0]):
                # 误分条件
                condition = (np.multiply(self.A, Y).dot(self.Gram[:, i]) + self.B) * Y[i]
                if condition <= 0:
                    self.A[i] += self.E
                    self.B += self.E * Y[i]
                    flag = True
                    print('A: ', self.A, ' | ', 'B: ', self.B)

        self.W = np.multiply(self.A, Y).dot(X)


if __name__ == '__main__':
    # <<统计学习方法>> 例 2.2
    X = np.array([[3, 3], [4, 3], [1, 1]])
    Y = np.array([1, 1, -1])
    model = Perceptron()
    model.fit(X, Y)
    print(model.W)
    print(model.B)

    msg = ''
    for i in range(X.shape[1]):
        msg += "{}*X{}".format(model.W[i], i + 1)
        if i != X.shape[1] - 1:
            msg += ' + '
        else:
            msg += ' + ({})'.format(model.B)

    print("分离超平面为", msg + ' = 0')
    print("感知机模型 f(x) = sign({})".format(msg))

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/588498.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号