本文對(duì)scikit-learn中KNN相關(guān)的類庫使用做了一個(gè)總結(jié),主要關(guān)注于類庫調(diào)參時(shí)的一個(gè)經(jīng)驗(yàn)總結(jié),且該文非常詳細(xì)地介紹了類的參數(shù)含義,這是小編見過最詳細(xì)的KNN類庫參數(shù)介紹 。
目錄
scikit-learn 中KNN相關(guān)的類庫概述
K近鄰法和限定半徑最近鄰法類庫參數(shù)小結(jié)
使用KNeighborsClassifier做分類的實(shí)例
1. scikit-learn中KNN相關(guān)的類庫概述
在scikit-learn 中,與近鄰法這一大類相關(guān)的類庫都在sklearn.neighbors包之中。KNN分類樹的類是KNeighborsClassifier,KNN回歸樹的類是KNeighborsRegressor。除此之外,還有KNN的擴(kuò)展,即限定半徑最近鄰分類樹的類RadiusNeighborsClassifier和限定半徑最近鄰回歸樹的類RadiusNeighborsRegressor, 以及最近質(zhì)心分類算法NearestCentroid。
在這些算法中,KNN分類和回歸的類參數(shù)完全一樣。限定半徑最近鄰法分類和回歸的類的主要參數(shù)也和KNN基本一樣。
比較特別是的最近質(zhì)心分類算法,由于它是直接選擇最近質(zhì)心來分類,所以僅有兩個(gè)參數(shù),距離度量和特征選擇距離閾值,比較簡(jiǎn)單,因此后面就不再專門講述最近質(zhì)心分類算法的參數(shù)。
另外幾個(gè)在sklearn.neighbors包中但不是做分類回歸預(yù)測(cè)的類也值得關(guān)注。kneighbors_graph類返回用KNN時(shí)和每個(gè)樣本最近的K個(gè)訓(xùn)練集樣本的位置。radius_neighbors_graph返回用限定半徑最近鄰法時(shí)和每個(gè)樣本在限定半徑內(nèi)的訓(xùn)練集樣本的位置。NearestNeighbors是個(gè)大雜燴,它即可以返回用KNN時(shí)和每個(gè)樣本最近的K個(gè)訓(xùn)練集樣本的位置,也可以返回用限定半徑最近鄰法時(shí)和每個(gè)樣本最近的訓(xùn)練集樣本的位置,常常用在聚類模型中。
2.K近鄰法和限定半徑最近鄰法類庫參數(shù)小結(jié)
本節(jié)對(duì)K近鄰法和限定半徑最近鄰法類庫參數(shù)做一個(gè)總結(jié)。包括KNN分類樹的類KNeighborsClassifier,KNN回歸樹的類KNeighborsRegressor, 限定半徑最近鄰分類樹的類RadiusNeighborsClassifier和限定半徑最近鄰回歸樹的類RadiusNeighborsRegressor。這些類的重要參數(shù)基本相同,因此我們放到一起講:
3. 使用KNeighborsClassifier做分類的實(shí)例
完整代碼見github:
https://github.com/ljpzzz/machinelearning/blob/master/classic-machine-learning/knn_classifier.ipynb
3.1 生成隨機(jī)數(shù)據(jù)
首先,我們生成我們分類的數(shù)據(jù),代碼如下:
import numpy as np import matplotlib.pyplot as plt from sklearn.datasets.samples_generator import make_classification # X為樣本特征,Y為樣本類別輸出, 共1000個(gè)樣本,每個(gè)樣本2個(gè)特征,輸出有3個(gè)類別,沒有冗余特征,每個(gè)類別一個(gè)簇 X, Y = make_classification(n_samples=1000, n_features=2, n_redundant=0, n_clusters_per_class=1, n_classes=3)plt.scatter(X[:, 0], X[:, 1], marker='o', c=Y)plt.show()
先看看我們生成的數(shù)據(jù)圖如下。由于是隨機(jī)生成,如果你也跑這段代碼,生成的隨機(jī)數(shù)據(jù)分布會(huì)不一樣。下面是我某次跑出的原始數(shù)據(jù)圖。
接著我們用KNN來擬合模型,我們選擇K=15,權(quán)重為距離遠(yuǎn)近。代碼如下:
from matplotlib.colors import ListedColormap cmap_light = ListedColormap(['#FFAAAA', '#AAFFAA', '#AAAAFF'])cmap_bold = ListedColormap(['#FF0000', '#00FF00', '#0000FF']) #確認(rèn)訓(xùn)練集的邊界 x_min, x_max = X[:, 0].min() - 1, X[:, 0].max() + 1 y_min, y_max = X[:, 1].min() - 1, X[:, 1].max() + 1 #生成隨機(jī)數(shù)據(jù)來做測(cè)試集然后預(yù)測(cè) xx, yy = np.meshgrid(np.arange(x_min, x_max, 0.02), np.arange(y_min, y_max, 0.02))Z = clf.predict(np.c_[xx.ravel(), yy.ravel()]) # 畫出測(cè)試集數(shù)據(jù) Z = Z.reshape(xx.shape)plt.figure()plt.pcolormesh(xx, yy, Z, cmap=cmap_light) # 也畫出所有的訓(xùn)練集數(shù)據(jù) plt.scatter(X[:, 0], X[:, 1], c=Y, cmap=cmap_bold)plt.xlim(xx.min(), xx.max())plt.ylim(yy.min(), yy.max())plt.title("3-Class classification (k = 15, weights = 'distance')" )生成的圖如下,可以看到大多數(shù)數(shù)據(jù)擬合不錯(cuò),僅有少量的異常點(diǎn)不在范圍內(nèi)。
-
函數(shù)
+關(guān)注
關(guān)注
3文章
4371瀏覽量
64230 -
KNN
+關(guān)注
關(guān)注
0文章
22瀏覽量
10959 -
分類算法
+關(guān)注
關(guān)注
0文章
29瀏覽量
9999
原文標(biāo)題:scikit-learn K近鄰法類庫使用小結(jié)
文章出處:【微信號(hào):AI_shequ,微信公眾號(hào):人工智能愛好者社區(qū)】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
Python機(jī)器學(xué)習(xí)庫談Scikit-learn技術(shù)

在PyODPS DataFrame自定義函數(shù)中使用pandas、scipy和scikit-learn
通用Python機(jī)器學(xué)習(xí)庫scikit-learn
SOPC Builder/Nios 學(xué)習(xí)經(jīng)驗(yàn)總結(jié)

模擬電路設(shè)計(jì)經(jīng)驗(yàn)總結(jié)
Python機(jī)器學(xué)習(xí)庫和深度學(xué)習(xí)庫總結(jié)
基于Python的scikit-learn編程實(shí)例
詳細(xì)解析scikit-learn進(jìn)行文本分類

用英特爾DAAL性能庫加速SCIKIT學(xué)習(xí)
基于Python的scikit-learn包實(shí)現(xiàn)機(jī)器學(xué)習(xí)

評(píng)論