数据分析 | KNN模型
KNN模型的應用
- 一、模型思想
- 二、k值的選擇
- 01 設置權(quán)重
- 02 交叉驗證
- 三、距離度量
- 01 歐式距離
- 02 曼哈頓距離
- 03 余弦相似度
- 四、代碼實現(xiàn)
一、模型思想
鄰近算法,或者說K最鄰近(KNN,K-NearestNeighbor)分類算法是數(shù)據(jù)挖掘分類技術中最簡單的方法之一。
如上圖所示,模型的本質(zhì)就是尋找k個最近的樣本,然后基于最近樣本做“預測”。對于離散型因變量來說,從k個最近的已知類別樣本中挑選出頻率最高的類別用于未知樣本的判斷;對于連續(xù)變量來說,則是將k個最近的已知樣本均值作為未知樣本的預測。
模型的執(zhí)行步驟如下:
二、k值的選擇
不同的k值對模型的預測準確性會有較大的影響,若k值過于偏小,可能會導致模型的過擬合;若k值偏大,又可能會使模型欠擬合。
01 設置權(quán)重
若k值設置的比較大時,擔心模型發(fā)生欠擬合的現(xiàn)象時,可以設置近鄰樣本的投票權(quán)重,若已知樣本距離未知樣本比較遠時,則對應的權(quán)重就設置得小一點,否則權(quán)重就大一點,通常可以將權(quán)重設置為距離的倒數(shù)。
02 交叉驗證
采用多重交叉驗證法,就是將k取不同的值,然后在每種值下執(zhí)行m重交叉驗證,最后選出平均誤差最小的k值
三、距離度量
01 歐式距離
在n維空間中,對于兩點 A ( x 1 , x 2 , ? , x n ) A(x_1,x_2,\cdots,x_n) A(x1?,x2?,?,xn?) 和 B ( x 1 , x 2 , ? , x n ) B(x_1,x_2,\cdots,x_n) B(x1?,x2?,?,xn?) 間距離為:
d A , B = ( y 1 ? x 1 ) 2 + ( y 2 ? x 2 ) 2 + ? + ( y n ? x n ) 2 d_{A,B}=\sqrt{(y_1-x_1)^2+(y_2-x_2)^2+\cdots+(y_n-x_n)^2} dA,B?=(y1??x1?)2+(y2??x2?)2+?+(yn??xn?)2?
02 曼哈頓距離
我們可以定義曼哈頓距離的正式意義為L1-距離或城市區(qū)塊距離,也就是在歐幾里德空間的固定直角坐標系上兩點所形成的線段對軸產(chǎn)生的投影的距離總和。
在平面上,坐標(x1,y1)的i點與坐標(x2,y2)的j點的曼哈頓距離為:
d i j = ∣ x 1 ? x 2 ∣ + ∣ y 1 ? y 2 ∣ d_{ij}=|x_1-x_2|+|y_1-y_2| dij?=∣x1??x2?∣+∣y1??y2?∣
以此延伸,在n維空間中,對于兩點 A ( x 1 , x 2 , ? , x n ) A(x_1,x_2,\cdots,x_n) A(x1?,x2?,?,xn?) 和 B ( x 1 , x 2 , ? , x n ) B(x_1,x_2,\cdots,x_n) B(x1?,x2?,?,xn?) 間的曼哈頓距離為:
d A , B = ∣ y 1 ? x 1 ∣ + ∣ y 2 ? x 2 ∣ + ? + ∣ y n ? x n ∣ d_{A,B}=|y_1-x_1|+|y_2-x_2|+\cdots+|y_n-x_n| dA,B?=∣y1??x1?∣+∣y2??x2?∣+?+∣yn??xn?∣
要注意的是,曼哈頓距離依賴坐標系統(tǒng)的轉(zhuǎn)度,而非系統(tǒng)在坐標軸上的平移或映射。
03 余弦相似度
余弦相似度,又稱為余弦相似性,是通過計算兩個向量的夾角余弦值來評估他們的相似度。余弦相似度將向量根據(jù)坐標值,繪制到向量空間中,如最常見的二維空間。
此時,二維空間AB兩點的余弦相似度為:
S i m i l a r i t y A , B = C o s θ = x 1 x 2 + y 1 y 2 x 1 2 + y 1 2 x 2 2 + y 2 2 Similarity_{A,B}=Cos\theta=\frac{x_1x_2+y_1y_2}{\sqrt{x_1^2+y_1^2}\sqrt{x_2^2+y_2^2}} SimilarityA,B?=Cosθ=x12?+y12??x22?+y22??x1?x2?+y1?y2??
同理,在n為空間的AB兩點,其余弦相似度為:
S i m i l a r i t y A , B = C o s θ = A → ? B → ∣ A → ∣ ∣ B → ∣ Similarity_{A,B}=Cos\theta=\frac{\overrightarrow{A}\ · \overrightarrow{B}}{|\overrightarrow{A}| \ |\overrightarrow{B}|} SimilarityA,B?=Cosθ=∣A∣?∣B∣A??B?
四、代碼實現(xiàn)
neighbors.KNeighborsClassfier(n_neighbors=5, weights='uniform', p=2, metric='minkowski')
- n_neighbors:指定臨近樣本個數(shù)k,默認為5個
- weights:指定臨近樣本的投票權(quán)重,默認為uniform,表示所權(quán)重一樣;若為“distance”,則表示投票權(quán)重與距離成反比。
- metric:指定距離的度量指標,默認為閔可夫斯基距離
- p:當參數(shù)metric為閔可夫斯基距離時,p=1,表示計算點之間的曼哈頓距離;p=2,表示計算點之間的歐氏距離;默認為2
此時,通過圖像得到最佳k值
# 導入第三方模塊 from sklearn import metrics# 重新構(gòu)建模型,并將最佳的近鄰個數(shù)設置為6 knn_class = neighbors.KNeighborsClassifier(n_neighbors = 6, weights = 'distance') # 模型擬合 knn_class.fit(X_train, y_train) # 模型在測試數(shù)據(jù)集上的預測 predict = knn_class.predict(X_test) # 構(gòu)建混淆矩陣 cm = pd.crosstab(predict,y_test) cm 獲得混淆矩陣 UNS High Low Middle Very Low row_0 High 29 0 0 0 Low 0 34 3 5 Middle 1 0 23 0 Very Low 0 0 0 6 # 分類模型的評估報告 print(metrics.classification_report(y_test, predict)) precision recall f1-score supportHigh 1.00 0.97 0.98 30Low 0.81 1.00 0.89 34Middle 0.96 0.88 0.92 26Very Low 1.00 0.55 0.71 11avg / total 0.93 0.91 0.91 101總結(jié)
以上是生活随笔為你收集整理的数据分析 | KNN模型的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 如何与客户高效地沟通需求
- 下一篇: 根据字母的首字母将单词分类