机器学习--感知机算法原理方法及代码实现

Posted lsm-boke

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了机器学习--感知机算法原理方法及代码实现相关的知识,希望对你有一定的参考价值。

1.感知器算法原理

两类线性可分的模式类:技术图片,设判别函数为:技术图片

                  技术图片

     对样本进行规范化处理,即类样本全部乘以(-1),则有:

                    技术图片

感知器算法通过对已知类别的训练样本集的学习,寻找一个满足上式的权向量。

2.算法步骤

1)选择N个分属于类的模式样本构成训练样本集{ X1,  …, XN }构成增广向量形式,并进行规范化处理。任取权向量初始值W(1),开始迭代。迭代次数k=1

(2)用全部训练样本进行一轮迭代,计算WT(k)Xi 的值,并修正权向量。分两种情况,更新权向量的值:

    ?若  技术图片 分类器对第 i 个模式做了错误分类,权向量校正为: 技术图片 c为整的校正增量。

    ?若  技术图片 分类正确,权向量不变,技术图片 

 统一写成:

      技术图片

(3)分析分类结果:只要有一个错误分类,回到(2),直至对所有样本正确分类。

  感知器算法是一种赏罚过程:

    分类正确时,对权向量“赏”——这里用“不罚”,即权向量不变;

    分类错误时,对权向量“罚”——对其修改,向正确的方向转换。

  3.代码示例

#感知机算法
import numpy as np
import matplotlib.pyplot as plt

X0 = np.array([[1,0],
              [0,1],
              [2,0],
              [2,2]])
X1 = np.array([[-1,-1],
              [-1,0],
              [-2,-1],
              [0,-2]])

#将样本数据化为增广向量矩阵
ones = -np.ones((X0.shape[0],1))
X0 = np.hstack((ones,X0))
ones = -np.ones((X1.shape[0],1))
X1 = np.hstack((ones,X1))

#对样本进行规范化处理
X = np.vstack((-X0,X1))
plt.grid()
plt.scatter(X0[:,1],X0[:,2],c = r,marker=o,s=500)
plt.scatter(X1[:,1],X1[:,2],c = g,marker=*,s=500)
W = np.ones((X.shape[1],1))

flag = True
while(flag):
    flag = False
    for i in range(len(X)):
        x = X[i,:].reshape(-1,1)    
        if np.dot(W.T,x)<=0:
            W = W + x
            flag = True
p1=[-2.0,2.0]
p2=[(W[0]+2*W[1])/W[2],(W[0]-2*W[1])/W[2]]
plt.plot(p1,p2)
plt.show()
     

输出结果:

  技术图片

 

以上是关于机器学习--感知机算法原理方法及代码实现的主要内容,如果未能解决你的问题,请参考以下文章

附核心代码C++实现特征值连续的多分类问题(朴素贝叶斯决策树感知机)

机器学习强基计划1-1:图文详解感知机算法原理+Python实现

机器学习——实验一

机器学习实验一 感知器及其应用

机器学习算法及代码实现–支持向量机

机器学习--朴素贝叶斯算法原理方法及代码实现