機器學習系列 5 KNN演算法

2022-08-23 23:18:14 字數 2933 閱讀 7980

knn演算法全稱是k nearest neighbors ,knn原理就是當**乙個值屬於什麼分類,根據它最近的k個分類是什麼進行**它屬於什麼類別。

重點有兩個: k 的確定和距離的計算

距離的計算:歐式距離

k值的計算:通過交叉驗證(將樣本資料按照一定的比例拆分成訓練用的資料和驗證用的資料),從中選取乙個較小的k值開始,不斷增加k的值,然後計算驗證集合方差,最終找到乙個比較適合的k值

優點:簡單易用,相比其他演算法,knn的演算法比較簡單明瞭。

模型訓練較快

**效果好

對異常值不敏感

缺點:對記憶體要求高,要訓練所有的資料

**階段比較慢

對不相關的功能或者資料規模敏感

3.1. knn演算法主要引數

def kneighborsclassifier(n_neighbors =5,

weights='uniform',

algorithm ='',

leaf_size = '30',

p=2,

metric = 'minkowski',

metric_params = none,

n_jobs = none

)'''- n_neighbors: 這個值就是指knn中的"k"了,通過調整k值,會有不同的效果

- weights: 權重,最普遍的knn演算法無論距離如何,權重都一樣的,但是有時候我們想讓距離他更近的點更加重要,這個時候就需要呼叫weight引數,

這個引數有三個選項: 'uniform':不管遠近權重都一樣;『distance':距離目標越近權重越高;自定義函式:自定義乙個函式,根據輸入座標值返回權重

- algorithm:在sklearn中,要構建knn模型有三種構建方式:1.暴力法:直接計算距離儲存比;2.使用kd樹構建knn模型;3:使用球狀樹構建;4 auto自動

選擇 'brute':蠻力實現 ;"kd_tree":kd實現knn;'ball_tree':球狀樹實現knn ; 'auto':預設引數,自動選擇合適的方法構建模型

- leaf_size:如果選擇蠻力實現,這個值是可以忽略的,當使用kd樹,他是控制葉子的閾值,預設為30,但是如果資料增多這個引數需要增大,否則速度過慢,

容易過擬合。

- p: 和metric結合使用,當metric引數是minkowski的時候, p=1為曼哈段,p=2是歐式距離,預設為p=2

- metric: 指定距離的度量方法,一般用歐式距離

'euclidean':歐式距離

'manhattan':曼哈頓距離

'chebyshev':切比雪夫距離

'minkowski':閔可夫斯基距離,預設引數

- n_jobs:指定多少個cpu

3.2. knn演算法在鳶尾花資料集上的實現

匯入資料

from sklearn.datasets import load_iris

from sklearn.model_selection import cross_val_score

import matplotlib.pyplot as plt

from sklearn.neighbors import kneighborsclassifier

iris = load_iris()

x = iris.data

y = iris.target

調參

# 調整k值

k_range = range(1, 31)

score =

# 迴圈,檢視誤差效果

for k in k_range:

knn = kneighborsclassifier(n_neighbors=k)

# cv 引數決定資料集劃分比例,這裡是按照5:1劃分訓練集和測試集

scores = cross_val_score(knn, x, y, cv=6, scoring='accuracy')

# 畫學習曲線

plt.plot(k_range, score)

plt.xlabel('value of k for knn')

plt.ylabel('score')

plt.show()

# 可以發現k =11時,效果最好

# 調整weights引數

# weights引數

score1 =

for k in ['uniform', 'distance']:

knn = kneighborsclassifier(n_neighbors=11,

weights= k)

scores = cross_val_score(knn, x, y, cv=6, scoring='accuracy')

print(score1)

# 選取weights = uniform引數

[0.98070987654321, 0.9799382716049383]

建模

# 建模

knn = kneighborsclassifier(n_neighbors=11, weights='uniform')

clf = knn.fit(x, y)

score = cross_val_score(clf, x, y, cv=10).mean()

score

機器學習與演算法(5) KNN 演算法

k近鄰演算法是一種基於模擬的分類方法,主要通過給定的檢驗組與和它相似的訓練組進行比較來學習。訓練組用n個屬性來描述,每個元組代表n維空間上的點。當給定乙個未知元組時,k最近鄰分類法搜尋該模式空間,找出最接近未知元組的k個訓練組,並將未知元組指派到模式空間中它的k個最近鄰中的多數類中。k近鄰 k ne...

文字分類學習筆記(5) KNN

knn分類器實現,執行極慢不推薦 coding utf 8 from numpy import from scipy import sparse,io from sklearn.datasets import load files from sklearn.cross validation impo...

機器學習 演算法 KNN

參考 我感覺knn是最簡單的乙個機器學習演算法,實現很簡單,效果也一般般 就是算個euclideam distance,還有一些可以優化的地方,比如可以加權,第二篇文章提到了 python 如下 coding utf 8 created on aug 30,2013 author blacklaw ...