聚类分析

线性回归和逻辑回归都是监督学习方法,聚类分析是非监督学习的一种,可以从一批数据集中探索信息,比如在社交网络数据中可以识别社区,在一堆菜谱中识别出菜系。本节介绍K-means聚类算法。

1、K-means

k是一个超参数,表示要聚类成多少类。K-means计算方法是重复移动类的重心,以实现成本函数最小化,成本函数为:

其中μk是第k类的重心位置。

2、试验

 1 import matplotlib.pyplot as plt
 2 import numpy as np
 3
 4 # 生成2*10的矩阵,且值均匀分布的随机数
 5 cluster1 = np.random.uniform(0.5, 1.5, (2, 10))
 6 cluster2 = np.random.uniform(3.5, 4.5, (2, 10))
 7 #print(cluster1)
 8 #print(cluster2)
 9 # 顺序连接两个矩阵,形成一个新矩阵,所以生成了一个2*20的矩阵,T做转置后变成20*2的矩阵,刚好是一堆(x,y)的坐标点
10 X = np.hstack((cluster1, cluster2)).T
11 #print(X)
12 plt.figure()
13 plt.axis([0, 5, 0, 5])
14 plt.grid(True)
15 plt.plot(X[:,0],X[:,1],‘k.‘)
16 #plt.show()
17
18 from sklearn.cluster import KMeans
19 kmeans = KMeans(n_clusters=2)
20 kmeans.fit(X)
21 plt.plot(kmeans.cluster_centers_[:,0], kmeans.cluster_centers_[:,1], ‘ro‘)
22 plt.show()

结果:

可以看到找到了两个重心点。

3、选择最优k值

你说不清它应该聚类成2、3、4个点,因此我们需要通过分别计算k=(2,3,4)的聚类结果,并比较他们的成本函数值,随着k的增大,成本函数值会不断降低,只有快速降低的那个k值才是最合适的k值,如下:

 1 import numpy as np
 2 import matplotlib.pyplot as plt
 3 from sklearn.cluster import KMeans
 4 from scipy.spatial.distance import cdist
 5 # 生成2*10的矩阵,且值均匀分布的随机数
 6 cluster1 = np.random.uniform(0.5, 1.5, (2, 10))
 7 cluster2 = np.random.uniform(1.5, 2.5, (2, 10))
 8 cluster3 = np.random.uniform(2.5, 3.5, [2, 10])
 9 cluster4 = np.random.uniform(3.5, 4.5, [2, 10])
10 # 顺序连接两个矩阵,形成一个新矩阵,所以生成了一个2*20的矩阵,T做转置后变成20*2的矩阵,刚好是一堆(x,y)的坐标点
11 X1 = np.hstack((cluster1, cluster2))
12 X2 = np.hstack((cluster3, cluster4))
13 X = np.hstack((X1, X2)).T #(40, 2)
14 K = range(1, 10)
15 meandistortions = []
16 for k in K:
17     kmeans = KMeans(n_clusters=k)
18     kmeans.fit(X)
19     # 求kmeans的成本函数值
20     meandistortions.append(sum(np.min(cdist(X, kmeans.cluster_centers_, ‘euclidean‘), axis=1)) / X.shape[0])
21 plt.figure()
22 plt.grid(True)
23 plt1 = plt.subplot(2,1,1)
24 # 画样本点
25 plt1.plot(X[:,0],X[:,1],‘k.‘);
26 plt2 = plt.subplot(2,1,2)
27 # 画成本函数值曲线
28 plt2.plot(K, meandistortions, ‘bx-‘)
29 plt.show()

从曲线上可以看到,随着k的增加,成本函数值在降低,但降低的变化幅度不断在减小,因此急速降低才是最合适的,这里面也许3是比较合适的,你也许会有不同看法

通过这种方法来判断最佳K值的方法叫做肘部法则,你看图像像不像一个人的胳膊肘?

时间: 2024-12-14 06:41:36

聚类分析的相关文章

聚类分析在用户分类中的应用

什么是聚类分析?  聚类分析属于探索性的数据分析方法.通常,我们利用聚类分析将看似无序的对象进行分组.归类,以达到更好地理解研究对象的目的.聚类结果要求组内对象相似性较高,组间对象相似性较低.在用户研究中,很多问题可以借助聚类分析来解决,比如,网站的信息分类问题.网页的点击行为关联性问题以及用户分类问题等等.其中,用户分类是最常见的情况. 聚类分析的基本过程是怎样的? 选择聚类变量 聚类分析 找出各类用户的重要特征 聚类解释&命名   ||  选择聚类变量 在设计问卷的时候,我们会根据一定的假设

聚类分析:用于筛选聚类变量的一套方法

