正则化
本课属于 Coddy Machine Learning 学习旅程的“监督学习”单元。第 34 课,共 58 课。
过拟合的线性模型会依赖较大的权重,试图贴合每一行带噪声的数据。岭回归会对较大的权重施加惩罚,而 alpha 决定惩罚的力度。
这里有 20 把二手吉他,使用 6 个缩放后的特征来预测价格:
只需与 LinearRegression 交换一次,其权重为 [-83. 116. 104. 27. 17. 15.]:
from sklearn.linear_model import Ridge
ridge = Ridge(alpha=100)
ridge.fit(X_train, y_train)
print(np.round(ridge.coef_))这会打印:
[-14. 18. 16. 10. 5. 8.]alpha 越大,权重越小,过拟合越少。alpha 太大时,模型会欠拟合。
挑战
中等一个度假网站根据 8 个特征预测小屋的每晚价格,使用的数据只有 16 间小屋。程序会读取 alpha;起始代码会拆分并缩放数据。
- 使用该
alpha拟合一个LinearRegression和一个Ridge。 - 打印每个模型的权重总大小:将权重取绝对值后相加并四舍五入。
- 按如下格式打印每个模型的测试 R 平方值(保留 3 位小数)以及表现更好的模型。
对于另一个地区和 5:
Total weight size: plain 90, ridge 53
Test R squared: plain -0.471, ridge 0.642
Better on new cottages: ridge亲手试试
import numpy as np
import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.linear_model import LinearRegression, Ridge
from sklearn.metrics import r2_score
alpha = float(input())
# 不要修改下面的代码行:包含 28 栋度假小屋、8 个特征,以及以欧元计价的每晚价格。
cottages = pd.read_csv("cottages.csv")
features = ["size_m2", "bedrooms", "lake_m", "age_years", "town_km", "sauna", "road_noise_db", "forest_m"]
X = cottages[features]
y = cottages["price"]
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.4, random_state=0)
scaler = StandardScaler()
X_train = scaler.fit_transform(X_train)
X_test = scaler.transform(X_test)
# 在下面编写你的代码。
这节课包含一个小测验。开始学习即可作答,并记录你的进度。
监督学习中的所有课
自己练习: Python 在线编译器