Menu
CoddyTech

解释方差

本课属于 Coddy Machine Learning 学习旅程的“无监督学习”单元。第 27 课,共 51 课。

2 个组件保留了多少信息?每个组件都占总方差的一部分,这就是它的解释方差比。对于全部 13 个葡萄酒组件:

13 个葡萄酒组件的柱形从 0.36 逐渐缩小到接近 0,橙色折线将它们累加起来,从 0.36 上升到 1。它在第 8 个组件处越过 90% 的虚线

不设置 n_components 时,PCA() 会保留所有主成分。np.cumsum 会计算累计总和:

pca = PCA().fit(scaled)
ratio = pca.explained_variance_ratio_
print(ratio[:3].round(3))
total = np.cumsum(ratio)
print((total < 0.9).sum() + 1)

这会打印出 [0.362 0.192 0.111] 和 8:总和仍低于 0.9,再加上那个超过 0.9 的值。所以,2D 葡萄酒图保留了 55%。

challenge icon

挑战

中等

巧克力实验室会测量每块巧克力的 9 项数据。要保留 90% 的分散程度,需要多少个成分?scaled 已准备好。

  1. 拟合 PCA(),并获取每个成分所占的比例。
  2. 打印达到 90% 所需的成分数量。
  3. 将各成分所占的比例绘制为柱形图,位置为 1、2、3……,标签为 each component;将累计总量绘制为折线,使用 marker="o",标签为 running total;在 0.9 处绘制一条灰色虚线,并添加图例。显示图表。

对于另一个实验室:

Components for 90%: 4

标题为“各成分保留的分散程度”的图表,共有 7 个成分:柱形从 0.42 开始逐渐变低,累计总量上升至 1,并在第 4 个成分处穿过 0.9 的虚线,图中带有图例

亲手试试

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from sklearn.preprocessing import StandardScaler
from sklearn.decomposition import PCA

# 巧克力制作实验室:150 块巧克力,每块有 9 项测量数据
bars = pd.read_csv("chocolate.csv")
scaled = StandardScaler().fit_transform(bars)

fig, ax = plt.subplots()
ax.set_title("Spread Kept by Each Component")
ax.set_xlabel("Component")
ax.set_ylabel("Share of spread")

# 在下方编写你的代码
quiz icon自我测试

这节课包含一个小测验。开始学习即可作答,并记录你的进度。

无监督学习中的所有课

自己练习: Python 在线编译器