Python KNN K近鄰分類

2021-10-19 09:58:20 字數 2150 閱讀 3281

對於給定的觀測

首先先基於計算距離度量方法(如歐式距離)的識別出k個最近的觀測(也叫做

然後這k個觀測基於自己的分類選舉出最終**的分類。

觀測

其中v是xu  附近內的k個觀測,yi是第i個觀測對應的分類。i是指示函式(1代表真否則為0),在scikit-learn裡可通過predict_proba方法檢視觀測屬於某個分類的概率。

歐幾里德距離(euclidean):

曼哈頓距離(manhattan):

閔可夫斯基距離(minkowski distance):

注:這裡p等於1即曼哈頓距離,p等於2即歐幾里德距離。

# step1 載入相關包,(因涉及距離計算,這裡將特徵都縮放到同一量綱上)

from sklearn.neighbors import kneighborsclassifier

from sklearn.preprocessing import standardscaler

from sklearn import datasets

from sklearn.pipeline import pipeline, featureunion

from sklearn.model_selection import gridsearchcv

# step2 裝載資料,指定x(特徵)y(目標)

iris = datasets.load_iris()

x = iris.data

y = iris.target

# step3 對所有特徵實施標準化

standardizer = standardscaler()

x_std = standardizer.fit_transform(x)

# step4 訓練knn分類器(指定n_neighbors=5為5個,n_jobs=-1即盡可能利用計算機資源)

knn = kneighborsclassifier(n_neighbors=5, n_jobs=-1).fit(x_std, y)

# step5 利用新的觀測**分類(這裡新2個觀測)

new_observations = [[ 0.75, 0.75, 0.75, 0.75],

[ 1, 1, 1, 1]]

print(knn.predict(new_observations))

print(knn.predict_proba(new_observations))

# 建立乙個pipeline

pipe = pipeline([("standardizer", standardizer), ("knn", knn)])

# 指定n_neighbors引數的候選值

search_space =

# 建立網格搜尋與交叉驗證

classifier = gridsearchcv(

pipe, search_space, cv=5, verbose=0).fit(x_std, y)

# 輸出n_neighbors最好的引數

關於kneighborsclassifier超引數的幾點說明:

1 度量指標metric是計算距離的引數

2 n_jobs引數用於指定能利用計算的多少個核,用於平行計算。

3 algorithm引數用於指定利用何種演算法計算最近的鄰居,一般不用刻意指定。

4 weights引數被指定距離時距離近的觀測在「投票」分類時權重會大於遠的鄰居。

5 計算時需要將所有的特徵進行標準化,即將它們縮放到同乙個量綱上。

K近鄰分類

k 近鄰 待會介紹 的一種極端情況。近朱者赤,近墨者黑 def distance p0,p1 computes squared euclidean distance return np.sqrt np.sum p0 p1 2 defnn classify training set,training ...

k近鄰分類 kNN

k近鄰分類 knn 一 knn原理 knn屬於監督分類方法,原理是利用某種距離度量方式來計算未知資料與已知資料的距離,並根據距離來確定資料光譜間的相似性,選取最近的k個距離作為判定未知資料類別的依據。在分類時,knn常用方法有 投票法,根據k個距離對應已知資料的類別進行統計,把出現次數最多的類別作為...

KNN K近鄰 分類演算法

knn演算法是機器學習中最基本演算法之一,屬於惰性學習演算法的典例。惰性指模型僅通過對訓練資料集的記憶功能進行 而不產生判別函式。knn演算法本身很簡單,歸納為如下幾步 選擇近鄰數量k和距離度量的方法 找到待分類樣本的k個最近鄰 根據最近鄰類標進行多數投票 k近鄰演算法的k,近鄰個數。一般的根據經驗...