【学习笔记】数据分析Python聚类 聚类 聚类(Clustering):将数据集划分为若干 ...-经管之家官网!

人大经济论坛-经管之家 收藏本站
您当前的位置> 数据>>

数据分析

>>

【学习笔记】数据分析Python聚类 聚类 聚类(Clustering):将数据集划分为若干 ...

【学习笔记】数据分析Python聚类 聚类 聚类(Clustering):将数据集划分为若干 ...

发布:于家崎 | 分类:数据分析

关于本站

人大经济论坛-经管之家:分享大学、考研、论文、会计、留学、数据、经济学、金融学、管理学、统计学、博弈论、统计年鉴、行业分析包括等相关资源。
经管之家是国内活跃的在线教育咨询平台!

经管之家新媒体交易平台

提供"微信号、微博、抖音、快手、头条、小红书、百家号、企鹅号、UC号、一点资讯"等虚拟账号交易,真正实现买卖双方的共赢。【请点击这里访问】

提供微信号、微博、抖音、快手、头条、小红书、百家号、企鹅号、UC号、一点资讯等虚拟账号交易,真正实现买卖双方的共赢。【请点击这里访问】

数据分析Python聚类聚类聚类(Clustering):将数据集划分为若干相似对象组成的多个组(group)或簇(cluster)的过程,使得同一组中对象间的相似度最大化,不同组中对象间的相似度最小化。或者说一个簇(cluster)就是由彼此 ...
扫码加入统计交流群


