#首先导入我们需要的包
from sklearn import datasets
import numpy as np
from sklearn.preprocessing import StandardScaler
from sklearn.linear_model import Perceptron
from sklearn.metrics import accuracy_score
#然后选用鸢尾花的第2,3列特征(画图可以发现这俩个特征可以很好的区分开来)
Iris = datasets.load_iris()
X = Iris.data[:,[2,3]]
y = Iris.target
X_train,X_test,y_train,y_test = train_test_split(X,y,test_size=0.3,random_state=0) #对训练数据进行划分
sc = StandardScaler()#以下几步为对数据进行标准化处理,防止由于某个特征过大,导致其他特征作用不明显
sc.fit(X_train)
X_train_std = sc.transform(X_train)
x_test_std = sc.transform(X_test)
ppn = Perceptron(n_iter=40,eta0=0.1,random_state=0)#训练感知机分类器
ppn.fit(X_train_std,y_train)
y_pred = ppn.predict(x_test_std)
print('预测错误的样本数:%d'%((y_test)!=(y_pred)).sum())
print('本测试的准确率为%.2f'%(accuracy_score(y_test,y_pred)))#注意,如果写%d由于取得是整数,所以最后的结果可能为0(%.2f)以为取俩位小数
#尝试把四个特征都跑一下,看下最终的效果
X_all =Iris.data
y_all = Iris.target
X_all_tarin,X_all_test,y_all_train,y_all_test = train_test_split(X_all,y_all,test_size=0.1,random_state=1)
sc1 = StandardScaler()
sc1.fit(X_all_tarin)
X_all_tarin_std = sc1.transform(X_all_tarin)
X_all_test_std = sc1.transform(X_all_test)
ppn_all = Perceptron(n_iter=50,eta0=0.1,random_state=0)
ppn_all.fit(X_all_tarin_std,y_all_train)
y_all_pred = ppn_all.predict(X_all_test_std)
print('使用全部数据得到的分类准确度%.2f'%(accuracy_score(y_all_test,y_all_pred)))
#经过比较我们发现,并不是特征越多越好,但是如何选取特征,有兴趣的小伙伴可以学习下特征工程