• 乙個樣本在特徵空間中,總會有k個最相似(即特徵空間中最鄰近)的樣本。其中,大多數樣本屬於某乙個類別,則該樣本也屬於這個類別。
• 是理論上比較成熟的方法,也是最簡單的機器學習演算法之一。
行業應用:
客戶流失**
欺詐偵測等(更適合於稀有事件的分類問題)
計算步驟:
算距離:給定測試物件,計算它與訓練集中的每個物件的距離
找鄰居:圈定距離最近的k個訓練物件,作為測試物件的近鄰
做分類:根據這k個近鄰歸屬的主要類別,來對測試物件分類
是一種懶惰演算法
• 平時不好好學習,考試(對測試樣本分類)時才臨陣磨槍(臨時去找k個近鄰)。
• 懶惰的後果:模型簡單,計算開銷大。
算距離
距離越近應該意味著這兩個點屬於乙個分類的可能性越大。
• 計算的距離衡量包括歐式距離、夾角余弦等。
• 歐式距離:
典型的距離定義
找領居:由哪幾個(k)已知樣本決定測試樣本類別
做分類
投票決定:少數服從多數;
加權投票法:根據距離的遠近,距離越近則權重越大(權重為距離平方的倒數)。
演算法流程
計算已知類別資料集中的點與當前點之間的距離;
按照距離遞增次序排序;
選取與當前點距離最小的k個點;
確定前k個點所在類別對應的出現頻率;
返回前k個點出現頻率最高的類別作為當前點的**分類。
優點
簡單,易於理解,易於實現,無需估計引數,無需訓練;
適合對稀有事件進行分類(例如當流失率很低時,比如低於0.5%,構造流失**模型);
特別適合於多分類問題(multi-modal,物件具有多個類別標籤),例如根據基因特徵來判斷其功能分類,knn比svm的表現要好。
缺點
對測試樣本分類時的計算量大,記憶體開銷大,評分慢;
可解釋性較差,無法給出決策樹那樣的規則。
python實現
sklearn庫中提供kneighborsclassifier實現knn演算法,此外,還提供radiusneighborsclassifier(非均勻取樣時比較合適,以半徑為選取方法)做最近鄰分類• sklearn.neighbors.kneighborsclassifier(n_neighbors=5 #鄰居數,預設為5
, weights=『uniform』 #用於**的權重方法
, algorithm=『auto』 #用於計算最近鄰的演算法(ball_tree、kd_tree、brute、auto)
, leaf_size=30 #傳遞給balltree 或kdtree 葉大小
, p=2 #
, metric=『minkowski』 #用於樹的度量距離
, metric_params=none #度量引數
, **kwargs)
導入庫:from sklearn.neighbors import kneighborsclassifier
利用knn演算法實現對鳶尾花分類模型的構建及分類效能的基本評估
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.neighbors import kneighborsclassifier
iris = load_iris(
)#鳶尾花資料
#拆分專家樣本集
data_tr, data_te, label_tr, label_te = train_test_split(iris.data, iris.target, test_size=0.2)
model = kneighborsclassifier(n_neighbors=3)
#構建模型
model.fit(data_tr, label_tr)
#模型訓練
pre = model.predict(data_te)
#模型**
print(pre)
acc = model.score(data_te, label_te)
#模型在測試集上的精度
print(acc)
機器學習經典演算法筆記 KNN
這裡面涉及到一些演算法實現的包,比如得到的每個點,求距離後怎麼處理的問題。前面求歐氏距離就不贅述了,這裡主要是補充一點求出結果後怎麼處理的問題 nearest np.argsort distances 這裡對每個距離進行排列,得出index 假設k 6的話 topx y train i for i ...
機器學習 演算法 KNN
參考 我感覺knn是最簡單的乙個機器學習演算法,實現很簡單,效果也一般般 就是算個euclideam distance,還有一些可以優化的地方,比如可以加權,第二篇文章提到了 python 如下 coding utf 8 created on aug 30,2013 author blacklaw ...
機器學習 KNN 演算法
一 主要目的 在樣本空間中,找到與待估計的樣本最臨近的k個鄰居,用這幾個鄰居的類別來估計待測樣本的類別 二 適用性 樣本容量比較大的類域的自動分類,而樣本容量較小的類域則容易誤分。尤其適用於樣本分類邊界不規則的情況 三 不足 1 當樣本不平衡時,比如乙個類的樣本容量很大,其他類的樣本容量很小,輸入乙...