什么是感知机?
感知机是训练模型的一种,是一种线性模型:w*x + b;其中w为输入的权重,b为偏移值;感知机算法思想就是将训练集特征不断输入到上述的线性模型中,将输出结果与样本标签不断匹配,以此来更新模型中的w和b,直至使所有样本输入到模型后的输出结果能与样本真实标签匹配;
在本文章中,我利用sklearn中的datasets模块去加载iris数据集;提供以下代码块:
from sklearn import datasets
data = datasets.load_iris()
data.feature_names
同时,本文还提供了一段代码去显示数据集中的部分数据的散点图,代码块如下:
import matplotlib.pyplot as plt
fig = plt.subplot()
fig.set_xlim([np.amin(data.data[:100,2]),np.amax(data.data[:100,2])])
fig.set_ylim([np.amin(data.data[:100,3]),np.amax(data.data[:100,3])])
plt.scatter(data.data[:50,2],data.data[:50,3],color = 'red', marker = 'o', label = 'Versicolor')
plt.scatter(data.data[50:100,2],data.data[50:100,3],color = 'blue', marker = 'o', label = 'Versicolor')
plt.plot([np.amin(data.data[:100,2]),np.amax(data.data[:100,2])],[0.8,0.7])
并且画了一条线性函数图形,来分隔两种iris,本次我们就是利用感知机来不断的更新这条一次函数线;
2、感知机有什么用呢
感知机用于线性的二分类任务中,感知机是一个线性二分类器。
3、感知机如何实现?
具体流程图如下:
该流程图包括两个循环,大循环是我们设定的迭代次数,当迭代此时达到一定数目时结束训练,小循环是我们的训练集数目,且训练集没有一个样本与模型匹配,correct+1,知道correct与样本数目一致,我们认为模型训练完毕。
具体的代码实现如下代码块:
import numpy as np
yangben1 = np.array([[1.9, 0.4], [1.6, 0.6]])
yangben2 = np.array([[3, 1.1]])
x = np.concatenate((yangben1,yangben2),axis = 0)
xlabel = [-1,-1,1]
class perceptron:
def __init__(self, learnrate = 0.1, epoch = 10, modelw = [0.1, 0.1], modelb = 0):
self.learnrate = learnrate
self.epoch = epoch
self.modelw = modelw
self.modelb = modelb
def predict(self,x):
if np.dot(self.modelw,x)+self.modelb >= 0:
return 1
else:
return -1
def updatewb(self,x,xlabel):
if self.predict(x) == xlabel:
return
else:
self.modelw += self.learnrate*x*xlabel
self.modelb += self.learnrate*xlabel
def fit(self,x,y):
if len(x) != len(y):
print("eror")
return False
m = len(x)
for epoch in range(self.epoch):
mcorrect = 0
for i in range(m):
if(y[i]== self.predict(x[i])):
mcorrect += 1
else:
self.updatewb (x[i],y[i])
if(mcorrect == m):
print('model is raedy after {} epoch(s)'.format(epoch))
break
classifier = perceptron(0.6, 10, [0.5, 0.5])
print(classifier.modelw)
print(classifier.modelb)
classifier.fit(x,xlabel)
print(classifier.modelw)
我们在感知机Perceptron类中定义了4个成员分别为 学习率(learnrate)、迭代次数(epoch)、模型权重(modelw)、模型偏移(modelb)。类中还定义了3种方法分别对应着预测、参数更新和模型训练;
最后我们通过自己拟定的数据集去观察参数更新模型训练的过程;