KNN演算法實現

2021-10-02 20:45:57 字數 3230 閱讀 7699

knn

k-近鄰(knn,k-nearestneighbor)演算法是一種基本分類與回歸方法,我們這裡只討論分類問題中的 k-近鄰演算法。k-近鄰演算法的輸入為例項的特徵向量,對應於特徵空間的點;輸出為例項的類別,可以取多類。k-鄰演算法假設給定乙個訓練資料集,其中的例項類別已定。分類時,對新的例項,根據其 k 個最近鄰的訓練例項的類別,通過多數表決等方式進行**。因此,k近鄰演算法不具有顯式的學習過程即屬於有監督學習範疇。k近鄰演算法實際上利用訓練資料集對特徵向量空間進行劃分,並作為其分類的「模型」。k值的選擇、距離度量以及分類決策規則是k近鄰演算法的三個基本要素。

knn演算法實現和視覺化

①資料集

raw_data_x=[[3.3935,2.3312],

[3.1100,1.7815],

[1.3438,3.3683],

[3.5822,4.6791],

[2.2803,2.8669],

[7.4234,4.6965],

[5.7450,3.5339],

[9.1721,2.5111],

[7.7927,3.4240],

[7.9398,0.7916]]

raw_data_y=[0,0,0,0,0,1,1,1,1,1]#標記值

x=[[8.0936,3.3657], #**多組資料

[6.9398,0.7916]]

x_train=np.array(raw_data_x)

y_train=np.array(raw_data_y)

x=np.array(x)

視覺化:

plt.scatter(x_train[y_train==0,0],x_train[y_train==0,1],color='r',label='label=1')

plt.scatter(x_train[y_train==1,0],x_train[y_train==0,1],color='b',label='label=2')

plt.scatter(x[:,0],x[:,1],color='g',label='label=?')

plt.legend()

視覺化效果:

②knn演算法

1.scikit-learn中的kneighborsclassifier實現:

from sklearn.neighbors import kneighborsclassifier

knn_classifier=kneighborsclassifier(n_neighbors=6)

knn_classifier.fit(raw_data_x,raw_data_y)

knn_classifier.predict(x)

結果:array([1, 1])

2.自己寫的弱雞版kneighborsclassifier

import numpy as np

from math import sqrt

from collections import counter

class knnclassifier:

def __init__(self, k):

"""初始化knn分類器"""

assert k >= 1, "k must be valid"

self.k = k

self._x_train = none

self._y_train = none

def fit(self, x_train, y_train):

"""根據訓練資料集x_train和y_train訓練knn分類器"""

assert x_train.shape[0] == y_train.shape[0], \

"the size of x_train must be equal to the size of y_train"

assert self.k <= x_train.shape[0], \

"the size of x_train must be at least k."

self._x_train = x_train

self._y_train = y_train

return self

def predict(self, x_predict):

"""給定待**資料集x_predict,返回表示x_predict的結果向量"""

assert self._x_train is not none and self._y_train is not none, \

"must fit before predict!"

assert x_predict.shape[1] == self._x_train.shape[1], \

"the feature number of x_predict must be equal to x_train"

y_predict = [self._predict(x) for x in x_predict]

return np.array(y_predict)

def _predict(self, x):

"""給定單個待**資料x,返回x的**結果值"""

assert x.shape[0] == self._x_train.shape[1], \

"the feature number of x must be equal to x_train"

distances = [sqrt(np.sum((x_train - x) ** 2))

for x_train in self._x_train]

nearest = np.argsort(distances)

topk_y = [self._y_train[i] for i in nearest[:self.k]]

votes = counter(topk_y)

return votes.most_common(1)[0][0]

def __repr__(self):

return "knn(k=%d)" % self.k

knn演算法實現

knn演算法 自己實現 鳶尾花資料集 一.題目描述 題目 自己實現knn演算法 用鳶尾花資料集 knn演算法描述 在訓練集中資料和標籤已知的情況下,輸入測試資料,將測試資料的特徵與訓練集中對應的特徵進行相互比較,找到訓練集中與之最為相似的前k個資料,則該測試資料對應的類別就是k個資料 現次數最多的那...

Python實現KNN演算法

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

python實現knn演算法

importnumpyasnp importoperator defcreatedataset group np.array 1.0 1.1 1.0 1.0 0.0 0.0 0.0 0.1 labels a a b b returngroup,labels 分類演算法 inx待分類的點 defcla...