1. 程式人生 > >簡單操作sklearn中內建資料

簡單操作sklearn中內建資料

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方法找到最好超引數的步驟