ARTICLE DETAIL

建站实战干货

来自一线的建站与推广经验沉淀,每一条都经过真实交付验证。

为聚类做准备:用散点图探索数据的可视化实践指南(ML-For-Beginners 聚类课程作业解析)

2026/9/12 2:20:24 拓冰建站 浏览量
为聚类做准备:用散点图探索数据的可视化实践指南(ML-For-Beginners 聚类课程作业解析) 为聚类做准备用散点图探索数据的可视化实践指南ML-For-Beginners 聚类课程作业解析【免费下载链接】ML-For-Beginners12 weeks, 26 lessons, 52 quizzes, classic Machine Learning for all项目地址: https://gitcode.com/GitHub_Trending/ml/ML-For-Beginners导读在聚类这一无监督学习任务中簇cluster的形状、重叠程度与分布密度直接决定应该选用哪种聚类算法。ML-For-Beginners 项目 5-Clustering 第一课课程 README的核心训练思路是在正式跑聚类算法之前先用散点图等可视化手段摸清数据的“脾气”。本篇文章围绕该课的课后作业作业原文展开说明如何系统调研散点图的多种实现库与图表形态并基于课程自带的尼日利亚音乐数据集完成一套“散点图驱动”的聚类前探索帮助你掌握散点图用于发现数据分组的完整方法论。作业任务解读研究用于聚类的其他可视化方式作业要求该作业要求你调研除课程已用技术之外的散点图实现方式并产出一个记录完备的 Jupyter Notebook探索创建散点图的不同方法与不同库将你的发现记录在 Notebook 中数据来源可以是本课数据、其他课程的数据也可以自行收集若自行收集必须在 Notebook 中注明出处用数据绘制散点图并解释你的观察结论。评分标准Rubric标准优秀Outstanding合格Satisfactory需改进Needs Improvement评分要点提交的 Notebook 包含 5 个记录良好的散点图提交的 Notebook 散点图少于 5 个且记录较不完善提交的 Notebook 不完整由此可以看出作业的硬性交付物是“5 个以上、每个都有清晰文字说明”的散点图。这也提示了成文的验收逻辑散点图的“数量”固然重要但“可解释性”——即每张图回答了什么数据问题、发现了什么分组线索——才是评分的关键。为什么散点图是聚类前探索的核心工具从课程数据看聚类高度依赖可视化课程在进入算法之前专门安排了一整节“Exercise - cluster your data”并在课程结尾强调In general, for clustering, you can use scatterplots to show clusters of data, so mastering this type of visualization is very useful.散点图的价值在于把每个样本映射为二维平面上的一个点使点的聚集形态、离群点、类间重叠一目了然。结合本课所用数据 nigerian-songs.csv531 行、16 列含popularity、danceability、energy、loudness、artist_top_genre等字段散点图可以回答诸如“三种主流流派的歌曲在‘流行度-可舞性’平面上是否天然分群”这类聚类前置问题。结合算法选型表理解可视化的意义课程 README 列出了 Scikit-learn 支持的十余种聚类方法及其适用场景例如方法名适用场景K-Means通用、归纳式inductiveAffinity propagation多且不均匀的簇归纳式Mean-shift多且不均匀的簇归纳式Spectral clustering少且均匀的簇直推式transductiveWard hierarchical clustering多且有约束的簇直推式DBSCAN非平面几何、不均匀簇直推式OPTICS非平面几何、密度可变的不均匀簇直推式Gaussian mixtures平面几何归纳式BIRCH含离群点的大数据集归纳式课程在作业之前还铺垫了几个影响算法选择的关键概念归纳式 vs 直推式inductive vs transductive归纳式从训练样本推导出通用规则再应用于测试样本直推式直接把已知样本的标签映射到具体测试样本。若数据集只有部分标注直推式通常能更好地处理“未见过”的类别。平面几何 vs 非平面几何flat vs non-flat geometry平面指欧几里得距离两点间直线段长度非平面指沿曲线测量的非欧几里得距离。当可视化后的数据点并不落在平面上时可能需要专门的算法如 DBSCAN、OPTICS来处理。密度density含噪声的数据被认为“稠密”不同簇内部点的密集程度可能不同需要选择密度型聚类方法分析。约束聚类constrained clustering在半监督场景下点与点之间可被标记为“cannot-link”或“must-link”把规则强加给数据集以改善无监督聚类可能产生的低质量簇。这些概念决定了先用散点图看清数据几何形态再决定用哪类算法。例如如果你在散点图中观察到簇与簇之间呈不规则、非凸的形态那么基于欧氏距离与质心的 K-Means 很可能失效而应优先考虑 DBSCAN 等密度型方法。准备工作数据加载与初步体检安装并导入依赖课程作业允许沿用本课数据其加载代码与课程 README 一致Python 3.8 环境!pip install seaborn import matplotlib.pyplot as plt import pandas as pd df pd.read_csv(5-Clustering/data/nigerian-songs.csv) df.head()若在仓库内的5-Clustering/1-Visualize/目录中运行课程 notebook.ipynb相对路径应写为../data/nigerian-songs.csvsolution 中的 notebook.ipynb 则使用../../data/nigerian-songs.csv。数据前五行如下namealbumartistartist_top_genrerelease_datelengthpopularitydanceabilityacousticnessenergyinstrumentalnesslivenessloudnessspeechinesstempotime_signatureSparkyMandy The JungleCruel Santinoalternative rb2019144000480.6660.8510.420.5340.11-6.6990.0829133.0155shuga rushEVERYTHING YOU HEARD IS TRUEOdunsi (The Engine)afropop202089488300.710.08220.6830.0001690.101-5.640.36129.9933LITT!LITT!AYLØindie rb2018207758400.8360.2720.5640.0005370.11-7.1270.0424130.0054Confident / Feeling CoolEnjoy Your LifeLady Donlinigerian pop2019175135140.8940.7980.6110.0001870.0964-4.9610.113111.0874wanted yourare.Odunsi (The Engine)afropop2018152049250.7020.1160.8330.910.348-6.0440.0447105.1154数据体检三步曲课程 README 与 solution notebook 给出了标准的数据体检流程这也是作业 Notebook 中值得保留的“铺垫步骤”# 1. 查看列类型与空值 df.info() df.isnull().sum() # 16 列均 0 空值 # 2. 查看数值分布概况 df.describe() # 3. 观察流派构成 top df[artist_top_genre].value_counts() plt.figure(figsize(10,7)) sns.barplot(xtop[:5].index, ytop[:5].values) plt.xticks(rotation45) plt.title(Top genres, colorblue)关键观察点数据共 530 条有效记录16 列无空值popularity存在大量 0 值代表未被平台排名的歌曲属于噪声后续需过滤artist_top_genre中包含Missing值说明 Spotify 未对该歌曲分类需过滤按课程步骤依次过滤先去掉Missing流派再聚焦afro dancehall、afropop、nigerian pop三大主流流派并剔除popularity 0的样本df df[df[artist_top_genre] ! Missing] df df[(df[artist_top_genre] afro dancehall) | (df[artist_top_genre] afropop) | (df[artist_top_genre] nigerian pop)] df df[(df[popularity] 0)]相关性检查确定散点图应聚焦的维度课程用热力图检查特征相关性correlation.pngcorrmat df.corr(numeric_onlyTrue) f, ax plt.subplots(figsize(12, 9)) sns.heatmap(corrmat, vmax.8, squareTrue)结论是唯一强相关出现在energy能量与loudness响度之间响亮的音乐通常更有能量这并不意外其余相关性都较弱。这意味着没有高度共线的冗余特征散点图可以放心地在多个特征组合间探索。课程同时提醒相关不等于因果correlation does not imply causation。课程示范三种与散点图一脉相承的可视化课程本身已经演示了与散点图密切相关的三类图作业要求的“其他散点图形态”可以以此为起点拓展1. 分布联合图jointplot KDEsns.set_theme(styleticks) g sns.jointplot( datadf, xpopularity, ydanceability, hueartist_top_genre, kindkde, )这是用 KDE核密度估计绘制的联合分布图distribution.png用连续概率密度曲线表达数据分布。课程观察三个流派在流行度与可舞性上大致对齐围绕一个总体收敛中心形成同心圆状分布——这种松散的、重叠的数据形态预示着后续聚类将具有挑战性。2. FacetGrid 散点图课程中的正式散点图sns.FacetGrid(df, hueartist_top_genre, height5) \ .map(plt.scatter, popularity, danceability) \ .add_legend()该代码facetgrid.png用artist_top_genre着色在同一张散点图中叠加三个流派观察到的收敛模式与 jointplot 一致。这正是作业要研究的对象如何用散点图清晰呈现分组。3. 高阶观察流派与流行度的分布课程还提示尝试其他数据点energy、loudness、speechiness与更多流派并结合df.describe()查看数据整体散布——这正是作业“explain your observations”环节的自然延伸。作业核心五种以上散点图方案的研究清单以下方案均可直接用于作业 Notebook每个方案都包含“库/API、实现要点、数据洞察角度”三要素帮助你达到“优秀”档位5 张记录良好的散点图。方案 1Matplotlib 原生散点图基础对照Matplotlib 是 Seaborn 的底层依赖可零依赖完成散点图plt.figure(figsize(10, 7)) colors {afro dancehall: #1f77b4, afropop: #ff7f0e, nigerian pop: #2ca02c} for genre in colors: sub df[df[artist_top_genre] genre] plt.scatter(sub[popularity], sub[danceability], ccolors[genre], labelgenre, alpha0.7) plt.xlabel(popularity) plt.ylabel(danceability) plt.legend() plt.title(Popularity vs Danceability by Genre (matplotlib)) plt.show()观察角度作为基线图验证与 Seaborn 输出的一致性alpha参数用于缓解点重叠overplotting。方案 2Seabornscatterplot统计层散点图Seaborn 的scatterplot比课程演示的 FacetGrid 更简洁且支持hue、style、size多重美学映射import seaborn as sns sns.scatterplot(datadf, xpopularity, ydanceability, hueartist_top_genre, styleartist_top_genre, s60, alpha0.7) plt.title(Seaborn scatterplot: popularity vs danceability) plt.show()观察角度style参数让流派同时以颜色与形状区分方便色盲读者可扩展到xenergy, yloudness验证强相关特征在散点图上的表现。方案 3relplot关系型多面网格relplot是 FacetGrid 的“升级版”可基于col/row按流派拆分子图sns.relplot(datadf, xpopularity, ydanceability, hueartist_top_genre, colartist_top_genre, kindscatter, height4, aspect1)观察角度每个子图单独展示一种流派便于对比各流派的点云范围与聚集中心这也是 FacetGrid 做法的另一种表达。方案 4Pandas 内置绘图一行代码散点图Pandas DataFrame 自带plot.scatter适合快速查看df.plot.scatter(xenergy, yloudness, cpopularity, colormapviridis, figsize(10, 7))观察角度用颜色映射第三个连续变量如popularity把二维散点图升级为“伪三维”信息视图此处正好可以观察energy与loudness的线性正相关趋势。方案 5Plotly 交互式散点图可选装库Plotly 提供悬停提示、缩放与图例筛选等交互能力import plotly.express as px fig px.scatter(df, xpopularity, ydanceability, colorartist_top_genre, hover_data[name, artist], titleInteractive scatterplot of Nigerian songs) fig.show()观察角度交互式图表便于对离群点“溯源”——悬停即可查看具体歌曲名与艺人回答“这个孤立的点是谁”的问题。方案 6加分项seabornlmplot/regplot带回归趋势线若想观察维度间的关系强度可叠加回归线sns.lmplot(datadf, xenergy, yloudness, hueartist_top_genre)观察角度回归线直观量化了课程热力图发现的energy-loudness强相关并检验该关系是否因流派而异。作业落地建议Notebook 结构与写作要点标题与目标开篇用 Markdown 说明“本作业研究散点图的 N 种实现并用尼日利亚音乐数据验证其发现分组的能力”。数据准备完整保留加载、过滤、相关性检查步骤并注明数据出处nigerian-songs.csv 来源于课程仓库若自行收集数据务必附来源。五图连作为每张图设立独立 Markdown 小节结构为“为什么画这张图 → 代码 → 图 → 观察结论”确保每张图都有明确的数据问题与之对应。结论汇总最后用一张对比表总结各方法的适用场景静态/交互、颜色映射、多面网格、回归叠加等并回答“哪种形态最有助于发现潜在簇”。仓库内参考实现可对照 solution/notebook.ipynb 的完整代码风格R 语言读者可参考 solution/R/lesson_14-R.ipynb其中使用ggplot2的geom_point()与geom_jitter()等做散点图并依赖tidyverse、tidymodels、plotly等包install.packages(c(tidyverse, tidymodels, DataExplorer, summarytools, plotly, paletteer, corrplot, patchwork))。为下一课铺垫在结语中说明“这些散点图显示三类流派在流行度-可舞性平面上高度重叠因此下一课将用 K-Means 探索这种重叠中的分组”与 2-K-Means 课程 自然衔接。总结围绕 ML-For-Beginners 聚类课程的散点图作业本文梳理出一条完整的实践路径从数据体检与过滤开始用热力图确认维度选择再用六种以上的散点图实现Matplotlib 原生、Seaborn scatterplot/relplot、Pandas 内建、Plotly 交互、lmplot 回归叠加探索数据分组最终产出符合“5 张记录良好的散点图”标准的作业 Notebook。散点图在此处的意义不仅在于“画图”更在于把数据几何形态转化为算法选型依据——这正是课程反复强调的“clustering as a technique is greatly aided by proper visualization”的落地方式。【免费下载链接】ML-For-Beginners12 weeks, 26 lessons, 52 quizzes, classic Machine Learning for all项目地址: https://gitcode.com/GitHub_Trending/ml/ML-For-Beginners创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考