机器学习数据挖掘 机器学习 Python R 人工智能程序员

统计学习方法-感知机-python

2017-10-23  本文已影响90人  songcmic

阅读原文
感知机是二分类的线性分类器,对应于输入空间中将实例划分为正负两类的分离超平面,基于分类的损失函数,利用梯度下降法对损失函数进行最小化,求得感知及模型。

感知机算法

算法描述:

梯度下降

将损失函数梯度下降过程定义为函数

以下代码命名为perceptron.py

import numpy as np
#X是一个列表,形式如[[x1,y1],[x2,y2],...],Y是一个类别的集合,也是一个列表如[1,1,-1,-1,...],对应于X中的每一个实例,lrate是学习率
def gradient(X, Y, lrate):
    w = np.matrix([0,0])
    b = 0
    length = len(X)
    while True :
        for i in range(length + 1):
            if i == length:
                return w, b
            elif (Y[i]*(w * np.matrix(X[i]).T + b) <= 0):
                w = w + lrate * Y[i] * np.matrix(X[i])
                b = b + lrate * Y[i]
                break

实例训练

训练数据集:X = {(3,3),(4,3),(1,1)}, Y = {1,1,-1}

规定学习率为1

以下代码命名为test.py

import perceptron
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
#导入数据
X = [[3,3],[4,3],[1,1]]
Y = Y = [1,1,-1]
lrate = 1

#使用梯度下降求解划分平面参数w,b
w, b = perceptron.gradient(X, Y, lrate)
print(w, b)
#绘制划分超平面
linex = np.linspace(0,5,5)
liney = -(w[0,0]/w[0,1])*linex - (1/w[0,1])*b 
plt.plot(linex, liney, color = 'r')
#绘制数据点
X = np.array(X)
Y = np.array(Y)
for i in range(0,len(X)):
    if Y[i] == 1:
        #正例用圆点表示
        plt.scatter(X[i][0],X[i][1],marker="o",alpha=0.8,s=50)
    else:
        #负例用×表示
        plt.scatter(X[i][0],X[i][1],marker="x",alpha=0.8,s=50)
#显示图片
plt.show()

在pyCharm下运行结果如下:

[[1 1]] -3

阅读原文
上一篇下一篇

猜你喜欢

热点阅读