[易懂机器学习(1)]KNN,k-Nearest Neighbor (k近邻算法)[分类算法]
k- Nearest Neighbor (k个最相似的邻居)算法
任何机器学习都是假定一种数学模型可以用于当前这个数据解决问题 。而任何数学模型都有参数,其中不同数据参数的取值是不一样的。那么我们学习任何机器学习第一件事。那就是要确定它使用的是数学模型是什么。第二件事就是看这个数学模型有哪些参数需要根据数据来确定。
kNN算法到底是什么?它未知参数k到底是什么?
kNN很简单。那就是“人以类聚,物以群分”。假设,现在有一个人你不知道她什么性格。然后,为了分类出她是什么性格。你首先找她身边和她最相似的k个朋友。如果她的最相似的k个朋友,大部分都很文艺范。那么,你可以把目标对象分类为文艺青年。这就是kNN的原理。 从名字就看得出来。遍历训练集带标签的已知数据。计算所有带标签数据和新数据之间的相似度。找到前k个相似度最大的数据,看他们的分类标签出现的次数。假如这k个数据出现的分类标签次数最多的是A类,那么算法就认为新数据它是属于A类。 。
由于我们要找k个最相似的已知带标签的样本。那么我们怎么知道已知标签的样本和未知标签的样本之间是否相似呢?
问题来了,如何用数学量化两个样本之间的相似度?
现在我们知道怎么量化相似度。剩下就是遇到一个新数据我想对它进行分类,那就遍历训练集带标签的已知数据。计算所有带标签数据和新数据之间的相似度。找到前k个相似度最大的数据,看他们的分类标签出现的次数。假如这k个数据出现的分类标签次数最多的是A类,那么算法就认为新数据它是属于A类。
编程实践:
各样本与新数据之间的距离为: [0.2 0.1 1.3453624 1.28062485]
距离低到高对应已知样本data中的下标为: [1 0 3 2] 距离前k=3小的样本对应标签出现频率: {'A': 2, 'B': 1}
label_frequence变成列表后为: dict_items([('A', 2), ('B', 1)]) 新数据所属标签为 A
Last updated