簡單操作sklearn中內建資料
阿新 • • 發佈:2018-11-24
import matplotlib
from sklearn.model_selection import train_test_split
from sklearn import datasets
dig=datasets.load_digits()#讀入sklearn內建資料
print(dig.keys())
X=dig.data
y=dig.target
X,y
這段程式碼載入dighits資料,並讀取資料的資訊
執行如下:
some=X[555]#隨便挑選一組資料,作圖,可以看出這組資料是手寫的數字的資料 print(y[555]) some1=some.reshape(8,8) plt.imshow(some1,cmap=matplotlib.cm.binary) plt.show()
執行如下:
#使用train_test_split方法劃分資料
from sklearn.model_selection import train_test_split
X_train,X_test,y_train,y_test=train_test_split(X,y,test_size=0.2)
X_train.shape
#使用sklearn庫中的KNN方法
from sklearn.neighbors import KNeighborsClassifier KNN=KNeighborsClassifier(n_neighbors=3) KNN.fit(X_train,y_train)#得到模型 y_predict=KNN.predict(X_test) accuracy=sum(y_predict==y_test)/len(y_test) print("預測結果準確度:",accuracy)
或者用sklearn中的方法求準確度,兩個結果一樣
from sklearn.metrics import accuracy_score
accuracy_score(y_test,y_predict)
這差不多也算一個簡單的機器學習過程了,輸入資料,建立模型,預測。與完整的相比,還少了資料預處理、模型優化、調參等等優化步驟
超引數:指在執行機器學習演算法之前設定的引數,比如knn中的k
模型引數:演算法過程中學習的引數,knn中沒有模型引數
下面尋找最好的k
best_k=-1 best_score=0.0 for k in range(1,11): knn_clf=KNeighborsClassifier(n_neighbors=k) knn_clf.fit(X_train,y_train) score=knn_clf.score(X_test,y_test) if score>best_score: best_k=k best_score=score print("best_k=",best_k) print("best_score=",best_score)
使用網格搜尋方法找最好的超引數的值
#weigths,n_neighbors,p都為knn中的超引數
param_grid=[
{
'weights':['uniform'],
'n_neighbors':[i for i in range (1,11)]
},
{
'weights':['distance'],
'n_neighbors':[i for i in range (1,11)],
'p':[i for i in range (1,6)]
}
]
knn_clf=KNeighborsClassifier()
from sklearn.model_selection import GridSearchCV
grid_search=GridSearchCV(knn_clf,param_grid)
%%time #得到執行的時間
grid_search.fit(X_train,y_train)
執行結果:
grid_search.best_score_
0.9874739039665971,相比上面的還低些,,,解釋說是機器學習演算法的評估標準不同
grid_search.best_params_#得到最優引數
{'n_neighbors': 3, 'p': 2, 'weights': 'distance'}
knn_clf=grid_search.best_estimator_
knn_clf.score(X_test,y_test)
0.986111111111111
這些就是使用sklearn中的model_selection模組封裝的GridSearchCV方法找到最好超引數的步驟