机器学习中的感知机原始形式

简单感知机(原始形式)模型的代码实现

感知机是二分类的线性分类模型,其输入是实例的特征向量,输出是实例的类别(取值+1和-1)
感知机是学习神经网络和支持向量机的基础,目前我还没发现感知机的库函数可以调用,这是其他一些机器学习模型的库函数调用的例子基于 Python 和 Scikit-Learn 的机器学习介绍
感知机模型; f(x)=sign (wx+b)
w是权值或叫权值向量,b叫偏置,w
x表示w和x的內积,sign是符号函数,sign(x)=1或-1
通过顺势函数最小化求感知机模型,即所有误分类点到超平面S的总距离

以《统计学习方法》中的数据集为例验证代码,x1=(3,3),x2=(4,3),x3=(1,1);
y1=1,y2=1,y3=-1;
答案是w=[1. 1.],b=-3

import  numpy as np
# 2018.10.16 原始形式的感知机算法
X = np.array([[3,3],[4,3],[1,1]])  # 实例的特征向量
y = np.array([1,1,-1])   # 实例的类别
Shape = X.shape
row = Shape[0]     # 数据个数
col = Shape[1]     # 特征向量个数

def perceptron(niter,w,b,eta):
    while niter < N:  # 循环迭代
        i = 0
        while i < row:  # 遍历每个数据
            dir = dirction(i,w,b)   # 计算损失函数
            if  dir <= 0:   # 更新条件
                w = w+eta*X[i]*y[i]
                b = b + eta * y[i]  # 更新b
            i = i + 1
        niter = niter+1
    return w,b


def dirction(index,w,b):  #损失函数
    result = y[index]*(sum(w*X[index])+b)    # dir=y[index]*(w*X[index]+b)
    return result


w = np.zeros(col)  # 权值向量
b = 0       # 偏置
eta = 1     # 学习率
N = 5      # 迭代次数
niter = 0    # 当前迭代次数
ww,bb=perceptron(niter,w,b,eta)
print("w={0},b={1}".format(ww, bb))

使用sklearn.linear_model库中的Perceptron实现分类

from sklearn.linear_model import Perceptron
import numpy as np
X = np.array([[3,3],[4,3],[1,1]])  # 实例的特征向量
y = np.array([1,1,-1])   # 实例的类别
p = Perceptron(max_iter=100, shuffle=False)
p.fit(X,y)
print("w =", p.coef_)
print("b =", p.intercept_)

猜你喜欢

转载自blog.csdn.net/qq_39905917/article/details/82984576
今日推荐