Menu
CoddyTech

最小二乘拟合

本课属于 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。没有其他直线的误差更小:

积雪深度与小时数的关系图,有 5 个点和 3 条直线:两条虚线猜测的残差平方和分别为 159 和 18,粗实线 polyfit 的残差平方和为 6.5

1要求拟合一条直线,并且 x 排在前面。这就是线性回归,是你在第 3 单元训练的第一个模型。

challenge icon

挑战

中等

一家无人机制造商想知道哪项测量最能预测飞行时间。drones.csv包含 15 次飞行的数据:payload_g、wind_kmh和flight_min。起始代码会加载数据,并定义ssr(x, y, slope, intercept)。

  1. 对于columns中的每一列,拟合一条根据该列预测flight_min的直线。
  2. 按如下格式输出方程和 SSR:斜率保留 3 位小数,截距和 SSR 保留 2 位小数。
  3. 输出 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"]

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

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

机器学习统计学中的所有课

自己练习: Python 在线编译器