對於給定的觀測
首先先基於計算距離度量方法(如歐式距離)的識別出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,近鄰個數。一般的根據經驗...