[TOC] 更新、更全的《機器學習》的更新網站,更有python、go、數據結構與算法、爬蟲、人工智能教學等着你:<a target="_blank" href="https://www.cnblogs.com/nickchen121/p/11686958.html">http://www.javashuo.com/article/p-vozphyqp-cm.html</a>html
因爲k近鄰能夠作迴歸又能夠作分類,因此最普通的k近鄰算法在scikit-learn庫中有兩種實現,即KNeighborsClassifier和KNeighborsRegressor;上次講到了k近鄰的兩個擴展限定半徑k近鄰,所以該方法在scikit-learn中也有兩種實現,即RadiusNeighborsClassifier和RadiusNeighborsRegressor;k近鄰還有一種擴展,即最近質心分類算法NearestCentroid。python
接下來將會討論這五者的區別,因爲是從官方文檔翻譯而來,翻譯會略有偏頗,有興趣的也能夠去scikit-learn官方文檔查看https://scikit-learn.org/stable/modules/classes.html#module-sklearn.neighbors算法
KNeighborsClassfier
模型就是最普通的k近鄰算法,能夠經過參數控制使用高斯距離、kd樹、球樹找到實例的$k$個近鄰。數據結構
from sklearn.neighbors import KNeighborsClassifier X = [[0], [1], [2], [3]] y = [0, 0, 1, 1]
neigh = KNeighborsClassifier(n_neighbors=3) neigh.fit(X, y)
KNeighborsClassifier(algorithm='auto', leaf_size=30, metric='minkowski', metric_params=None, n_jobs=None, n_neighbors=3, p=2, weights='uniform')
print(neigh.predict([[1.1]]))
[0]
print(neigh.predict_proba([[0.9]]))
[[0.66666667 0.33333333]]
找到某個點的n_neighbors個近鄰。機器學習
# 爲方便測試接下來的方法測試咱們將經過最近鄰模型演示 samples = [[0., 0., 0.], [0., .5, 0.], [1., 1., .5]] from sklearn.neighbors import NearestNeighbors
neigh = NearestNeighbors(n_neighbors=1) neigh.fit(samples)
NearestNeighbors(algorithm='auto', leaf_size=30, metric='minkowski', metric_params=None, n_jobs=None, n_neighbors=1, p=2, radius=1.0)
print(neigh.kneighbors([[1., 1., 1.]]))
(array([[0.5]]), array([[2]]))
X = [[0., 1., 0.], [1., 0., 1.]] neigh.kneighbors(X, return_distance=False)
array([[1], [2]])
計算樣本X的n_neighbors個近鄰的權重,能夠返回距離或者矩陣關係圖。ide
X = [[0], [3], [1]] from sklearn.neighbors import NearestNeighbors neigh = NearestNeighbors(n_neighbors=2) neigh.fit(X) A = neigh.kneighbors_graph(X) A.toarray()
array([[1., 0., 1.], [0., 1., 1.], [1., 0., 1.]])
KNeighborsRegressor
模型相似於KNeighborsClassifier
模型,不一樣的是兩個模型找到$k$個近鄰的時候KNeighborsClassifier
模型使用了多數表決發選擇類別,而KNeighborsRegressor
模型使用了對$k$近鄰去平均數或者中位數的方法獲得預測值。函數
RadiusNeighborsClassifier
模型相似KNeighborsClassifier
模型,不一樣之處在於RadiusNeighborsClassifier
模型少了兩個參數n_neighbors和n_jobs,多了兩個參數:學習
RadiusNeighborsRegressor
模型相似於RadiusNeighborsRegressor
模型,不一樣之處在於少了參數outlier_label,而且二者在獲得$k$個近鄰後處理的方式不一樣。測試
NearestCentroid
模型是基於最近質心分類算法實現的,因爲只有metric距離度量參數和shrink_threshold特徵距離閾值兩個參數,很少贅述。網站