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
maxc
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
maxxi
∈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...