利用鳶尾花數據,解釋並不是特徵越多越好

#首先導入我們需要的包

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)))

#經過比較我們發現,並不是特徵越多越好,但是如何選取特徵,有興趣的小夥伴可以學習下特徵工程

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章