knn 的實質是根據 **值 與訓練集之間的距離來進行分類。
下面**使用 歐氏距離來表示點集之間的距離,具體**如下:
class knn():
def fit(self, x, y):
self.x_train = x
self.y_train = y
def predict(self, x, k):
x_train = self.x_train
y_train = self.y_train
x = np.tile(x,(x_train.shape[0],1))
diff = (x_train - x) ** 2
diff.sum(axis = 1) ** 0.5 # sum 函式只能是 h.sum(axis = 1)
rank = diff_sum.argsort() # 返回的排序是從小到大排序的
result = {}
for i in range(k):
vote = y_train[rank[i]]
result[vote] = result.get(vote,0) + 1
# 取出最大的值
# 這裡沒用排序,而是用了遍歷,節省了時間和空間複雜度
max_c = 0
num = -1
for k, v in result:
if (v > max_c):
max_c = v
num = k
return num
這裡用到乙個numpy 的內建函式來返回排序之後的index:
np.argsort()
這個函式的返回值是從小到大排序之後的 index,如果想要返回從大到小的 index,應該進行如下操作:
a = np.random.randint(0,100,3)
a.argsort() # 從小到大
(-a).argsort() # 從大到小
a.sum(axis = 1) 表示橫著求和
引包形式:
from sklearn.neighbors import kneighborsclassifier # 從 sklearn 裡面引包
knn = kneighborsclassifier(n_neighbors = k) # 建立乙個model
knn.fit(x_train, y_train)
y_pred = knn.predict(x_test)
KNN簡單實現
knn算是機器學習入門演算法中比較容易理解的了,要注意和k means的一些區別 knn k means 1.knn是分類演算法 2.監督學習 3.餵給它的資料集是帶label的資料,已經是完全正確的資料 1.k means是聚類演算法 2.非監督學習 3.餵給它的資料集是無label的資料,是雜亂...
knn演算法實現
knn演算法 自己實現 鳶尾花資料集 一.題目描述 題目 自己實現knn演算法 用鳶尾花資料集 knn演算法描述 在訓練集中資料和標籤已知的情況下,輸入測試資料,將測試資料的特徵與訓練集中對應的特徵進行相互比較,找到訓練集中與之最為相似的前k個資料,則該測試資料對應的類別就是k個資料 現次數最多的那...
KNN演算法實現
knn k 近鄰 knn,k nearestneighbor 演算法是一種基本分類與回歸方法,我們這裡只討論分類問題中的 k 近鄰演算法。k 近鄰演算法的輸入為例項的特徵向量,對應於特徵空間的點 輸出為例項的類別,可以取多類。k 鄰演算法假設給定乙個訓練資料集,其中的例項類別已定。分類時,對新的例項...