聚类分析是常见的数据分析方法之一,主要用于市场细分.用户细分等领域.利用 SPSS 进行聚类分析时,用于参与聚类的变量决定了聚类的结果,无关变量有时会引起严重的错分,因此,筛选有效的聚类变量至关重要. 案例数据源: 在 SPSS 自带数据文件 plastic.sav 中记录了 20 中塑料的三个特征,分别是 tear_res (抗拉力). gloss (光滑度). opacity (透明度),相关经验表面这 20 中塑料可以分为 3 个种类,如果用这三个变量进行聚类,请判断和筛选有效聚类变量.

使用 Spark MLlib 做 K-means 聚类分析[转]

原文地址:https://www.ibm.com/developerworks/cn/opensource/os-cn-spark-practice4/ 引言 提起机器学习 (Machine Learning),相信很多计算机从业者都会对这个技术方向感到兴奋.然而学习并使用机器学习算法来处理数据却是一项复杂的工作,需要充足的知识储备,如概率论,数理统计,数值逼近,最优化理论等.机器学习旨在使计算机具有人类一样的学习能力和模仿能力,这也是实现人工智能的核心思想和方法.传统的机器学习算法,由于技术和

Matlab聚类分析(Cluster Analyses)

Matlab提供系列函数用于聚类分析,归纳起来具体方法有如下: 方法一:直接聚类,利用clusterdata函数对样本数据进行一次聚类,其缺点为可供用户选择的面较窄,不能更改距离的计算方法,该方法的使用者无需了解聚类的原理和过程,但是聚类效果受限制. 方法二:层次聚类,该方法较为灵活,需要进行细节了解聚类原理,具体需要进行如下过程处理:(1)找到数据集合中变量两两之间的相似性和非相似性,用pdist函数计算变量之间的距离:(2)用 linkage函数定义变量之间的连接:(3)用 cophenet

【转】聚类分析经典算法讲解及实现

本文将系统的讲解数据挖掘领域的经典聚类算法,并给予代码实现示例.虽然当下已有很多平台都集成了数据挖掘领域的经典算法模块,但笔者认为要深入理解算法的核心,剖析算法的执行过程,那么通过代码的实现及运行结果来进行算法的验证,这样的过程是很有必要的.因此本文,将有助于读者对经典聚类算法的深入学习与理解. 4 评论 杨 翔宇, 资深软件工程师, IBM 段 伟玮, 在读博士, IBM 2016 年 7 月 18 日 内容 在 IBM Bluemix 云平台上开发并部署您的下一个应用. 开始您的试用 前言

【读书笔记-数据挖掘概念与技术】高级聚类分析

1   基于概率模型的聚类 例子: a.评论产品,一个评论可能设计多种产品,如一个评论谈论摄像机与计算机的兼容性,怎么办?该评论与这两个簇相关,而并不互斥地属于任何一个簇. b.用户在购买商品时,检索的信息中既订购了一部数据相机,并且同时比较了多种笔记本电脑,怎么办?这种会话应该在某种程度上数据这两个簇. 1.1   模糊簇 这节的例子还不错. 1.2   基于概率模型的聚类 对象以概率的方法参与多个簇. 混合模型假定观测对象集是来自多个概率簇的实例的混合. 以单变量高斯混合模型为例,假定每个簇

计科1111-1114班第一次实验作业(NPC问题——回溯算法、聚类分析)

实验课安排 地点: 科技楼423 时间:  计科3-4班---15周周一上午.周二下午 计科1-2班---15周周一下午.周二晚上(晚上时间从18:30-21:10) 请各班学委在实验课前飞信通知大家. 实验内容 (1)八皇后及N皇后问题 八皇后问题,是一个古老而著名的问题,是回溯算法的典型案例.该问题是国际西洋棋棋手马克斯·贝瑟尔于1848年提出:在8X8格的国际象棋上摆放八个皇后,使其不能互相攻击,即随意两个皇后都不能处于同一行.同一列或同一斜线上.问有多少种摆法. 高斯觉得有76种方案.1

用R语言对NIPS会议文档进行聚类分析

一.用R语言建立文档矩阵 (这里我选用的是R x64 3.2.2) (这里我取的是04年NIPS共计207篇文档做分析,其中文档内容已将开头的作者名和最后的参考文献进行过滤处理) ##1.Data Import  导入自己下的3084篇NIPStxt文档 library("tm")#加载tm包 stopwords<- unlist(read.table("E:\\AllCode\\R\\stopwords.txt",stringsAsFactors=F)) d

R语言 系统聚类分析1

#聚类分析是一类将数据所研究对象进行分类的统计方法,这一类方法的共同特点是:#事先不知道类别的个数与结构 据以进行分类的数据是对象之间的相似性 或差异性数据#将这些相似(相异)性数据看成是对象之间的距离远近的一种度量 将距离近的对象#归入一类 不同类之间的对象距离较远#聚类分析根据分类对象不同分为Q型聚类分析(指的是对样本进行聚类) 和R型聚类分析(指的是对变量进行聚类) #距离和相似系数#聚类分析是研究对样本或变量的聚类 变量可以分为两类1定量变量 通常指的是连续量#2 定性变量(有序变量+名