本文已参与「新人创作礼」活动,一起开启掘金创作之路。
代码链接:github代码
1.任务要求
分析Clustering_ALS数据集,对疾病类型进行聚类分析。
2.读取数据:
ALS.csv 2223 rows × 101 columns
3.数据分析与可视化
(1)数值型数据分布统计:(data_distribute.png)
对每一列数据绘制直方图(质量分布图),它是表示数据分布情况的一种主要工具。其中y轴是密度,而不是概率。通过对每一类列数据做数据分布的统计,可以看到数据大致的分布情况,SubjectID 该类特征数值较大,分布与其他数据不一致性,不建议将其添加为特征;另外,每个数据都拥有range,min,max,median等四类,同一类数据分布趋势相似。
(2)相关性分析:(2D_t-SNE_manifold_representation.png,具体数值详见.ipynb)
根据相关性系数作图,可以看到红色即代表正相关相关性较强,蓝色代表负相关相关性较强,可以看到,同一类数据中range,min,max,median等四类相关性较强,在后续分析中,删除range,min,max,仅保留median作为特征。
3.数据预处理:
(1)在每一类删除range,min,max,仅保留median作为特征 (2)删除无关特征’ID’, ‘SubjectID’ (3)查询空缺值(无空缺值)
4.归一化与K-Means聚类
(1)不执行归一化:
设置聚类类别数从1-10,计算每一种情况下的SSE,绘制图片,根据Elbow原则,确定4即为最佳聚类类别数。
(2)Z标准化
Z-score标准化是将数据变成均值为0,标准差为1的分布,此方法比较适合于本身较符合正态分布的数据集。调用sklearn包,执行z标准化,输出结果无明显拐点,此方法不合适。
(3)最大最小归一化
调用sklearn包,执行最大最小归一化,输出结果无明显拐点,此方法不合适。
(4)正则化
正则化可以保留原有数据特征,同时将数据统一缩放,可以有效防止过拟合。常用的就L1和L2正则化,L1是将每一个样本的各向量绝对值之和作为范数,再用每个向量去除了这个范数,就得到这个样本L1正则化后的向量;L2是将每一个样本的向量先平方和再开方作为范数,再相除。调用sklearn包,执行标准化操作,在4位置有明显拐点,后续数据均采用正则化之后的数据。
5.T-SNE聚类结果展示
t-SNE(t-distributed stochastic neighbor embedding)是用于降维的一种机器学习算法,非常适用于将非线性数据高维数据降维到2维或者3维,进行可视化。
本题通过t-sne将高维数据降成两维,然后,根据k-means分4类的结果对处理后的两维数据进行分类,并标注出中心点,有以下结果。
可以看到,聚类结果明显将数据分为4类,并且聚类中心点都在该类簇的中心位置,可见分类效果较好,然而这种低维的数据分布仍需要通过高维变量来解释。同时,参考论文,ALS是一种非常异构的进行性神经退行性疾病,临床有多方面表现形式。本文选取的特征数量仅为一小部分,很难产生预测精度很高的预测模型。通过机器学习的方法计算出来的分类结果,仍需要进一步融合病人的各种临床特征加以判断并进行合理解释。
代码链接:github代码
如果感觉对你有所帮助,不妨点个赞,关注一波,激励博主持续更新!