4.无监督学习--聚类

K-means方法及其应用

1.K-means聚类算法简介:

k-means算法以k为参数,把n个对象分成k个簇,使簇内具有较高的相似度,而簇间的相似度较低。主要处理过程包括:
1.随机选择k个点作为初始的聚类中心。
2.对于剩下的点,根据其与聚类中心的距离,将其归入最近的簇。
3.对每个簇,计算所有点的均值作为新的聚类中心。

4.重复2、3直到聚类中心不再发生改变。

举例:对于A、B、C、D、E这5个点,我们先随机选择两个点作为簇中心点,标记为红色和黄色,对于第一次聚类结果,我们分别计算所有的点到这两个中心点之间的聚类,我们发现A、B亮点离红色的点距离更近,、C、D、E三点离黄色的点距离更近,所以在第一次聚类过程中,这个簇被定义为:A、B为一个簇,C、D、E为一个簇,接下来,我们将A、B这个簇重新计算它的聚类中心,标记为一个更深颜色的红色的点,C、D、E重新计算他们的簇中心,为一个更深颜色的黄色的点,我们再重新计算这些所有点距离簇中心的距离,接下来我们可以发现,A、B、C可以聚为一个簇,而D、E相对于黄色的簇中心距离更近,所以D、E为一个簇,因此我们再重新计算一下A、B、C这个簇的簇中心和D、E的簇中心,第5张图我们就可以看到簇的组成已经相对稳定了,那么这5个点的聚类结果就是:A、B、C为一个簇,D、E为一个簇,红色和黄色的点分别为这两个簇的簇中心;演变过程如下:

2.K-means的应用

1.数据介绍:
  现有1999年全国31个省份城镇居民家庭平均每人全年消费性支出的八个主要变量数据,这8个变量分别是:食品、衣着、家庭设备用品及服务、医疗保健、交通和通讯、              娱乐教育文化服务、居住以及杂项商品和服务。利用已有数据,对31个省份进行聚类。

2.实验目的:
  通过聚类,了解1999年各个省份的消费水平在国内的情况。
3.技术路线:sklearn.cluster.Kmeans

4.数据实例展示:
1999年全国31个省份城镇居民家庭平均每人全年消费性支出数据,如下所示:

5.实验过程:
  1.使用算法:K-means聚类算法
  2.实现过程:
    1.建立工程,导入sklearn相关包
      import numpy as np
      from sklearn.cluster import KMeans
    2.加载数据,创建K-means算法实例,并进行训练,获得标签:

  注意:调用K-Means方法所需参数:
    1.n_clusters:用于指定聚类中心的个数
    2.init:初始聚类中心的初始化方法
    3.max_iter:最大的迭代次数
    4.一般调用时只用给出n_clusters即可,init默认是k-means++,max_iter默认是300。

  其它参数:
    1.data:加载的数据
    2.label:聚类后各数据所属的标签
    3.fit_predict():计算簇中心以及为簇分配序号
  重点方法解释:
    data,cityName = loadData(‘city.txt‘) #loadData()函数是我们自己定义的,具体代码为:

def loadData(filePath):
    fr = open(filePath,‘r+‘)  #r+:读写方式打开一个文本文件
    lines = fr.readlines()
    retData = []
    retCityName = []
    for line in lines:
        items = line.strip().split(",")
        retCityName.append(items[0])
        retData.append(float(items[1]))
        for i in range(1,len(items)):
            return retData,retCityName

注意:loadData()函数中的readlines()方法一次性读取整个文件,类似于.read()

retCityName用于存储城市名称;

retData 用于存储城市的各项消费信息

返回值:返回城市名称以及该城市的各项消费信息

  展示的时候:

      

   3.输出标签,查看结果

    1.我们将城市按照消费水平n_clusters分为几个类,消费水平相近的城市聚集在一类中。
    2.expenses:聚类中心店的数值加和,也就是平均消费水平。

如下展示了:当n_clusters=2时,消费水平的聚类结果,聚成2类,我们可以看到其中一类是:北京、天津、上海、浙江、福建、广东、重庆、西藏为一个消费水平的;

 当n_clusters=3或者n_clusters=4的时候的聚类情况如下所示:

从这些结果中我们可以看出,消费水平相近的城市聚集在一个类中,而北京、上海、广东很稳定的一直聚集在了同一个类中!

如下,我们简单谈一下sklearn库中的k-means算法的拓展和改进;

3.拓展 && 改进

计算两条数据相似性时,Sklearn的K-Means默认用的是欧氏距离。虽然还有余弦相似度,马氏距离等多种方法,但sklearn中的k-means算法没有设定计算距离方法的参数。如果大家想要使用自定义计算距离的计算方法,那么我们可以更改k-means的源代码,在这里我们建议使用scipy.spatial.distance.cdist方法。

当设置metric="cosine"的时候,就相当于我们要使用余弦距离了,使用形式:scipy.spatial.distance.cdist(A,B,metric="cosine")

时间: 2025-01-04 08:17:54

4.无监督学习--聚类的相关文章

05_无监督学习--聚类模型--K 均值

无监督学习--聚类模型--K 均值0.引入依赖1.数据的加载和预处理2.算法实现3.测试 无监督学习--聚类模型--K 均值 0.引入依赖 import numpy as npimport matplotlib.pyplot as plt # 这里直接 sklearn 里的数据集from sklearn.datasets.samples_generator import make_blobs 1.数据的加载和预处理 x, y = make_blobs(n_samples=100, centers

[数据挖掘课程笔记]无监督学习——聚类(clustering)

什么是聚类(clustering) 个人理解:聚类就是将大量无标签的记录,根据它们的特点把它们分成簇,最后结果应当是相同簇之间相似性要尽可能大,不同簇之间相似性要尽可能小. 聚类方法的分类如下图所示: 一.如何计算样本之间的距离? 样本属性可能有的类型有:数值型,命名型,布尔型……在计算样本之间的距离时,需要将不同类型属性分开计算,最后统一相加,得到两个样本之间的距离.下面将介绍不同类型的属性的数据计算方法. 对于全部都是连续的数值型的样本来说,首先,对于值相差较大的属性来说,应该进行归一化,变

0A04 无监督学习:聚类(2) 近邻算法(Affinity Propagation)

AP算法,具有结果稳定可重现 训练前不用制定K-means中K值,但是算法的时间复杂度比K-means高 import numpy as npfrom sklearn.cluster import AffinityPropagation # 引入AP算法聚类 X = np.array([[1,2],[1,4],[0.7,0],[0.2,5],[0,4],[1.3,0],[0.1,2],[0,4],[0.4,0]]) # 训练数据af = AffinityPropagation(preferenc

0A04 无监督学习:聚类(1) k-means

这是一个非常简单的聚类算法,算法的目的就是找到这些中心点的合适坐标,使得所有样本到其分组中心点距离的平方和最小. K-means 的中心点向量不一定是训练样本中某成员的位置 import numpy as npfrom sklearn.cluster import KMeans # 引入K-means模型 # 1.训练和预测X = np.array([[1,2],[1,4],[1,0], [4,2],[4,4],[4,0]])kmeans = KMeans(n_clusters=2,random

无监督学习——聚类算法

聚类分析是在数据中发现数据对象之间的关系,将数据进行分组,组内的相似性越大,组间的差别越大,则聚类效果越好. 此次我们学习聚类中的第一个算法——K-均值算法.K-均值算法本质就是重复将样本分配的类里面,不断的更新类的重心位置. 这里将围绕K-均值算法讨论目标优化.随机初始化和如何选择聚类数. K-Means算法 K-均值是最普及的聚类算法,算法接受一个未标记的数据集,然后将数据聚类成不同的组. K-均值是一个迭代算法,假设我们想要将数据聚类成 n 个组,其方法为: 首先选择??个随机的点,称为聚

『cs231n』无监督学习

经典无监督学习 聚类 K均值 PCA主成分分析 等 深度学习下的无监督学习 自编码器 传统的基于特征学习的自编码器 变种的生成式自编码器 Gen网络(对抗式生成网络) 传统自编码器 原理 类似于一个自学习式PCA,如果编码/解码器只是单层线性的话 自编码器编码解码示意图: 特征提取过程中甚至用到了卷积网络+relu的结构(我的认知停留在Originally级别) 编码&解码器可以共享权值(在我接触的代码中一般都没共享权值) 损失函数推荐L2 应用 由于重建已知数据是个没什么用的过程,所以自编码器

无监督学习小记(参考)

下面凌乱的小记一下无监督学习 无监督学习->聚类 降维 聚类:数据相似性 相似性的评估:两个数据样本间的距离 距离:欧氏距离 曼哈顿距离 马氏距离 夹角余弦 sklearn 聚类算法 sklearn.cluster,如k-means 近邻传播 DBSCAN等 标准的数据输入格式:[样本个数,特征个数]定义的矩阵形式 介绍sklearn.cluster |算法名称|参数|可扩展性|相似度度量| |-|-|-|-| 降维 主成分分析PCA PCA常用于高维数据集的探索与可视化,还可以用于数据压缩和预

无监督学习——K-均值聚类算法对未标注数据分组

无监督学习 和监督学习不同的是,在无监督学习中数据并没有标签(分类).无监督学习需要通过算法找到这些数据内在的规律,将他们分类.(如下图中的数据,并没有标签,大概可以看出数据集可以分为三类,它就是一个无监督学习过程.) 无监督学习没有训练过程. 聚类算法 该算法将相似的对象轨道同一个簇中,有点像全自动分类.簇内的对象越相似它的分类效果越好. 未接触这个概念可能觉得很高大上,稍微看了一会其实算法的思路和KNN一样很简单. 原始数据集如下(数据有两个特征,分别用横纵坐标表示),原始数据集并没有任何标

[机器学习][K-Means] 无监督学习之K均值聚类

有监督学习虽然高效.应用范围广,但最大的问题就是需要大量的有标签的数据集,但现实生活中我们遇到的大量数据都是没有明确标签的,而且对于庞大的数据集进行标注工作本身也是一项费时费力的工作模式,所以我们希望找到一种方法能自动的挖掘数据集中各变量的关系,然后"总结"出一些规律和特征进行分类,这样的方法我们成为无监督学习(Unsupervised learning). 在无标签的数据集中进行分类的方法成为聚类.顾名思义,聚类就是依照某种算法将相似的样本聚在一起形成一类,而不管它的标签是什么.在聚