k近鄰法及其實現 python

2021-09-22 07:52:23 字數 1765 閱讀 3093

k 近鄰法(k-nn)是一種基本的分類回歸方法。

以分類任務為例,k 近鄰法假設給定乙個訓練資料集及其類別標籤。分類時,對乙個新來的待**例項,只需要根據離它最近的 k 個訓練例項的類別標籤,通過多數表決的方式決定待**例項的類別。

演算法流程如下:

演算法3.1(k 近鄰法)

輸入:訓練資料集

t

=t = \

t=其中,x

ix_i

xi​是例項的特徵向量,y

iy_i

yi​是例項的類別標籤;待**的例項特徵向量xxx。

輸出:例項x

xx所屬的類別y

yy步驟1:根據給定的距離度量,在訓練集t

tt中找到與x

xx最近鄰的k個點,將這k個點的集合記作nk(

x)

;n_k(x);

nk​(x)

;步驟2:在nk(

x)

n_k(x)

nk​(x)

中,根據分類決策規則(如多數表決)決定x

xx的類別yyy:

y

=arg

⁡max⁡c

j∑xi

∈nk(

x)i(

yi=c

j),i

=1,2

,...

,n;j

=1,2

,...

,k

y=\arg\max\limits_\sum\limits_i(y_i = c_j),\ i=1,2,...,n;j=1,2,...,k

y=argcj​

max​xi

​∈nk

​(x)

∑​i(

yi​=

cj​)

,i=1

,2,.

..,n

;j=1

,2,.

..,k

其中,i

ii是指示函式,即當yi=

ci

y_i=c_i

yi​=ci

​時ii

i為1,否則i

ii為0.

根據上述思想,接下來有3個問題需要考慮:

如何選取合適的k值?即,要參考x

xx的多少個鄰居的意見?

k值過小,容易發生過擬合;k值過大,模型太簡單,容易欠擬合。

比如k =n

k=nk=

n,那麼無論輸入例項時什麼,都簡單地**它屬於訓練例項中最多的類。當k=1

k=1k=

1時,稱為最近鄰演算法

在應用中,k

kk值一般取乙個比較小的值;通常採用交叉驗證法來選取最優的k

kk值

選擇何種距離度量方式來衡量x

xx與鄰居的距離?

通常用歐式距離,但也可以使用其他的距離,如更一般的l

pl_p

lp​距離(如p=1

p=1p=

1時為曼哈頓距離,p=2

p=2p=

2時是歐式距離)。

使用怎樣的分類決策規則?

k 近鄰法中的分類決策規則一般採用多數表決。如果分類的損失函式為0-1損失函式,那麼多數表決規則等價於經驗風險最小化

the author is coding…

K近鄰相關概念及其Python實現

它是一種基本分類與回歸的方法。在分類時,根據其k個最近鄰的訓練例項的類別,通過多數表決等方式進行 k近鄰不具有顯式的學習過程。k近鄰法,實際上對應特徵空間的劃分。以最近鄰法為例,子空間的劃分,是相鄰點之間做垂直平分線 面,然後相交集後,劃分出的各個子空間。當例項點處在某一特徵子空間中,那麼它的類別就...

python實現K近鄰

k近鄰演算法的具體思想如下 1 計算已知類別資料集中的樣本與當前樣本之間的距離 2 按照距離遞增次序排序 3 選取與當前點距離最小的k個樣本 4 確定前k個樣本所在類別的出現頻率 5 返回前k個樣本中出現頻率最高的類別作為當前點的 分類 python實現 def define classificat...

k值近鄰法python3實現

from numpy import import operator def createdataset group array 1.0,1.1 1.0,1.0 0,0 0,0.1 labels a a b b return group,labels def classify0 inx,dataset...