人工智能——聚类总述

目录

1 无监督学习的目标

2 聚类(clustering)

 2.1 欧氏距离

2.2 曼哈顿距离 

 2.3 马氏距离

2.4 夹角余弦 

3 Sklearn & 聚类 

3.1 概述

 3.2 sklearn.cluster

 4 降维

4.1 概述      ​

4.2  聚类 vs.降维

4.3 sklearn vs.降维


1 无监督学习的目标

利用无标签的数据学习数据的分布或数据与数据之间的关系被称作无监督学习。
有监督学习和无监督学习的最大区别在于数据是否有标签。
无监督学习最常应用的场景是聚类 (clustering) 和降维 (Dimension Reduction)。

2 聚类(clustering)

聚类 (clustering) ,就是根据数据的“相似性”将数据分为多类的过程。
评估两个不同样本之间的“相似性” ,通常使用的方法就是计算两个样本之间的“距离”。
使用不同的方法计算样本间的距离会关系到聚类结果的好坏。
                    

 2.1 欧氏距离

欧氏距离是最常用的一种距离度量方法,源于欧式空间中两点的距离。其计算方法如下:
                            
           

 

2.2 曼哈顿距离 

曼哈顿距离也称作“城市街区距离”,类似于在城市之中驾车行驶,从一个十字路口到另外一个十字楼口的距离。其计算方法如下:
                    
               

 2.3 马氏距离

马氏距离表示数据的协方差距离,是一种尺度无关的度量方式。也就是说马氏距离会先将样本点的各个属性标准化,再计算样本间的距离。其计算方式如下:(s 是协方差矩阵,如图)
            
               

     

2.4 夹角余弦 

余弦相似度用向量空间中两个向量夹角的余弦值作为衡量两个样本差异的大小。余弦值越接近1 ,说明两个向量夹角越接近0 度,表明两个向量越相似。其计算方法如下:
                   
                    

 

Sklearn & 聚类 

3.1 概述

(1)scikit-learn 库(以后简称 sklearn 库)提供的常用聚类算法函数包含在 sklearn.cluster这个模块中,如: K-Means ,近邻传播算法,DBSCAN ,等。
(2)以同样的数据集应用于不同的算法,可能会得到不同的结果,算法所耗费的时间也不尽相同,这是由算法的特性决定的。下图是我们调用sklearn库的标准函数对不同数据集执行的聚类结果。
     

 3.2 sklearn.cluster

(1)sklearn.cluster 模块提供的各聚类算法函数可以使用不同的数据形式作为输入。
(2)标准数据 输入格式 :[ 样本个数,特征个数 ] 定义的矩阵形式。
(3)相似性矩阵输入格式:即由[ 样本数目,样本数目 ] 定义的矩阵形式,矩阵中的每一个元素为两个样本的相似度,如DBSCAN AffinityPropagation( 近邻传播算法) 接受这种输入。如果以余弦相似度为例,则对角线元素全为 1. 矩阵中每个元素的取值范围为[0,1]。
                                                       sklearn.cluster

 

 4 降维

4.1 概述

 降维,就是在保证数据所具有的代表性特性或者分布的情况下,将高维数据转化为低维数据的过程: (1)数据的可视化         (2) 精简数据

                  

4.2  聚类 vs.降维

聚类和降维都是无监督学习的典型任务,任务之间存在关联,比如某些高维数据的聚类可以通过降维处理更好的获得,另外学界研究也表明代表性的聚类算法如k-means 与降维算法如 NMF 之间存在等价性.

4.3 sklearn vs.降维

(1)降维是机器学习领域的一个重要研究内容,有很多被工业界和学术界接受的典型算法,截止到目前sklearn 库提供 7 种降维算法。
(2)降维过程也可以被理解为对数据集的组成成份进行分解( decomposition )的过程,因此sklearn 为降维模块命名为 decomposition, 在对降维算法调用需要使用sklearn.decomposition 模块.
                                               sklearn.decomposition

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Kmeans聚类算法是一种无监督学习算法,用于将数据集划分为不同的簇。它是一个迭代算法,通过计算每个数据点与簇中心的距离,将数据点分配到最近的簇中心。然后,根据分配的数据点更新簇中心。重复这个过程,直到簇中心不再变化或达到预设的迭代次数。 下面是一个使用Python实现Kmeans聚类算法的示例: ``` python import numpy as np import matplotlib.pyplot as plt # 生成随机数据 np.random.seed(0) X = np.random.randn(100, 2) # 初始化K个簇中心 K = 3 centers = X[np.random.choice(len(X), K, replace=False)] # 迭代聚类 for i in range(10): # 计算每个数据点最近的簇中心 distances = np.linalg.norm(X[:, np.newaxis, :] - centers, axis=2) labels = np.argmin(distances, axis=1) # 更新簇中心 for k in range(K): centers[k] = np.mean(X[labels == k], axis=0) # 可视化聚类结果 colors = ['r', 'g', 'b'] for k in range(K): plt.scatter(X[labels == k, 0], X[labels == k, 1], c=colors[k]) plt.scatter(centers[:, 0], centers[:, 1], marker='*', s=200, c='#050505') plt.show() ``` 在这个例子中,我们生成了一个随机数据集,然后初始化了3个簇中心。然后,我们执行10次迭代,计算每个数据点最近的簇中心,并根据分配的数据点更新簇中心。最后,我们可视化聚类结果,其中每个簇用不同的颜色表示,簇中心用星号表示。 Kmeans聚类算法是一种简单有效的聚类算法,但它有一些缺点。例如,它需要预先指定簇的数量K,这可能不是很容易确定。此外,它对初始簇中心的选择很敏感,可能会导致陷入局部最优解。因此,在实际应用中,需要对它进行改进,例如Kmeans++算法和层次聚类算法等。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

荔枝科研社

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值