感知机算法是机器学习最基本的理论算法之一,其原理如下图所示:
该算例和应用以及数据集可从博主的github内下载:https://github.com/Airuio/python-
其python代码如下:
improt numpy as np
class perceptron(object):
def __init__(self,eta = 0.1,n_iter = 10):
self.eta = eta
self .n_iter = n_iter
def fit(self,x,y):
self.w_ = np.zeros(1+x.shape[1]) //创建一个全为0的一维矩阵,长度为样本x特征数加1,加一是补充闵值的权重。
self.errors_ = []
for _ in range(self.n_iter):
errors = 0
for xi,target in zip(x,y): //关联样本特征和预测值
update = self.eta * (target - self.predict(xi) )
self.w_[1:] += update * xi
self.w_[0] += update
errors += int(update != 0 )
self.errors_.append(errors)
return self //方法级联,自己返回修改后的自己
def net_input(self,x):
return np.dot(x, self.w_[1:])+self.w[0] //计算预测值
def predict(self, x):
return np.where(self.net_input(x) >= 0.0, 1, -1) //三元语句,满足大于0返回1,不满足返回-1
以上为感知器算法的实现,导入为模块perceptron_achieve。
接下来使用这个感知器来进行一个简单的分类计算:
以鸢尾花数据集LIRS数据集为对象进行统计分类,代码如下:
from perceptron_achieve import perceptron
import numpy as np #np用于实现算法中的一些操作
import pandas as pd #pd主要用于读取数据
import matplotlib.pyplot as plt #导入作图API
from matplotlib.colors import ListedColormap #结果可视化的高级可选用工具,可以自己配色
df = pd.read_excel(io = 'lris.xlsx',header = None) #读取数据为Dataframe结构,没有表头行
y = df.iloc[0:100,4].values #取前100列数据,4列为标识
y = np.where(y == 'Iris-setosa', -1,1)
X = df.iloc[0:100,[0,2]].values #iloc为选取表格区域,此处取二维特征进行分类,values为返回不含索引的表
plt.scatter(X[:50,0],X[0:50,1],color = 'red',marker = 'o', label = 'setosa') #绘制点图
plt.scatter(X[50:100,0],X[50:100,1],color = 'blue',marker = 'x', label = 'versicolor')
plt.xlabel('petal lenth') #添加坐标轴名称
plt.ylabel('sepal lenth')
plt.legend(loc = 2) #画出曲线标签以及标签的位置参数
plt.show() #出图
#以上六行与分类无关,仅仅是为了直观的感受两块数据的分布区域
plt.show()
算例得到如下图所示的结果: