利用 sklearn 实现感知机

一、感知机简介

感知机(perceptron)是二类分类线性分类模型,其输入为实例的特征向量,输出为实例的类别。感知机对应于输入空间(特征空间)中将实例划分为正负两类的分离超平面。感知机是一种判别模型。

二、算法


二、利用sklearn 实现感知机

make_classification生成一些用来分类的样本(每次出来的数据不一样)

make_classification(n_samples, n_features,n_redundant,n_informative,n_clusters_per_class) 

#n_samples:生成样本的数量
#n_features:生成样本的特征数,特征数=n_informative + n_redundant + n_repeated
#n_informative:多信息特征的个数
#n_redundant:冗余信息,informative特征的随机线性组合

#n_clusters_per_class :某一个类别是由几个cluster构成的 

import numpy as np
from sklearn.datasets import make_classification
from sklearn.linear_model import Perceptron
from matplotlib import pyplot as plt

#生成二分类的样本
x,y=make_classification(n_samples=1000,n_features=2,n_redundant=0,n_informative=1,n_clusters_per_class=1)
#print(x)

#训练数据和测试数据
x_data_train = x[:800,:]
x_data_test = x[800:,:]
y_data_train = y[:800]
y_data_test = y[800:]

#正例和反例
positive_x1 = [x[i,0] for i in range(1000) if y[i] == 1]
positive_x2 = [x[i,1] for i in range(1000) if y[i] == 1]
negetive_x1 = [x[i,0] for i in range(1000) if y[i] == 0]
negetive_x2 = [x[i,1] for i in range(1000) if y[i] == 0]

#构建感知机
clf = Perceptron(fit_intercept=False,n_iter=30,shuffle=False)

#使用训练数据进行训练
clf.fit(x_data_train,y_data_train)
#得到训练结果,权重矩阵
print(clf.coef_)
#输出为:[[0.21720699 2.49185955]]

#超平面的截距,此处输出为:[0.]
#print(clf.intercept_)

#预测
acc = clf.score(x_data_test,y_data_test)
print(acc)

plt.scatter(positive_x1,positive_x2,c='red')
plt.scatter(negetive_x1,negetive_x2,c='blue')
#画出超平面(在本例中即是一条直线)
line_x = np.arange(-4,4)
line_y = line_x * (-clf.coef_[0][0] / clf.coef_[0][1]) - clf.intercept_
plt.plot(line_x,line_y)
plt.show()

注:感知机学习算法由于采用不同的初值或选取不同的误分类点,解可能不同。

参考:1、李航 统计学习方法

           2、https://zhuanlan.zhihu.com/p/27152953


猜你喜欢

转载自blog.csdn.net/weixin_38300566/article/details/80757105