機器學習 k近鄰法 python

2021-09-25 05:26:48 字數 3214 閱讀 8629

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 的基本原理 存在乙個樣本資料集合,也叫訓練樣本集,並且樣本集中的...