数据分析Python聚类
聚类
聚类(Clustering):将数据集划分为若干相似对象组成的多个组(group) 或簇(cluster)的过程,使得同一组中对象间的相似度最大化,不同组 中对象间的相似度最小化。或者说一个簇(cluster)就是由彼此相似的 一组对象所构成的集合,不同簇中的对象通常不相似或相似度很低
聚类分析指将物理或抽象对象的集合分组为由类似的对象 组成的多个类的分析过程。它是一种重要的人类行为。
聚类源于很多领域,包括数学,计算机科学,统计学,生 物学和经济学。在不同的应用领域,很多聚类技术都得到 了发展,这些技术方法被用作描述数据,衡量不同数据源 间的相似性,以及把数据源分类到不同的簇中。
聚类的意义:
首先将大规模的、纷繁复杂的数据归档为不同的类别, 进而针对每一类数据,制定不同的管理、分析方式,因 为每一类的数据都是显著不同的。
聚类会从数据中发掘出很多分析和理解的视角,让我们 更深入的把握数据资源的价值、并据此指导生产生活。
聚类与分类的区别:
分类:监督学习,有限类别中的某一类
聚类:无监督学习,不依赖预先定义的类或带类标记的 训练实例,需要由聚类学习算法自动确定标记。聚类是 一种探索性的分析,聚类分析所使用方法的不同,常常 会得到不同的结论。不同研究者对于同一组数据进行聚 类分析,所得到的聚类数未必一致。
聚类基本流程:
对数据进行表示和预处理,包括数据清洗、特征选择或特征抽取
给定数据之间的相似度或相异度及其定义方法
根据相似度,对数据进行划分,即聚类
对聚类结果进行评估
主要聚类方法类别:
K-means
K-均值(K-Means):K均值法是麦奎因(MacQueen,1967)提出的,这 种算法的基本思想是将每一个样本分配给最近中心(均值)的类中。
算法步骤:
先从没有标签的元素集合A中随机取k个元素作为k个子集各自的中心
分别计算剩下的元素到k个子集中心的距离,根据将这些元素分别划归到最 近的子集
根据聚类结果,重新计算中心(子集中所有元素各个维度的算数平均数)
将集合A中全部元素按照新的中心然后再重新聚类
重复以上步骤,直到聚类的结果不再发生变化
代码实现:
from sklearn.cluster import KMeans
import numpy as np
import matplotlib.pyplot as plt
# 载入数据
data = np.genfromtxt(\'data//kmeans.txt\',delimiter=\' \')
# 设置k值
k = 4
#只动n_clusters参数
model = KMeans(n_clusters=k)
model.fit(data) #聚类结束
model.cluster_centers_ #四个质心
model.labels_ #样本所对应的标签
model.n_iter_ #迭代次数
model.inertia_ #SSE,累加平方误差
#预测,执行分类
model.predict([[1,2]])
可视化:
predictions=model.predict(data)
centers=model.cluster_centers_
# 画样本点
mark = [\'or\',\'ob\',\'og\',\'oy\']
for i,d in enumerate(data):
plt.plot(d[0],d[1],mark[predictions])
# 画分类中心点
mark = [\'*r\',\'*b\',\'*g\',\'*y\']
for i,center in enumerate(centers):
plt.plot(center[0],center[1],mark,markersize=20)
plt.show()
K-Means算法优化
根据经验:使用多次的随机初始化,计算每一次建模得到代价函数的值,选取代价 函数最小结果作为聚类结果
肘部法则优化k
from sklearn import metrics
silhouette_all=[]
for k in range(2,10):
model = KMeans(n_clusters=k)
model.fit(data)
labels = model.labels_
silhouette_score = metrics.silhouette_score(data, labels, metric=\'euclidean\')
silhouette_all.append(silhouette_score)
plt.plot(range(2,10),silhouette_all)
plt.xlabel(\'k\')
plt.ylabel(\'silhouette_score\')
plt.show()
轮廓系数:Mini Batch K-Means算法
Mini Batch K-Means算法是K-Means算法的变种,采用小批量的数据子集减小计 算时间。这里所谓批是指每次训练算法时所随机抽取的数据子集,采用这些随 机产生的子集进行训练算法,大大减小了计算时间,结果一般只略差于标准算法。
算法的迭代步骤有两步:
从数据集中随机抽取一些数据形成小批量,把他们分配给最近的质心
更新质心
与K均值算法相比,数据的更新是在每一个小样本集上。Mini Batch K-Means比 K-Means有更快的收敛速度,略微降低聚类的效果。
DBSCAN
DBSCAN(Density-Based Spatial Clustering of Applications with Noise):它将簇定义为密度相连的点组成的最大集合,能够把具有足够高密度的区域划 分为簇,并可在噪声的空间数据库中发现任意形状的聚类
DBSCAN中的几个定义:
Ε邻域:给定对象半径为Ε内的区域称为该对象的Ε邻域
核心对象:如果给定对象Ε邻域内的样本点数大于等于Min-points,则称 该对象为核心对象
直接密度可达:对于样本集合D,如果样本点q在p的Ε邻域内,并且p为核 心对象,那么p到q直接密度可达
密度可达:对于样本集合D,给定一串样本点p1,p2….pn,p=p1,q=pn,假如 pi-1到pi直接密度可达,那么对象p到q密度可达
密度相连:存在样本集合D中的一点o,如果对象o到对象p和对象q都是密度 可达的,那么p和q密度相联
DBSCAN密度聚类思想:由密度可达关系导出的最大密度相连的样本集合,即为 我们最终聚类的一个类别,或者说一个簇
算法步骤:
指定合适的E和Min-points;
计算所有的样本点,如果p的E邻域里有超过Min-points个点,则创建一个 以p为核心点的新簇;
反复寻找这些核心点直接密度可达(之后能是密度可达)的点,将其加入 到相应簇,对于核心点发生“密度相连”状况的簇,给予合并;
当没有新的点可以被添加到任何簇时,算法结束。
DBSCAN的主要优点有:
不需要输入聚类个数,可以对任意形状的稠密数据集进行聚类,相对的, K-Means之类的聚类算法一般只适用于凸数据集
可以在聚类的同时发现异常点,对数据集中的异常点不敏感
聚类结果没有偏倚,相对的,K-Means之类的聚类算法初始值对聚类结果有 很大影响
DBSCAN的主要缺点有:
如果样本集的密度不均匀、聚类间距差相差很大时,聚类质量较差
如果样本集较大时,聚类收敛时间较长
调参相对于传统的K-Means之类的聚类算法稍复杂,需要对距离阈值E,邻域样本数阈值Min-points联合调参
数据集是稠密的,并且数据集不是凸的,DBSCAN会比K-Means聚类效果好很多
代码实现
import numpy as np
import matplotlib.pyplot as plt
from sklearn import datasets
%matplotlib inline
x1, y1 = datasets.make_circles(n_samples=2000, factor=.4, noise=.05)#x1为坐标,y1为标签,这里不需要标签
x2, y2 = datasets.make_blobs(n_samples=1000, centers=[[1.2,1.2]], cluster_std=[[.1]])
x = np.concatenate((x1, x2))
plt.scatter(x[:, 0], x[:, 1], marker=\'o\')
plt.show()
from sklearn.cluster import DBSCAN
y_pred = DBSCAN(eps = 0.2,min_samples=50).fit_predict(x)
plt.scatter(x[:, 0], x[:, 1], c=y_pred)
plt.show()
「经管之家」APP:经管人学习、答疑、交友,就上经管之家!
免流量费下载资料----在经管之家app可以下载论坛上的所有资源,并且不额外收取下载高峰期的论坛币。
涵盖所有经管领域的优秀内容----覆盖经济、管理、金融投资、计量统计、数据分析、国贸、财会等专业的学习宝库,各类资料应有尽有。
来自五湖四海的经管达人----已经有上千万的经管人来到这里,你可以找到任何学科方向、有共同话题的朋友。
经管之家(原人大经济论坛),跨越高校的围墙,带你走进经管知识的新世界。
扫描下方二维码下载并注册APP
本文关键词:

本文论坛网址:https://bbs.pinggu.org/thread-9528916-1-1.html

人气文章

1.凡人大经济论坛-经管之家转载的文章,均出自其它媒体或其他官网介绍,目的在于传递更多的信息,并不代表本站赞同其观点和其真实性负责;
2.转载的文章仅代表原创作者观点,与本站无关。其原创性以及文中陈述文字和内容未经本站证实,本站对该文以及其中全部或者部分内容、文字的真实性、完整性、及时性,不作出任何保证或承若;
3.如本站转载稿涉及版权等问题,请作者及时联系本站,我们会及时处理。