没有合适的资源?快使用搜索试试~ 我知道了~
资源详情
资源评论
资源推荐
8/14/2018 Notebook.md—/Users/Robin/Downloads/Notebook
http://127.0.0.1:51004/view/1690 1/23
经历了前几章的环节之后,在数据分析和挖掘的过程中,经常会遇到一些难以理解的问题和困惑,面对这些问题,这章将展开讨
论,内容涵盖了聚类、回归、分类、关联、异常检测、时间序列、路径分析、漏斗分析、归因分析、热力图分析以及其他的统计分
析相关话题,针对部分话题将进行Python代码实操,以加深理解。
聚类是数据挖掘和计算的基本任务,是将大量数据集中具有“相似”特征的数据点或者样本划分为一个类别。其基本思想是“物以类
聚,人以群分”,因此大量的数据集中必然存在相似的数据样本,基于这个思想将数据区分开来,并发现不同类的特征。
聚类常用语数据探索或挖掘的前期,在没有进行先验经验的背景下进行探索性分析(EDA),也适用于样本量较大情况下的数据预
处理工作。
常用的聚类算法分为基于划分、层次、密度、网络、统计学、模型等类型的算法。典型算法包括K均值、DBSCAN、两步聚类、
BIRCH、谱聚类等。
聚类分析能解决的问题包括:
数据集可以分为几类
每个类别有多少样本量
不同类别中各个变量的强弱关系如何
不同类别的典型特征是什么
基于类别划分的其他应用
但是聚类的缺点是无法提供明确的行动指向,更多的是为后期数据挖掘和分析提供预处理和参考,因此聚类无法真正解决问题。
K-均值是聚类中最常用的方法之一,它基于点与点之间距离的相似度来计算最佳类别归属,但是在应用它之前要注意两种数据异
常:
1. 数据的异常值:异常值可能会导致不同点之间的剧烈相似度放生改变,而且是隐蔽的;
2. 数据的异常量纲:不同的维度与变量之间,如果存在数值规模或量纲差异,在进行距离计算之间一定要将变量归一化或者标准
化。
如果上述两个限制无法避免,可以尝试使用基于密度的聚类方法 --- DBSCAN。
DBSCAM全程Density-Based Spatial Clustering of Applications with Noise, 基于密度的带有噪声的空间聚类。该方法的出发点是
基于密度寻找被低密度区域划分的高密度空间,以此来实现不同数据样本的聚类。和K-均值相比,该方法的有点是:
对原始数据集的分布规律无明显要求,能够适应任意数据集分布形状的空间聚类,因此数据集适用性更广,尤其是对非凸装、
圆环形等异性簇分布的识别较好;
无需指定聚类数量,对结果的先验要求不高;
由于DNSCAN可区分核心对象、边界点和噪声点,因此对噪声的过滤效果好,能有效应对数据噪声。
但是,该方法是直接对整个数据样本集进行操作且聚类时使用了一个全局性的表征密度的参数,因此存在如下弱点:
对于高维问题,基于Eps(半径)、MinPts(密度)的定义是个大问题;
当簇的密度变化太大时,聚类结果较差;
当数据量较大时,要求较大的内存支持,I/O消耗也较大。
K-均值算法稳定、效率和准确率也表现很好,并且在应对大量数据时依然较好。其算法时间复杂度上界为O(n*k*t),其中n是样
本量、k是划分的聚类数、t是迭代次数。当聚类数和迭代数不变时,K-均值的算法消耗时间只跟样本量有关,呈现线性增长趋势。
当需要处理超大数据量的时候用,可以使用MinBatchKMeans,一种加入了分批处理思想的K-均值计算法,对数据集进行分批处
理,减少运行时间,但是会降低准确度的下降。
第四章 跳过运营数据分析和挖掘的“大坑”
4.1 聚类分析
4.1.1 当心数据异常对聚类结果的影响
4.1.2 超大数据量时应该放弃K-均值算法
8/14/2018 Notebook.md—/Users/Robin/Downloads/Notebook
http://127.0.0.1:51004/view/1690 2/23
聚类分析的结果提供了样本集在非监督模式下的类别划分,不经可以做群类别间的差异特征分析、群类别内的关键特征提取、样本
群划分等分析,还能用于数据预处理的中间过程。
图像压缩时用较少的数据量来表示原有的像素矩阵的过程,该过程称为图像编码,但是数字图像的数据量庞大,需要占用很大的存
储空间,给存储、计算、传输等带来不小的资源消耗,因此会预先对数字图像进行压缩,压缩的方法之一就是聚类算法。
图像分割就是将图像分成若干个特定的、具有独特性的区域并提出感兴趣的目标的技术和过程,分割后提取出的目标可以用于图像
语义识别、图像搜索等领域。聚类是图像分割的方法之一。
传统的图像理解大多借助于浅层的视觉特征,例如颜色、形状、纹理、轮廓等,而图像理解就是从图像中获取更加深层的信息,即
包含图像中存在的对象以及对象间的空间关系,也包含对隐含在图像背后的概念和内容进行探究。图像理解中,比较常用的是基于
区域的提取方法,即在图像分割和对象识别的前提下进行,利用对象模板、场景分类器等,通过识别对象以及对象之间的拓扑关系
挖掘语义,生成对应的场景语义信息。
聚类也是进行异常检测的方法之一,常用的便是基于距离的异常检测方法,该方法包含并拓展了基于统计的思想,即使数据集不满
足任何特定分布模型,仍能有小弟发现离群点,特别是当空间维度数目较高时,算法的效率比基于密度的高很多。
聚类也可以进行数据离散化的处理。在第三章第10部分第3小节已经有介绍。
在大数据背景下,数据获取难度和成本愈来愈低,很多高维数据场景下进行聚类时,传统的在低维空间通用的聚类方法,通常不能
取得令人满意的聚类结果,主要表现在聚类计算耗时长、结果相对于真实标签分类的准确度和稳定性大大降低。
主要的原因如下:
在面对高维度数据时,基于距离的相似度计算效率极低;
高维空间的大量属性特征是的在所有维度上存在簇的可能性非常低;
由于稀疏性和近邻特性,基于距离的相似度几乎都为0,导致高维度空间中很难存在数据簇
在应对高维度数据聚类问题时,可以使用下面2中方法解决:
1. 降维:通过特征选择发或者维度转换法将高维空间降低到低维空间,直接解决高维度问题;
2. 子空间聚类:在高维度空间中选取与给定簇密切相关的维度,然后在对应的子空间进行聚类。
在选择聚类算法的时候,可以参考如下因素:
如果数据集是高维度的,那么选择谱聚类,是子空间划分的一种,但是操作难度较高;
如果数据为中小规模,100万以内,那么K-均值将是比较好的选择,如果超过100万,可以考虑使用MiniBatchKMeans;
如果数据中有噪点(离群点),使用基于密度的DBSCAN可以有效应对;
如果追求更高的分类准确度,选择谱聚类法比K-均值更好。
SKLean中有专门的聚类库:cluster,其包含了很多的聚类算法。
本例将使用一份无标签的数据集做聚类分析,以得到不同类别的特征和分布状态等。
#
导入库
import numpy as np
4.1.3 聚类不仅是建模的重点,更是重要的中间预处理过程
1. 图像压缩
2. 图像分割
3. 图像理解
4. 异常检测
5. 数据离散化
4.1.4 高维数据上无法应用聚类吗
4.1.5 如何选择聚类分析算法
4.1.6 代码实操:Python聚类分析
8/14/2018 Notebook.md—/Users/Robin/Downloads/Notebook
http://127.0.0.1:51004/view/1690 3/23
import matplotlib.pyplot as plt
from sklearn.cluster import KMeans
from sklearn import metrics
#
数据准备
raw_data = np.loadtxt('cluster.txt')
X = raw_data[:, :-1]
y = raw_data[:, -1]
X[0]
array([0.58057881, 0.43199283])
#
训练聚类模型
#
设置聚类数量
n_cluster = 3
#
建立聚类模型对象
model_kmeans = KMeans(n_clusters=n_cluster, random_state=0)
#
训练聚类模型
model_kmeans.fit(X)
#
预测聚类模型
y_pred = model_kmeans.predict(X)
model_kmeans
KMeans(algorithm='auto', copy_x=True, init='k-means++', max_iter=300,
n_clusters=3, n_init=10, n_jobs=1, precompute_distances='auto',
random_state=0, tol=0.0001, verbose=0)
#
模型效果指标评估
#
总样本量、总特征数
n_samples, n_features = X.shape
#
样本距离最近的聚类中心的总和
inertias = model_kmeans.inertia_
#
调整后的兰德指数
adjusted_rand_s = metrics.adjusted_rand_score(y, y_pred)
#
互信息
mutual_info_s = metrics.mutual_info_score(y, y_pred)
#
调整后的互信息
adjusted_mutual_info_s = metrics.adjusted_mutual_info_score(y, y_pred)
#
同质化得分
homogeneity_s = metrics.homogeneity_score(y, y_pred)
#
完整性得分
completeness_s = metrics.completeness_score(y, y_pred)
# V_measure
得分
v_measure_s = metrics.v_measure_score(y, y_pred)
#
平均轮廓系数
silhouette_s = metrics.silhouette_score(X, y_pred, metric='euclidean')
# Calinski
和
Harabaz
得分
calinski_harabaz_s = metrics.calinski_harabaz_score(X, y_pred)
print ('samples: %d \t features: %d' % (n_samples, n_features)) #
打印输出样本量和特征数量
print (70 * '-') #
打印分隔线
print ('ine\tARI\tMI\tAMI\thomo\tcomp\tv_m\tsilh\tc&h') #
打印输出指标标题
print ('%d\t%.2f\t%.2f\t%.2f\t%.2f\t%.2f\t%.2f\t%.2f\t%d' % (
inertias, adjusted_rand_s, mutual_info_s, adjusted_mutual_info_s, homogeneity_s, completeness_s, v_measure_s,
silhouette_s, calinski_harabaz_s)) #
打印输出指标值
print (70 * '-') #
打印分隔线
print ('short name \t full name') #
打印输出缩写和全名标题
print ('ine \t inertias')
print ('ARI \t adjusted_rand_s')
print ('MI \t mutual_info_s')
print ('AMI \t adjusted_mutual_info_s')
8/14/2018 Notebook.md—/Users/Robin/Downloads/Notebook
http://127.0.0.1:51004/view/1690 4/23
samples: 1000 features: 2
----------------------------------------------------------------------
ine ARI MI AMI homo comp v_m silh c&h
300 0.96 1.03 0.94 0.94 0.94 0.94 0.63 2860
----------------------------------------------------------------------
short name full name
ine inertias
ARI adjusted_rand_s
MI mutual_info_s
AMI adjusted_mutual_info_s
homo homogeneity_s
comp completeness_s
v_m v_measure_s
silh silhouette_s
c&h calinski_harabaz_s
聚类算法的评级指标:Evaluation of Clustering
#
模型效果可视化
#
各类别中心
centers = model_kmeans.cluster_centers_
#
设置不同类别的颜色
colors = ['#4EACC5', '#FF9C34', '#4E9A06']
#
建立画布
plt.figure()
#
循环读取类别
for i in range(n_cluster):
#
找到相同类别的索引集合
index_sets = np.where(y_pred == i)
#
将相同类别的数据划分为一个聚类子集
cluster = X[index_sets]
#
展示聚类子集内的样本
plt.scatter(cluster[:, 0], cluster[:, 1], c=colors[i], marker='.')
#
展示聚类子集的中心
plt.plot(centers[i][0], centers[i][1], 'o', markerfacecolor = colors[i])
plt.show()
#
模型应用
new_X = np.array([[1, 3.6]])
cluster_label = model_kmeans.predict(new_X)
print('cluster of new data point is: %d' % cluster_label)
cluster of new data point is: 1
对于聚类模型结果的评估,主要考虑如下三个方面:
1. 对于没有任何聚类真实结果指标的,由于无法使用真实数据做对比,智能使用聚类距离指标做评估;
print ('homo \t homogeneity_s')
print ('comp \t completeness_s')
print ('v_m \t v_measure_s')
print ('silh \t silhouette_s')
print ('c&h \t calinski_harabaz_s')
剩余22页未读,继续阅读
小崔个人精进录
- 粉丝: 31
- 资源: 317
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- pta题库答案c语言之排序4统计工龄.zip
- pta题库答案c语言之树结构7堆中的路径.zip
- pta题库答案c语言之树结构3TreeTraversalsAgain.zip
- pta题库答案c语言之树结构2ListLeaves.zip
- pta题库答案c语言之树结构1树的同构.zip
- 基于C++实现民航飞行与地图简易管理系统可执行程序+说明+详细注释.zip
- pta题库答案c语言之复杂度1最大子列和问题.zip
- 三维装箱问题(Three-Dimensional Bin Packing Problem,3D-BPP)是一个经典的组合优化问题
- 以下是一些关于Linux线程同步的基本概念和方法.txt
- 以下是一个简化的示例,它使用pygame库来模拟烟花动画的框架.txt
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
评论0