KNN(K近邻分类)算法(监督学习)
最简单的机器学习算法之一 给定一个训练数据集,对新的输入实例,在训练数据集中找到与该实例最邻近的K个实例(也就是上面所说的K个邻居),这K个实例的多数属于某个类,就把该输入实例分类到这个类中。
举例
- K=3,绿色圆点的最近的3个邻居是2个红色小三角形和1个蓝色小正方形,判定绿色的待分类点属于红色的三角形一类。
- 如果K=5,绿色圆点的最近的5个邻居是2个红色三角形和3个蓝色的正方形,判定绿色的待分类点属于蓝色的正方形一类。
模型训练
from sklearn.neighbors import KNeighborsClassifier
KNN = KNeighborsClassifier(n_neighbors=3)
KNN.fit(X, y)
均值漂移聚类(Mean-shift)
均值漂移算法:一种基于密度梯度上升的聚类算法(沿着密度上升方向寻找聚类中心点)
公式
均值偏移
中心更新
Sh:以u为中心点,半径为h的高维球区域;
k:包含在Sh范围内点的个数;
xi:包含在Sh范围内的点;
Mt为t状态下求得的偏移均值;
ut:为t状态下的中心
算法流程
- 随机选择未分类点作为中心点
- 找出离中心点距离在带宽之内的点,记作集合S
- 计算从中心点到集合S中每个元素的偏移向量M
- 中心点以向量M移动
- 重复步骤2-4,直到收敛
- 重复步骤1-5,直到所有的点都被归类
- 分类:根据每个类,对每个点的访问频率,取访问频率最大的那个类,作为当前点集的所属类。
模型训练
自动计算带宽(区域半径)
from sklearn.cluster import MeanShift,estimate_bandwidth
# 计算半径
bandwidth = estimate_bandwidth(X, n_samples=500)
## 模型建立与训练
ms = MeansShift(bandwidth=bandwidth)
ms.fit(X)