✨ 欢迎关注Python机器学习AI ✨
本节介绍:基于
可解释的聚类分析综合框架实现对无标签数据进行shap解释
,数据采用模拟数据无任何现实意义,作者根据个人对机器学习的理解进行代码实现与图表输出,细节并不保证与原文一定相同,仅供参考。
详细数据和代码将在稍后上传至交流群,付费群成员可在交流群中获取下载。需要的朋友可关注公众文末提供的购买方式。
购买前请咨询,避免不必要的问题。
✨ 论文信息 ✨
流程图展示了一个综合的聚类分析框架,涵盖了多个模块、功能、技术、核心函数、方法和可解释性内容。首先,从数据预处理开始,框架提供了数据填补、异常值检测、维度降维等功能,并通过如KNN、热备填充法等技术进行数据填补,利用iForest进行异常值检测,和通过主成分分析(PCA)或多重对应分析(MCA)进行降维
接着,聚类分析模块使用K-means、GMM(高斯混合模型)和层次聚类等技术进行聚类,提供了通过聚类结果进行的可解释性分析方法,如描述性统计、与全局均值的比较、聚类数量选择等
在特征选择和模型优化阶段,框架包括了随机森林、RFECV(递归特征消除与交叉验证)等技术,结合超参数优化进行模型调整,最终通过训练的分类器(如XGBoost)进行模型拟合
最后,框架还提供了多个可解释性方法,如特征重要性分析、SHAP值分析、混淆矩阵、ROC曲线、以及交叉验证报告等,帮助用户理解聚类分析和模型的结果。这种结构化的流程使得从数据预处理到模型解释的过程都能够系统化地进行,以提高分析的透明度和准确性
对于12部分请参考—— 期刊复现①:数据清洗与预处理为可解释聚类分析提供数据支持 、 期刊复现②:数据降维为可解释聚类分析提供数据支持
✨ 代码实现 ✨
from sklearn.cluster import KMeans
# 计算不同聚类数下的误差平方和 (SSE)
sse = []
k_range = range(1, 11) # 设置聚类数量范围,这里选取1到10个聚类
for k in k_range:
kmeans = KMeans(n_clusters=k, random_state=42)
kmeans.fit(df)
sse.append(kmeans.inertia_) # inertia_属性表示SSE
# 绘制肘部图
plt.figure(figsize=(8, 6))
plt.plot(k_range, sse, marker='o', color='b', linestyle='--')
# 设置标题,x轴和y轴的标签,字体加大加粗
plt.title('Elbow Method', fontsize=18, fontweight='bold') # 增大字体并加粗
plt.xlabel('Number of Clusters (K)', fontsize=16, fontweight='bold') # 增大字体并加粗
plt.ylabel('Sum of Squared Errors (SSE)', fontsize=16, fontweight='bold') # 增大字体并加粗
# 设置x轴刻度
plt.xticks(k_range, fontsize=14, fontweight='bold') # x轴刻度加大加粗
plt.yticks(fontsize=14, fontweight='bold') # y轴刻度加大加粗
# 显示网格
plt.grid(True)
# 在肘部位置添加注释
elbow_k = 2 # 找到肘部位置,通常是SSE变化明显减缓的位置
plt.axvline(x=elbow_k, color='r', linestyle=':', label=f"Elbow at: K={elbow_k}")
plt.legend(prop={'size': 14, 'weight': 'bold'})
plt.savefig("10.pdf", format='pdf', bbox_inches='tight')
plt.show()
肘部法则(Elbow Method)用于选择聚类算法中的最佳聚类数(K)。通过计算不同聚类数下的误差平方和(SSE),并将其绘制成图,可以观察SSE随着聚类数的变化趋势。肘部法则的核心思想是通过分析SSE曲线,找到曲线明显弯曲的“肘部”位置,这个位置所对应的K值通常被认为是最佳的聚类数。框架中的第12部分采用了框架中的函数来进行处理,而第34部分将根据框架中阐述的意义进行进一步优化,而不再单纯依赖框架中的函数
from sklearn.metrics import silhouette_score
# 计算不同聚类数下的轮廓系数
silhouette_scores = []
k_range = range(2, 11) # 聚类数至少为2,因为轮廓系数无法计算1个聚类
for k in k_range:
kmeans = KMeans(n_clusters=k, random_state=42)
kmeans.fit(df)
score = silhouette_score(df, kmeans.labels_) # 计算当前聚类数下的轮廓系数
silhouette_scores.append(score)
# 绘制轮廓系数图
plt.figure(figsize=(8, 6))
plt.plot(k_range, silhouette_scores, marker='o', color='b', linestyle='--')
# 设置标题,x轴和y轴的标签,字体加大加粗
plt.title('Silhouette Score vs Number of Clusters', fontsize=18, fontweight='bold') # 标题
plt.xlabel('Number of Clusters (K)', fontsize=16, fontweight='bold') # x轴标签
plt.ylabel('Silhouette Score', fontsize=16, fontweight='bold') # y轴标签
# 设置x轴刻度
plt.xticks(k_range, fontsize=14, fontweight='bold') # x轴刻度
plt.yticks(fontsize=14, fontweight='bold') # y轴刻度
# 显示网格
plt.grid(True)
# 在最佳轮廓系数处添加注释
best_k = k_range[silhouette_scores.index(max(silhouette_scores))] # 获取具有最高轮廓系数的聚类数
plt.axvline(x=best_k, color='r', linestyle=':', label=f"Best K={best_k} with Score={max(silhouette_scores):.3f}")
plt.legend(prop={'size': 14, 'weight': 'bold'}) # 图例加大加粗字体
plt.savefig("11.pdf", format='pdf', bbox_inches='tight')# 显示图形
plt.show()
使用轮廓系数(Silhouette Score)来评估不同聚类数(K)下的聚类效果,绘制轮廓系数与聚类数关系的图。轮廓系数越接近1,说明聚类效果越好,越接近-1则说明聚类效果差。通过计算并绘制不同K值下的轮廓系数,帮助选择最佳聚类数(最佳K值为轮廓系数最大的点)
轮廓系数是一个评价聚类质量的指标,它不仅考虑了同一聚类内部数据点之间的相似性,还考虑了不同聚类之间的分离程度。通常,轮廓系数的值在-1到1之间,值越大,聚类效果越好
到这里确定了最佳聚类数k,然后训练这样的无监督K-Means模型,至此,为无标签数据分配了标签,为接下来的模型构建和模型解释做好了准备,为和参考文献保持一致接下来的k确定为k=6
import seaborn as sns
kmeans = KMeans(n_clusters=6, random_state=42)
kmeans.fit(df) # 对数据进行聚类
# 获取聚类标签
labels = kmeans.labels_
# 计算每个聚类标签下各特征的均值
cluster_means = pd.DataFrame(df).groupby(labels).mean()
# 绘制热图并设置更大的字体和加粗数值
plt.figure(figsize=(16, 8))
sns.heatmap(cluster_means, annot=True, cmap="YlGnBu", fmt='.2f', linewidths=0.5, annot_kws={'size': 14, 'weight': 'bold'})
# 设置更大的字体和加粗
plt.title('Mean Values for Each Cluster', fontsize=20, fontweight='bold')
plt.xlabel('Features', fontsize=16, fontweight='bold')
plt.ylabel('Cluster Labels', fontsize=16, fontweight='bold')
plt.xticks(rotation=45, ha='right', fontsize=14, fontweight='bold')
plt.yticks(fontsize=14, fontweight='bold')
plt.tight_layout()
plt.savefig("12.pdf", format='pdf', bbox_inches='tight')
plt.show()
使用KMeans算法将数据聚为6个聚类,绘制每个聚类中各特征均值的热图,帮助可视化不同聚类的特征差异,接下来对数据进行模型训练以及模型解释即可
✨ 该文章案例 ✨
在上传至交流群的文件中,像往期文章一样,将对案例进行逐步分析,确保读者能够达到最佳的学习效果。内容都经过详细解读,帮助读者深入理解模型的实现过程和数据分析步骤,从而最大化学习成果。
同时,结合提供的免费AI聚合网站进行学习,能够让读者在理论与实践之间实现融会贯通,更加全面地掌握核心概念。
✨ 购买介绍 ✨
本节介绍到此结束,有需要学习数据分析和Python机器学习相关的朋友欢迎到 淘宝店铺:Python机器学习AI,或添加作者微信deep_ML联系 ,购买作者的公众号合集。截至目前为止,合集已包含200多篇文章,购买合集的同时,还将提供免费稳定的AI大模型使用,包括但不限于ChatGPT、Deepseek、Claude等。
更新的内容包含数据、代码、注释和参考资料。
作者仅分享案例项目,不提供额外的答疑服务。项目中将提供详细的代码注释和丰富的解读,帮助您理解每个步骤
。
购买前请咨询,避免不必要的问题。
✨ 群友反馈 ✨
✨ 淘宝店铺 ✨
请大家打开淘宝扫描上方的二维码,进入店铺,获取更多Python机器学习和AI相关的内容,或者添加作者微信 deep_ML联系
避免淘宝客服漏掉信息
,希望能为您的学习之路提供帮助!
往期推荐
GeoShapley算法:基于地理数据的Shapley值在空间效应测量中的应用——位置重要性与特征交互作用分析
期刊配图:基于‘UpSet图’展示不同数据预处理对模型性能的影响
J Clean Prod:结合K-means聚类确定样本分组方式再结合shap初步解释模型的模拟实现
nature communications:结合LightGBM特征选择与RF模型的机器学习方法及SHAP解释
期刊配图:结合lightgbm回归模型与K折交叉验证的特征筛选可视化
Nature新算法:准确的小数据预测与表格基础模型TabPFN分类实现及其模型解释
Nature新算法:准确的小数据预测与表格基础模型TabPFN回归实现及其模型解释
如果你对类似于这样的文章感兴趣。
欢迎关注、点赞、转发~
个人观点,仅供参考