感知器堪称最简单的神经网络,其特点如下
sklearn的linear_model中提供了感知器模型,其构造函数如下
Perceptron(*, penalty=None, alpha=0.0001, l1_ratio=0.15, fit_intercept=True, max_iter=1000, tol=0.001, shuffle=True, verbose=0, eta0=1.0, n_jobs=None, random_state=0, early_stopping=False, validation_fraction=0.1, n_iter_no_change=5, class_weight=None, warm_start=False)
参数含义为
为了验证Perceptron的分类能力,下面生成生成1000组样本,每个样本有两个特征数,无冗余信息,且信息特征个数为1,每个类别由一组聚类组成。并且从生成样本中分别抽取一些数据,作为训练集和测试集。
from sklearn.datasets import make_classification
x,y = make_classification(n_samples=1000, n_features=2,n_redundant=0,n_informative=1,n_clusters_per_class=1)
xTrain, xTest = x[:800,:], x[800:,:]
yTrain, yTest = y[:800], y[800:]
接下来构造Perceptron,并且进行训练
from sklearn.linear_model import Perceptron
clf = Perceptron(fit_intercept=False,shuffle=False)
clf.fit(xTrain,yTrain) # 训练
print(clf.coef_) #得到训练结果,权重矩阵
print(clf.intercept_) #超平面的截距,此处输出为:[0.]
acc = clf.score(xTest,yTest) # 利用测试集进行验证
print(acc) # 得到的输出结果为0.955
最后,绘图验证分割结果
from matplotlib import pyplot as plt
import numpy as np
plt.scatter(x[:,0], x[:,1], c=y)
#画出超平面
X = np.arange(-4,4)
k = -clf.coef_[0][0] / clf.coef_[0][1]
Y = k*X - clf.intercept_
plt.plot(X,Y)
plt.show()
效果如下