投影
本课属于 Coddy Machine Learning 学习旅程的“无监督学习”单元。第 25 课,共 51 课。
投影会像影子一样,把每个点垂直投到一条直线上。这里是“特征太多”中的葡萄酒双胞胎,以它们的均值为中心,分别投影到两条直线上:
沿着云带分布时,阴影保留了大部分分布特征,因此每种葡萄酒用一个数字就几乎能表达原来两个数字所表达的信息。
方向是两个平方和为 1 的数字,例如 (0.6, 0.8)。影子是加权和:
centered = X - X.mean(axis=0)
shadow = centered[:, 0] * 0.6 + centered[:, 1] * 0.8
print(round(shadow.std(), 3))这会打印 1.136。最佳方向能保留最大的分散度。
挑战
中等林务员希望每个松果用一个数字表示,而不是用长度和宽度。两个方向中,哪个能保留更多松果的分散程度?程序会读取两个方向,每个方向包含两个数字。
- 编写
spread_along(direction):计算松果在该方向上的投影的标准差。 - 打印两个方向上的分散程度,保留 3 位小数。
- 打印要保留的方向。
对于其他松果:
Along [0.6, 0.8]: spread 2.104
Along [0.8, -0.6]: spread 0.412
Keep [0.6, 0.8]亲手试试
import numpy as np
import pandas as pd
# 一位林业工作者测量了 70 个松果的长度和宽度,单位为 cm
cones = pd.read_csv("cones.csv")
X = np.column_stack([cones["length_cm"], cones["width_cm"]])
first = [float(input()), float(input())]
second = [float(input()), float(input())]
# 在下方编写你的代码
这节课包含一个小测验。开始学习即可作答,并记录你的进度。
无监督学习中的所有课
自己练习: Python 在线编译器