KNN、K-Means和FCM
k近邻法
k近邻法(k-nearest neighbor, k-NN)是一种基本的分类和回归方法,其分类的主要思想是:给定一个训练数据集,其中实例的类别已经确定,分类时,对于新的实例,根据其k个最近邻的训练实例的类别,通过多数表决等方式进行预测。
k-NN三个基本要素
- k值的选择
- 距离度量
- 分类决策规则
k近邻算法
输入:
- 训练数据集
其中,\(x_i\in\mathcal{X}\subseteq\mathbb{R}^n\)为实例的特征向量,\(y_i\in\mathcal{Y}=\{c_1,c_2,\cdots,c_K\}\)为实例的类别;
- 新实例的特征向量\(x\)
输出: 实例\(x\)所属的类\(y\)
算法流程:
-
根据给定的距离度量(如欧氏距离),在训练集\(T\)中找出与\(x\)最近邻的k个点,涵盖这k个点的\(x\)的邻域记作\(N_k(x)\);
-
在\(N_k(x)\)中根据分类决策规则(如多数表决)决定\(x\)的类别\(y\):
其中,\(I\)为指示函数,即当\(y_i=c_i\)时\(I\)为1,否则\(I\)为0.
总结: k-NN是分类算法、有监督学习,需要知道训练实例的类别。
import numpy as np
print("打印测试%f"%(0.3))
打印测试0.300000
K-means聚类
k均值聚类是基于样本集合划分的聚类算法,其聚类的基本思想是:将样本划分为k个子集,构成k个类,将n给样本分到k 个类中,每个样本到其所属类的中心距离最近。每个样本仅属于一个类,故k均值聚类是硬聚类。
K均值聚类算法
输入: n个样本的集合\(X\);
输出: 样本集合的聚类结果\(C^{*}\).
算法流程:
-
初始化。令\(t=0\),随机选择k个样本作为初始聚类中心\(m^{(0)}=(m_1^{(0)},\cdots,m_l^{(0)},\cdots,m_k^{(0)})\);
-
对样本进行聚类。对于固定的聚类中心\(m^{(t)}=(m_1^{(t)},\cdots,m_l^{(t)},\cdots,m_k^{(t)})\),其中\(m_l^{(t)}\)是类\(G_l\)的中心,计算每个样本到类中心的距离(如欧氏距离),将每个样本划分与其最近的类中心的类中,最终得到聚类结果\(C^{(t)}\);
-
更新聚类中心。对聚类结果\(C^{(t)}\),计算当前各个类中样本的均值,作为新的类中心\(m^{(t+1)}=(m_1^{(t+1)},\cdots,m_l^{(t+1)},\cdots,m_k^{(t+1)})\);
-
如果迭代收敛或符合停止条件(即聚类结果\(C^{(t)}\)和\(C^{(t+1)}\)一样),则输出\(C^{*}=C^{(t)}\);否则,令\(t=t+1\),返回第2步。
总结: k均值聚类是聚类算法、无监督学习,不需要知道训练实例的类别。
import numpy as np
模糊C均值聚类
模糊C均值聚类(Fuzzy C-means, FCM)是一种软聚类方法。硬聚类算法在分类时有一个硬性标准,根据该标准进行划分,分类结果非此即彼。软聚类算法更看重隶属度,隶属度在\([0,1]\)之间,每个对象都有属于每个类的隶属度,并且所有隶属度之和为 1,即更接近于哪一方,隶属度越高,其相似度越高。
标签:均值,样本,使用,算法,cdots,实例,测试,聚类
From: https://www.cnblogs.com/budcs/p/18073976