knn是通過測量不同特徵值之間的距離進行分類。
如果乙個樣本在特徵空間中的k個最相似(即特徵空間中最鄰近)的樣本中的大多數屬於某乙個類別,則該樣本也屬於這個類別,其中k通常是不大於20的整數。knn演算法中,所選擇的鄰居都是已經正確分類的物件。該方法在定類決策上只依據最鄰近的乙個或者幾個樣本的類別來決定待分樣本所屬的類別。
找特徵的距離計算,距離一般使用歐氏距離或曼哈頓距離:
其演算法的描述為:
1)計算測試資料與各個訓練資料之間的距離;
2)按照距離的遞增關係進行排序;
3)選取距離最小的k個點;
4)確定前k個點所在類別的出現頻率;
5)返回前k個點中出現頻率最高的類別作為測試資料的**分類。
k個點所在類別也是k個點的特徵結果,比如房價。可以對k個點房價取平均值得到我們需要**的結果值。
第一步是資料集的切分,
.copy().iloc[:200] .copy().iloc[201:] 講資料集以200為劃分為訓練集和測試集
然後對訓練集按照特徵值距離的knn演算法得到**值,**值的準確性判定,使用均方根誤差,用均方根誤差作為判定模型得分的依據。
多個特徵值一起使用時,一定要做標準化和歸一化處理。
z-score標準化:這是最常見的特徵預處理方式,基本所有的線性模型在擬合的時候都會做 z-score標準化。具體的方法是求出樣本特徵x的均值mean和標準差std,然後用(x-mean)/std來代替原特徵。這樣特徵就變成了均值為0,方差為1了。
max-min標準化:也稱為離差標準化,預處理後使特徵值對映到[0,1]之間。具體的方法是求出樣本特徵x的最大值max和最小值min,然後用(x-min)/(max-min)來代替原特徵。如果我們希望將資料對映到任意乙個區間[a,b],而不是[0,1],那麼也很簡單。用(x-min)(b-a)/(max-min)+a來代替原特徵即可。
多個特徵值的處理最終還是要用sklearn來處理。
ss
=
standardscaler()
std_cps
=
ss.fit_transform(cps) 標準和歸一化方法,
invers_tainsform()還原成原來的資料集。
多個特徵值的歐式距離計算
from scipy import distance
distance.eucliean() 方法計算歐式距離
sklearn 方法實現knn演算法
import numpy as np
import sklearn from sklearn
import datasets from sklearn.neighbors
import kneighborsclassifier
x_train = np.array([[1.0,1.1],[1.0,1.0],[0,0],[0,0.1]]) #這裡是陣列形式哦,要注意哦,如果輸入的dataframe(因為一般我們匯入檔案的話都是使用csv模式,匯入進來一般是形成dataframe模式,我們需要在fit()函式中使用 x_train.values,y_train.values)
y_train=['a','a','b','b']
knn=kneighborsclassifier(n_neighbors=1)
knn.fit(x_train,y_train)
knn.predict([[5,0],[4,0]])#要注意哦,**的時候也要上使用陣列形式的
k近鄰演算法 總結
k近鄰法 k nearest neighbor,knn 是一種基本的分類與回歸方法。knn做回歸和分類的主要區別在於最後做 時候的決策方式不同。knn做分類 時,一般是選擇多數表決法,即訓練集裡和 的樣本特徵最近的k個樣本,為裡面有最多類別數的類別。而knn做回歸時,一般是選擇平均法,即最近的k個樣...
K近鄰 KNN 演算法總結
knn演算法是選擇與輸入樣本在特徵空間內最近鄰的k個訓練樣本並根據一定的決策規則給出輸出結果。決策規則 分類任務 輸出結果為k個訓練樣本中佔大多數的類。回歸任務 輸出結果為k個訓練樣本值的平均值。如下圖的分類任務,輸出結果為w1類。k值的選擇 距離度量和分類決策規則是k近鄰演算法的三個基本要素。分類...
K近鄰演算法(KNN)推導分析
knn和kd樹介紹 author divinershi 優點 直觀,簡單,可以用來做分類也可以用來做回歸 可用於非線性分類,訓練時間複雜度為o n 準確度高,對資料沒有假設,對outier不敏感。缺點 計算量大,樣本不平衡問題難處理,需要大量的記憶體 演算法解釋 給定乙個資料集,對新的輸入樣本,在資...