1.k
kk近鄰法是基本且簡單的分類與回歸方法。k
kk近鄰法的基本做法是:對給定的訓練例項點和輸入例項點,首先確定輸入例項點的k
kk個最近鄰訓練例項點,然後利用這k
kk個訓練例項點的類的多數來**輸入例項點的類。
2.k
kk近鄰模型對應於基於訓練資料集對特徵空間的乙個劃分。k
kk近鄰法中,當訓練集、距離度量、k
kk值及分類決策規則確定後,其結果唯一確定。
3.k
kk近鄰法三要素:距離度量、k
kk值的選擇和分類決策規則。常用的距離度量是歐氏距離及更一般的pl距離。k
kk值小時,k
kk近鄰模型更複雜;k
kk值大時,k
kk近鄰模型更簡單。k
kk值的選擇反映了對近似誤差與估計誤差之間的權衡,通常由交叉驗證選擇最優的kkk。
常用的分類決策規則是多數表決,對應於經驗風險最小化。
4.k
kk近鄰法的實現需要考慮如何快速搜尋k個最近鄰點。kd樹是一種便於對k維空間中的資料進行快速檢索的資料結構。kd樹是二叉樹,表示對k
kk維空間的乙個劃分,其每個結點對應於k
kk維空間劃分中的乙個超矩形區域。利用kd樹可以省去對大部分資料點的搜尋, 從而減少搜尋的計算量。
設特徵空間x
xx是n
nn維實數向量空間 ,xi,
xj∈x
x_, x_ \in \mathcal
xi,xj
∈x,xi=
(xi(
1),x
i(2)
,⋯,x
i(n)
)t
x_=\left(x_^, x_^, \cdots, x_^\right)^}
xi=(x
i(1)
,xi
(2)
,⋯,x
i(n)
)t,xj=
(xj(
1),x
j(2)
,⋯,x
j(n)
)t
x_=\left(x_^, x_^, \cdots, x_^\right)^}
xj=(x
j(1)
,xj
(2)
,⋯,x
j(n)
)t ,則:x
ix_i
xi,x
jx_j
xj的l
pl_p
lp距離定義為:
l p(
xi,x
j)=(
∑i=1
n∣xi
(i)−
xj(l
)∣p)
1p
l_\left(x_, x_\right)=\left(\sum_^\left|x_^-x_^\right|^\right)^}
lp(xi
,xj
)=(
∑i=1
n∣∣
∣xi
(i)
−xj(
l)∣
∣∣p
)p1
p =1
p= 1
p=1 曼哈頓距離
p =2
p= 2
p=2 歐氏距離
p =i
nf
p= inf
p=in
f 閔式距離minkowski_distance
class knn:
def __init__(self, x_train, y_train, n_neighbors=3, p=2):
"""parameter: n_neighbors 臨近點個數
parameter: p 距離度量
"""self.n = n_neighbors
self.p = p
self.x_train = x_train
self.y_train = y_train
def predict(self, x):
# 取出n個點
knn_list =
for i in range(self.n):
dist = np.linalg.norm(x - self.x_train[i], ord=self.p)
for i in range(self.n, len(self.x_train)):
max_index = knn_list.index(max(knn_list, key=lambda x: x[0]))
dist = np.linalg.norm(x - self.x_train[i], ord=self.p)
if knn_list[max_index][0] > dist:
knn_list[max_index] = (dist, self.y_train[i])
# 統計
knn = [k[-1] for k in knn_list]
count_pairs = counter(knn)
max_count = sorted(count_pairs, key=lambda x:x)[-1]
return max_count
def score(self, x_test, y_test):
right_count = 0
n = 10
for x, y in zip(x_test, y_test):
label = self.predict(x)
if label == y:
right_count += 1
return right_count / len(x_test)
from sklearn.neighbors import kneighborsclassifier
clf_sk = kneighborsclassifier()
clf_sk.fit(x_train, y_train)
clf_sk.score(x_test, y_test)
sklearn.neighbors.kneighborsclassifier
n_neighbors: 臨近點個數
p: 距離度量
algorithm: 近鄰演算法,可選
weights: 確定近鄰的權重
參考**:
K近鄰 Python 機器學習
from numpy import 科學計算包 import operator 運算子模組 defcreatdataset group array 1.0,1.1 1.0,1.0 0,0 0,0.1 建立資料集 labels a a b b 建立標籤 return group,labels inx,...
k 近鄰法KNN 機器學習ML
參考 1.統計學習方法 李航 2.3.4.演算法基本思想 物以類聚,人以群分 存在乙個樣本資料集合,也稱作訓練樣本集,並且樣本集中每個資料都存在標籤。輸入沒有標籤的新資料後,將新資料的每個特徵與樣本集中資料對應的特徵進行比較,然後演算法提取樣本集中特徵最相似資料 最相鄰 的分類標籤。一般來說,我們只...
機器學習python實戰 k近鄰演算法
前一周學習了一些理論的知識,雖然懂了原理,但感覺真要寫起 來還是摸不著頭腦,所以接下來的幾天都打算在 方面下一番功夫。由於接觸python不久,且能力有限,難免有些錯誤的或者理解不到位的地方,希望讀者不吝指正!k 近鄰演算法 k nn 的基本原理 存在乙個樣本資料集合,也叫訓練樣本集,並且樣本集中的...