資料探勘 分類演算法 KNN

2022-07-28 03:24:11 字數 2897 閱讀 1630

knn(k nearest neighbors):k近鄰分類演算法

knn演算法從訓練集中找到和新資料最接近的k條記錄,然後根據他們的主要分類來決定新資料的類別。

knn分類演算法是資料探勘分類技術中最簡單的方法之一。所謂k最近鄰,就是k個最近的鄰居的意思,說的是每個樣本都可以用它最接近的k個鄰居來代表。

knn演算法的核心思想是如果乙個樣本在特徵空間中的k個最相鄰的樣本中的大多數屬於某乙個類別,則該樣本也屬於這個類別,並具有這個類別上樣本的特性。

該方法在確定分類決策上只依據最鄰近的乙個或者幾個樣本的類別來決定待分樣本所屬的類別。 knn方法在類別決策時,只與極少量的相鄰樣本有關。

由於knn方法主要靠周圍有限的鄰近的樣本,而不是靠判別類域的方法來確定所屬類別的,因此對於類域的交叉或重疊較多的待分樣本集來說,knn方法較其他方法更為適合。

優點:1.簡單,易於理解,易於實現,無需估計引數,無需訓練;

2. 適合對稀有事件進行分類;

3.特別適合於多分類問題(multi-modal,物件具有多個類別標籤), knn比svm的表現要好。

缺點:

1.knn演算法在分類時有個主要的不足是,當樣本不平衡時,如乙個類的樣本容量很大,而其他類樣本容量很小時,有可能導致當輸入乙個新樣本時,該樣本的k個鄰居中大容量類的樣本占多數。 該演算法只計算「最近的」鄰居樣本,某一類的樣本數量很大,那麼或者這類樣本並不接近目標樣本,或者這類樣本很靠近目標樣本。無論怎樣,數量並不能影響執行結果。

2.該方法的另乙個不足之處是計算量較大,因為對每乙個待分類的文字都要計算它到全體已知樣本的距離,才能求得它的k個最近鄰點。

3.可理解性差,無法給出像決策樹那樣的規則。

改進策略:

針對以上演算法的不足,演算法的改進方向主要分成了分類效率分類效果兩方面。

分類效率:事先對樣本屬性進行約簡,刪除對分類結果影響較小的屬性,快速的得出待分類樣本的類別。該演算法比較適用於樣本容量比較大的類域的自動分類,而那些樣本容量較小的類域採用這種演算法比較容易產生誤分。

分類效果:採用權值的方法(和該樣本距離小的鄰居權值大)來改進,han等人於2023年嘗試利用貪心法,針對檔案分類實做可調整權重的k最近鄰居法waknn (weighted adjusted k nearest neighbor),以促進分類效果;而li等人於2023年提出由於不同分類的檔案本身有數量上有差異,因此也應該依照訓練集合中各種分類的檔案數量,選取不同數目的最近鄰居,來參與分類。

分類問題的驗證方法:交叉驗證(cross validation)

k折交叉驗證(k-fold cross validation):設定k=10,那麼我們把原來的資料集隨機分為10份,分別為

接著,使用d1作為測試集,作為訓練集,計算得分s1

使用d2作為測試集,作為訓練集,計算得分s2

.........

最後,使用d10作為測試集,作為訓練集,計算得分s10

計算的平均值,作為模型的綜合評分

iris資料集:常用的分類實驗資料集,即鳶尾花卉資料集,是乙個多重變數資料集,通過包含的4個屬性(花萼長度、花萼寬度、花瓣長度、花瓣寬度)來**屬於三類鳶尾花中的哪一類。

python中對iris資料集使用knn分類的簡單實現:

import

numpy as np

from sklearn import

datasets

#引入iris資料集

iris =datasets.load_iris()

#檢視資料規模

iris.data.shape #

150行,4列

#檢視訓練目標的分類(標籤)

np.unique(iris.target) #

共有 0,1,2 三個分類

#切分訓練集

from sklearn.model_selection import

train_test_split

#將資料集按7:3切分為訓練集和測試集(特徵變數和目標變數)

data_train, data_test, target_train, target_test =train_test_split(

iris.data,

#特徵資料

iris.target, #

目標資料

test_size=0.3) #

測試集佔比

#knn建模(1折交叉驗證)

from sklearn import

neighbors

knnmodel = neighbors.kneighborsclassifier(n_neighbors=3) #

n_neighbors引數為分類個數

knnmodel.fit(data_train,target_train)

knnmodel.score(data_train,target_train)

#5折交叉驗證

from sklearn.model_selection import

cross_val_score

#cross_val_score函式傳入模型、特徵資料、目標資料和 k值

cross_val_score(knnmodel,iris.data,iris.target,cv=5)

#模型**,得到分類結果

knnmodel.predict([[0.1,0.2,0.3,0.4]])

資料探勘基礎演算法 KNN最近鄰分類演算法

通過計算待 樣本和已知分類號的訓練樣本之間的距離來判斷該樣本屬於某個已知分類號的概率。並選取概率最大的分類號來作為待 樣本的分類號 懶惰分類演算法,其模型的建立直到待 例項進行 時才開始。knn演算法的指導思想是 近朱者赤,近墨者黑 由你的鄰居來推斷出你的類別。本質上,knn演算法就是用距離來衡量樣...

資料分類KNN演算法

監督就是給的樣本都有標籤,分類的訓練樣本必須有標籤,所以分類演算法都是有監督演算法。監督機器學習無非就是 minimize your error while regularizing your parameters 也就是在規則化引數的同時最小化誤差。最小化誤差是為了讓我們的訓練資料,而規則化引數是...

資料探勘演算法 KNN學習

knn k nearest neighbour 是資料探勘領域的基本演算法之一,原理比較簡單,在各類別均衡 樣本容量比較大的情況下比較實用。演算法以樣本間的距離作為相似性測度。在同一測量空間中以測試樣本為中心,檢測一定範圍內的k個樣本類別,用 投票法 得出測試樣本的類別。設k為離測試樣本最近的樣本數...