最小二乘拟合
本课属于 Coddy Machine Learning 学习旅程的“机器学习统计学”单元。第 36 课,共 64 课。
一直猜直线可能会没完没了。np.polyfit(x, y, 1)会一次性找出最佳直线:残差平方和最小的直线。下面是某场暴风雪的积雪深度:
hours = np.array([1, 2, 3, 5, 6])
depth = np.array([14, 22, 35, 52, 61])
slope, intercept = np.polyfit(hours, depth, 1)
print(np.round(slope, 2), np.round(intercept, 2))这会输出 9.5 4.5:每小时大约多积 9.5 cm 的雪,在第 0 小时积雪 4.5 cm。没有其他直线的误差更小:
1要求拟合一条直线,并且 x 排在前面。这就是线性回归,是你在第 3 单元训练的第一个模型。
挑战
中等一家无人机制造商想知道哪项测量最能预测飞行时间。drones.csv包含 15 次飞行的数据:payload_g、wind_kmh和flight_min。起始代码会加载数据,并定义ssr(x, y, slope, intercept)。
- 对于
columns中的每一列,拟合一条根据该列预测flight_min的直线。 - 按如下格式输出方程和 SSR:斜率保留 3 位小数,截距和 SSR 保留 2 位小数。
- 输出 SSR 较小的列。
换一架无人机时:
payload_g: flight_min = -0.001 * payload_g + 21.55, SSR 164.94
wind_kmh: flight_min = -0.481 * wind_kmh + 28.13, SSR 9.1
Better predictor: wind_kmh亲手试试
import numpy as np
import pandas as pd
# 返回直线 slope * x + intercept 的残差平方和(第 35 课)
def ssr(x, y, slope, intercept):
return ((y - (slope * x + intercept)) ** 2).sum()
drones = pd.read_csv("drones.csv")
columns = ["payload_g", "wind_kmh"]
# 在下方编写你的代码
这节课包含一个小测验。开始学习即可作答,并记录你的进度。
机器学习统计学中的所有课
自己练习: Python 在线编译器