摘要:起步本章介紹如何自行構造分類器,這個分類器的實現上算是比較簡單的了。不過這可能需要你之前閱讀過這方面的知識。在預測函數中,需要依次計算測試樣本與數據集中每個樣本的距離。篩選出前個,采用多數表決的方式。測試還是使用中提供的虹膜數據。
起步
本章介紹如何自行構造 KNN 分類器,這個分類器的實現上算是比較簡單的了。不過這可能需要你之前閱讀過這方面的知識。
前置閱讀
分類算法之鄰近算法:KNN(理論篇)
分類算法之鄰近算法:KNN(應用篇)
歐拉公式衡量距離關于距離的測量方式有多種,這邊采用歐拉距離的測量方式:
$$ d(x,y) = sqrt{sum_{i=0}^n(x_i-y_i)^2} $$
對應的 python 代碼:
import math def euler_distance(point1: list, point2: list) -> float: """ 計算兩點之間的歐拉距離,支持多維 """ distance = 0.0 for a, b in zip(point1, point2): distance += math.pow(a - b, 2) return math.sqrt(distance)KNN 分類器
import collections import numpy as np class KNeighborsClass(object): def __init__(self, n_neighbors=5): self.n_neighbors = n_neighbors def fit(self, data_set, labels): self.data_set = data_set self.labels = labels def predict(self, test_row): dist = [] for v in self.data_set: dist.append(euler_distance(v, test_row)) dist = np.array(dist) sorted_dist_index = np.argsort(dist) # 根據元素的值從大到小對元素進行排序,返回下標 # 根據K值選出分類結果, ["A", "B", "B", "A", ...] class_list = [ self.labels[ sorted_dist_index[i] ] for i in range(self.n_neighbors)] result_dict = collections.Counter(class_list) # 計算各個分類出現的次數 ret = sorted(result_dict.items(), key=lambda x: x[1], reverse=True) # 采用多數表決,即排序后的第一個分類 return ret[0][0]
這個分類器不需要訓練,因此在 fit 函數中僅僅保存其數據集和結果集即可。在預測函數中,需要依次計算測試樣本與數據集中每個樣本的距離。篩選出前 K 個,采用多數表決的方式。
測試還是使用 sklearn 中提供的虹膜數據。
if __name__ == "__main__": from sklearn import datasets iris = datasets.load_iris() knn = KNeighborsClass(n_neighbors=5) knn.fit(iris.data, iris.target) predict = knn.predict([0.1, 0.2, 0.3, 0.4]) print(predict) # output: 1
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/41137.html
摘要:起步這次使用的訓練集由模塊提供,關于虹膜一種鳶尾屬植物的數據。它的品種分類有山鳶尾,變色鳶尾,菖蒲錦葵三種。構造分類器參數級是指定獲取個鄰近點。訓練訓練的函數一般就是測試模擬一些測試數據,使用剛剛的模型進行預測 起步 這次使用的訓練集由 sklearn 模塊提供,關于虹膜(一種鳶尾屬植物)的數據。 showImg(https://segmentfault.com/img/remote/...
摘要:鄰近算法算法背景假設我們要給一堆音樂分類,我們可以分成搖滾,民謠,戲曲等等,搖滾的音樂激昂,節奏快。這種基于某一特征出現的次數來區分事物的算法,我們使用鄰近算法。 k-鄰近算法 算法背景 假設我們要給一堆mp3音樂分類,我們可以分成搖滾,民謠,戲曲等等,搖滾的音樂激昂,節奏快。民謠舒緩節奏慢,但是搖滾中也有可能存在舒緩節奏慢點旋律, 同理民謠中也會有激昂,快的旋律。那么如何區分他們呢,...
閱讀 2557·2023-04-25 20:05
閱讀 2886·2023-04-25 17:56
閱讀 2195·2021-10-14 09:49
閱讀 2681·2019-08-29 15:10
閱讀 2922·2019-08-29 12:25
閱讀 416·2019-08-28 18:23
閱讀 757·2019-08-26 13:26
閱讀 1370·2019-08-23 18:21