利用鸢尾花数据,解释并不是特征越多越好

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u014727529/article/details/80395914
#首先导入我们需要的包

from sklearn import datasets

import numpy as np

from sklearn.cross_validation import train_test_split
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)))

#经过比较我们发现,并不是特征越多越好,但是如何选取特征,有兴趣的小伙伴可以学习下特征工程

猜你喜欢

转载自blog.csdn.net/u014727529/article/details/80395914