統計學習方法 K近鄰python實現

2021-10-04 22:28:37 字數 2721 閱讀 3571

1.k近鄰法是基本且簡單的分類與回歸方法。k近鄰法的基本做法是:對給定的訓練例項點和輸入例項點,首先確定輸入例項點的k個最近鄰訓練例項點,然後利用這個訓練例項點的類的多數來**輸入例項點的類。

2.k近鄰模型對應於基於訓練資料集對特徵空間的乙個劃分。k近鄰法中,當訓練集、距離度量、k值及分類決策規則確定後,其結果唯一確定。

3.k近鄰法三要素:距離度量、k值的選擇和分類決策規則。常用的距離度量是歐氏距離及更一般的pl距離。k值小時,近鄰模型更複雜;k值大時,近鄰模型更簡單。k值的選擇反映了對近似誤差與估計誤差之間的權衡,通常由交叉驗證選擇最優的。

常用的分類決策規則是多數表決,對應於經驗風險最小化。

4.k近鄰法的實現需要考慮如何快速搜尋 k 個最近鄰點。kd樹是一種便於對 k 維空間中的資料進行快速檢索的資料結構。kd 樹是二叉樹,表示對維空間的乙個劃分,其每個結點對應於維空間劃分中的乙個超矩形區域。利用kd樹可以省去對大部分資料點的搜尋, 從而減少搜尋的計算量。

import numpy as np

import pandas as pd

import matplotlib.pyplot as plt

from sklearn.datasets import load_iris

from sklearn.model_selection import train_test_split

iris = load_iris(

)#載入資料集

df = pd.dataframe(iris.data, columns=iris.feature_names)

df['label'

]= iris.target

data = df.iloc[

:100,:

2].values

target = df.loc[:99

,'label'

].values#如果使用:100會取到100,獲得長度101的label,有點奇怪

x_train, x_test, y_train, y_test = train_test_split(data, target, test_size=

0.2)

class

knn:

def__init__

(self, n:

int, p:

int, x_train, y_train)

:"""

n:鄰居個數

p:距離度量範數

x_train:訓練資料

y_train:訓練標籤

"""self.n = n

self.p = p

self.x_train = x_train

self.y_train = y_train

defpredict

(self, point)

: dist = np.linalg.norm(point.reshape(1,

2)- self.x_train,

ord=self.p, axis=1)

neighbors = self.y_train[np.argsort(dist)

[:self.n]

]return np.argmax(np.bincount(neighbors)

)#返回出現次數最多的元素

首先看一下kd樹的劃分過程:乙個三維k-d樹。第一次劃分(紅色)把根節點(白色)劃分成兩個節點,然後它們分別再次被劃分(綠色)為兩個子節點。最後這四個子節點的每乙個都被劃分(藍色)為兩個子節點。因為沒有更進一步的劃分,最後得到的八個節點稱為葉子節點。(摘自wiki百科)

上圖的分割方法就是kd樹最經典的生成方法:

統計學習方法 k近鄰法

k近鄰法 knn 是一種基本的分類與回歸方法 分類這種需求,滲透到我們生活的方方面面 分類演算法可以幫助我們完成這些繁瑣的操作,並根據我們的要求不斷修正分類結果。分類演算法其實蠻多的,這裡順著書本順序,詳細講解knn演算法,再與k means k means 演算法進行簡單對比。k近鄰法是這樣乙個過...

統計學習方法 K近鄰法

k近鄰演算法簡單 直觀給定乙個訓練資料集,對新的輸入例項,在訓練資料集中找到與該例項最鄰近的k個例項,這k個例項的多數屬於某個類,就把該輸入例項分為這個類.下面先敘述k近鄰演算法,然後再討論其細節。近鄰法的特殊情況 k 1情形,稱為最近鄰演算法.對於輸入的例項點 特徵向量 x xx,最近鄰法將訓練資...

統計學習方法 k 近鄰演算法

所謂k 近鄰 knn 是基本且簡單的分類與回歸方法,說的就是每個樣本的分類都可以用它最接近的k個鄰居來代表。1 對給定的訓練例項點和輸入例項點,首先確定輸入例項點的k個最近鄰訓練例項點,然後利用這k個訓練例項點的類的多數來 輸入例項點的類。2 k近鄰模型對應於基於訓練資料集對特徵空間的乙個劃分。k近...