最基礎的分類演算法(KNN)

yifanwu發表於2021-09-09

 K近鄰演算法(K Nearest Neighbors)

和K個樣本哪個類別相似越多,則這個新的樣本最有可能屬於哪個類別。

1.1過程

(1)相似度計算:

尤拉距離:


圖片描述

distances=[sqrt(np.sum((x_train-x)**2))for x_train in X_train]

(2)進行排序,返回的是索引

nearest=np.argsort(distances)

k=6

topK_y=[y_train[i] for I in nearest[:k]]

(3)不同類別的點有多少個

from collections import Counter

votes=Counter(topK_y)

predict_y=votes.most_common(1)[0] //計算最多的一個元素

===========》則判斷出新來的類別predict_y

1.2如何使用scikit-learn中的kNN?

(1)引包:from sklearn.neighbors import kNeighborsClassifier

(2)改造函式:kNN_classfier=KNeighborsClassifier(n_neighbors=6)

(3)kNN_classfier.fit(x_train,y_train)

(4)預測:y_predict=kNN_classfier.predict(x) 

(5)y_predict[0]  

1.3演算法效能

分割原始模型成訓練資料集和測試資料集:

訓練資料集用於訓練模型;測試資料集用於評測訓練出來的模型怎麼樣。

(1)打亂:索引隨機的排列:shuffle_index=np.random.permutation(len(X))

(2)設定測試資料集和訓練資料集的比例,得到測試資料集和訓練資料集的資料大小

test_radio=0.2

test_size=(int)(len(X)*test_radio)

test_indexes=shuffle_index[:test_size]

tain_indexes=shuffle_index[test_size:]

x_train=X[train_indexes]

y_train=Y[train_indexes]

x_test=X[test_indexes]

y_test=Y[test_indexes]

sklearn中的train_test_split:

from sklearn.model_selection import train_test_split

x_train, y_train, x_test,y_test=train_split_test(X,Y,test_size=0.2)

1.4超引數

超引數:在執行機器學習之前需要指定的引數。例如KNN中的K

模型引數:在模型過程中學習的引數

尋找knn中最好的k?

圖片描述

knn

距離:當p=1=》曼哈頓距離;當p=2=》尤拉距離…..則p就是超引數

圖片描述

搜尋明可夫斯基距離相應的p:

圖片描述

明可夫斯基距離

1.5網格搜尋GridSearch

導包:fromsklearn.model_selection import GridSearchCV

使用:grid_search=GridSearchCV(knn_clf,param_grid,njobs,verbose)

1.6資料歸一化Feature Scaling

將所有的資料對映到同一尺度。

1.6.1最值歸一化normalization

把所有資料對映到0-1之間(適用於分佈有明顯邊界的情況;受outlier影響較大)

例如:同學考試成績,影像畫素

X[:,0]=(X[:,0]-np.min(X[:,0]))/(np.max(X[:,0]-np.min(X[:,0])))

1.6.2均值方差歸一化standardization

把所有資料歸一到均值為0方差為1的分佈中。(適用於分佈沒有明顯邊界的情況;有可能存在極端資料值)

X [:,0]=(X [:,0]-np.mean(X[:,0]))/ np.std(X[:,0])

X[:,1]=(X[:,1]-np.mean(X[:,1]))/ np.std(X[:,1])

1.6.3Scikit-learn中使用Scaler

(1)導包:from sklearn.preprocessing import StandardScaler

(2)例項化:standardScaler=StandardScaler()

(3)fit:standardScaler.fit(x_train)

(4)均值:standardScaler.mean_

(5)方差:standardScaler.scale_

(6)歸一化:

x_train =standardScaler.transform(x_train)

x_test_standard=standardScaler.transform(x_test)



作者:下雨天的小白鞋
連結:


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/2157/viewspace-2811954/,如需轉載,請註明出處,否則將追究法律責任。

相關文章