摘要:起步本章介绍如何自行构造分类器,这个分类器的实现上算是比较简单的了。不过这可能需要你之前阅读过这方面的知识。在预测函数中,需要依次计算测试样本与数据集中每个样本的距离。筛选出前个,采用多数表决的方式。测试还是使用中提供的虹膜数据。
起步
本章介绍如何自行构造 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
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/41137.html
摘要:起步这次使用的训练集由模块提供,关于虹膜一种鸢尾属植物的数据。它的品种分类有山鸢尾,变色鸢尾,菖蒲锦葵三种。构造分类器参数级是指定获取个邻近点。训练训练的函数一般就是测试模拟一些测试数据,使用刚刚的模型进行预测 起步 这次使用的训练集由 sklearn 模块提供,关于虹膜(一种鸢尾属植物)的数据。 showImg(https://segmentfault.com/img/remote/...
摘要:邻近算法算法背景假设我们要给一堆音乐分类,我们可以分成摇滚,民谣,戏曲等等,摇滚的音乐激昂,节奏快。这种基于某一特征出现的次数来区分事物的算法,我们使用邻近算法。 k-邻近算法 算法背景 假设我们要给一堆mp3音乐分类,我们可以分成摇滚,民谣,戏曲等等,摇滚的音乐激昂,节奏快。民谣舒缓节奏慢,但是摇滚中也有可能存在舒缓节奏慢点旋律, 同理民谣中也会有激昂,快的旋律。那么如何区分他们呢,...
阅读 2525·2023-04-25 20:05
阅读 2861·2023-04-25 17:56
阅读 2161·2021-10-14 09:49
阅读 2631·2019-08-29 15:10
阅读 2867·2019-08-29 12:25
阅读 388·2019-08-28 18:23
阅读 703·2019-08-26 13:26
阅读 1334·2019-08-23 18:21