class
knn:
def__init__
(self,k)
:"""初始化 """
self.k=k
deffit(self,x,y)
:"""訓練方法
x:類陣列型別(二維) 待訓練的樣本特徵(屬性)
y:(一維) 樣本的目標值(標籤)"""
self.x=np.asarray(x)
#轉化為ndarray陣列型別
self.y=np.asarray(y)
defpredict
(self,x)
: x=np.asarray(x)
result=
for x in x:
#對於測試集中的每乙個樣本,依次與訓練集中的所有樣本求距離
dis=np.sqrt(np.
sum(
(x-self.x)**2
,axis=1)
)#返回陣列排序後的索引,也是每個元素在原陣列(排序之前)中的索引
index=dis.argsort(
)#只取前k個
index=index[
:self.k]
#返回陣列中每個元素出現的次數。元素必須是非負整數。
count=np.bincount(self.y[index]
)#返回出現次數最多的元素的索引,該索引就是我們判斷的類別.加入resul陣列))
return np.asarray(result)
defpredict2
(self,x)
:#考慮權重,權重為距離的倒數。
x=np.asarray(x)
result=
for x in x:
#對於測試集中的每乙個樣本,依次與訓練集中的所有樣本求距離
dis=np.sqrt(np.
sum(
(x-self.x)**2
,axis=1)
)#返回陣列排序後的索引,也是每個元素在原陣列(排序之前)中的索引
index=dis.argsort(
)#只取前k個
index=index[
:self.k]
#返回陣列中每個元素出現的次數。元素必須是非負整數。
count=np.bincount(self.y[index]
,weights=
1/dis[index]
)#返回出現次數最多的元素的索引,該索引就是我們判斷的類別.加入resul陣列))
return np.asarray(result)
class
knn:
"""該演算法用於回歸**,用資料集的前三個特徵屬性,尋找最近的k個鄰居,
然後再根據k個鄰居的第四個特徵屬性,去**當前樣本的第四個特徵屬性"""
def__init__
(self,k)
: self.k=k
deffit(self,x,y)
: self.x=np.asarray(x)
self.y=np.asarray(y)
defpredict
(self,x)
: x=np.asarray(x)
result=
for x in x:
#計算與訓練集中每個x的距離
dis=np.sqrt(np.
sum(
(x-self.x)**2
,axis=1)
)#取前k個
index=dis.argsort(
) index=index[
:self.k]
#計算前k個的值,取均值返回到結果列表中))
return np.array(result)
defpredict2
(self,x)
:#考慮權重:權重=(1/每個鄰居的距離)/所有的距離倒數之和
x=np.asarray(x)
result=
for x in x:
#計算與訓練集中每個x的距離
dis=np.sqrt(np.
sum(
(x-self.x)**2
,axis=1)
)#取前k個
index=dis.argsort(
) index=index[
:self.k]
#計算所有鄰居節點的距離倒數之和。注意:加上0.0001是為了防止距離為0使得分母為0
s=np.
sum(1/
(dis[index]
+0.0001))
#求權重:每個距離的倒數/倒數之和
weight=(1
/(dis[index]
+0.0001))
/s #使用鄰居節點的標籤值*權重,然後進行累加求和,得到**值
sum(self.y[index]
*weight)
)return np.array(result)
import numpy as np
from sklearn.neighbors import kneighborsclassifier
from collections import counter
from math import sqrt
class
knnclassfier
:def
__init__
(self,k)
:""""初始化knn分類器"""
assert k>=1,
"k must be valid"
self.k=k
self._x_train=
none
self._y_train=
none
deffit
(self,x_train,y_train)
:assert x_train.shape[0]
==y_train.shape[0]
,"the size must equal"
assert self.k<=x_train.shape[0]
self._x_train=x_train
self._y_train=y_train
return self
defpredict
(self,x_predict)
:assert self._x_train is
notnone
and self._y_train is
notnone
,"must fit before predict!"
assert x_predict.shape[1]
==self._x_train.shape[1]
,"the size must equal"
y_predict=
[self._predict(x)
for x in x_predict]
return np.array(y_predict)
def_predict
(self,x)
:assert x.shape[0]
==self._x_train.shape[1]
,"must equal!"
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)
predict_y = votes.most_common(1)
[0][
0]return predict_y
KNN分類和回歸學習 sklearn
參考文章 python大戰機器學習 不好,就是官方文件的中文版再加上幾個簡單的例子 資料探勘十大演算法 k近鄰演算法 機器學習筆記 knn演算法 常用樣本相似性和距離度量方法 輸入為例項的特徵向量,計算新資料與訓練資料之間的距離,選取k個距離最近的資料進行分類或回歸判斷 對於分類問題 輸出為例項的類...
kNN分類器和Python演算法實現
假設生活中你突然遇到乙個陌生人,你對他很不了解,但是你知道他喜歡看什麼樣的電影,喜歡穿什麼樣的衣服。根據以前你的認知,你把你身邊的朋友根據喜歡的電影型別,和穿什麼樣的衣服,簡單的分為了兩類,有錢的和沒錢的。那你該怎麼將這個陌生人分類呢?物以類聚,人以群分,你看他喜歡看的電影和穿衣服的衣服和那群人比較...
Python 實現 KNN 分類演算法
2.python 實現 本文將詳細講述 knn 演算法及其 python 實現 knn k nearest neighbour 即 k最近鄰,是分類演算法中最簡單的演算法之一。knn 演算法的核心思想是如果乙個樣本在特徵空間中的 k 個最相鄰的樣本中的大多數屬於某乙個類別,則將該樣本歸為該類別 有 ...