摘要:起步本章介紹如何自行構(gòu)造分類器,這個(gè)分類器的實(shí)現(xiàn)上算是比較簡(jiǎn)單的了。不過這可能需要你之前閱讀過這方面的知識(shí)。在預(yù)測(cè)函數(shù)中,需要依次計(jì)算測(cè)試樣本與數(shù)據(jù)集中每個(gè)樣本的距離。篩選出前個(gè),采用多數(shù)表決的方式。測(cè)試還是使用中提供的虹膜數(shù)據(jù)。
起步
本章介紹如何自行構(gòu)造 KNN 分類器,這個(gè)分類器的實(shí)現(xiàn)上算是比較簡(jiǎn)單的了。不過這可能需要你之前閱讀過這方面的知識(shí)。
前置閱讀
分類算法之鄰近算法:KNN(理論篇)
分類算法之鄰近算法:KNN(應(yīng)用篇)
歐拉公式衡量距離關(guān)于距離的測(cè)量方式有多種,這邊采用歐拉距離的測(cè)量方式:
$$ d(x,y) = sqrt{sum_{i=0}^n(x_i-y_i)^2} $$
對(duì)應(yīng)的 python 代碼:
import math def euler_distance(point1: list, point2: list) -> float: """ 計(jì)算兩點(diǎn)之間的歐拉距離,支持多維 """ 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) # 根據(jù)元素的值從大到小對(duì)元素進(jìn)行排序,返回下標(biāo) # 根據(jù)K值選出分類結(jié)果, ["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) # 計(jì)算各個(gè)分類出現(xiàn)的次數(shù) ret = sorted(result_dict.items(), key=lambda x: x[1], reverse=True) # 采用多數(shù)表決,即排序后的第一個(gè)分類 return ret[0][0]
這個(gè)分類器不需要訓(xùn)練,因此在 fit 函數(shù)中僅僅保存其數(shù)據(jù)集和結(jié)果集即可。在預(yù)測(cè)函數(shù)中,需要依次計(jì)算測(cè)試樣本與數(shù)據(jù)集中每個(gè)樣本的距離。篩選出前 K 個(gè),采用多數(shù)表決的方式。
測(cè)試還是使用 sklearn 中提供的虹膜數(shù)據(jù)。
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
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/41137.html
摘要:起步這次使用的訓(xùn)練集由模塊提供,關(guān)于虹膜一種鳶尾屬植物的數(shù)據(jù)。它的品種分類有山鳶尾,變色鳶尾,菖蒲錦葵三種。構(gòu)造分類器參數(shù)級(jí)是指定獲取個(gè)鄰近點(diǎn)。訓(xùn)練訓(xùn)練的函數(shù)一般就是測(cè)試模擬一些測(cè)試數(shù)據(jù),使用剛剛的模型進(jìn)行預(yù)測(cè) 起步 這次使用的訓(xùn)練集由 sklearn 模塊提供,關(guān)于虹膜(一種鳶尾屬植物)的數(shù)據(jù)。 showImg(https://segmentfault.com/img/remote/...
摘要:鄰近算法算法背景假設(shè)我們要給一堆音樂分類,我們可以分成搖滾,民謠,戲曲等等,搖滾的音樂激昂,節(jié)奏快。這種基于某一特征出現(xiàn)的次數(shù)來區(qū)分事物的算法,我們使用鄰近算法。 k-鄰近算法 算法背景 假設(shè)我們要給一堆mp3音樂分類,我們可以分成搖滾,民謠,戲曲等等,搖滾的音樂激昂,節(jié)奏快。民謠舒緩節(jié)奏慢,但是搖滾中也有可能存在舒緩節(jié)奏慢點(diǎn)旋律, 同理民謠中也會(huì)有激昂,快的旋律。那么如何區(qū)分他們呢,...
閱讀 2598·2023-04-25 20:05
閱讀 2931·2023-04-25 17:56
閱讀 2241·2021-10-14 09:49
閱讀 2747·2019-08-29 15:10
閱讀 2954·2019-08-29 12:25
閱讀 452·2019-08-28 18:23
閱讀 793·2019-08-26 13:26
閱讀 1403·2019-08-23 18:21