线性回归:代码 (a) 行
Source: Dev.to
是时候编写你的第一个机器学习模型并预测房价了。
想要完整项目,请查看:
https://github.com/yotambelgoroski/ml_unchained-house_pricing
Step 1: It’s all about data
机器学习的核心是数据——没有数据就无法创建模型,没数据也就无法训练模型。
我们的数据集通常被划分为两部分:
- 训练数据 – 用于训练模型的数据
- 测试数据 – 模型训练完成后,我们从测试集取输入 (x),预测输出 (ŷ),再将预测值与真实值 (y) 对比。这可以告诉我们模型的表现如何。
在更高级的设置中,你可能还会看到验证集,用于在测试之前调优模型。
数据从哪里来?
答案取决于你的业务和使用场景。出于学习目的,Kaggle 是获取数据集和机器学习资源的好渠道。为了保持简单,我使用一个脚本生成合成数据。
训练需要多少数据?
没有固定的数量——模型越复杂,需要的数据越多。一个常用的经验法则是:
数据点数量应是特征(自变量)数量的 10×–20×
我们目前只有一个特征 (sqm),所以我用了 10 条记录来训练模型——这是保持简洁的最低要求。
测试需要多少数据?
一种简单的做法是按 80:20 的比例划分数据集:
- 80% 用于训练
- 20% 用于测试
Step 2: Training the model
现在我们已有数据集,是时候训练模型了。
训练包括三个步骤:
- 加载训练数据
- 基于这些数据在内存中训练模型
- 序列化——将训练好的模型保存到磁盘,以便后续直接使用而无需重新训练
import joblib
import pandas as pd
from pathlib import Path
from sklearn.linear_model import LinearRegression
FEATURE_COLS = ["sqm"]
TARGET_COL = "price"
MODEL_FILENAME = "house_price_model.joblib"
def load_training_data(train_path: Path) -> pd.DataFrame:
return pd.read_csv(train_path)
def train_model(df: pd.DataFrame) -> LinearRegression:
model = LinearRegression()
model.fit(df[FEATURE_COLS], df[TARGET_COL])
return model
def save_model(model: LinearRegression, dest_path: Path) -> None:
dest_path.parent.mkdir(parents=True, exist_ok=True)
joblib.dump(model, dest_path)
print(f"Model saved → {dest_path}")
def train(train_path: Path, model_dir: Path) -> LinearRegression:
df = load_training_data(train_path)
model = train_model(df)
save_model(model, model_dir / MODEL_FILENAME)
print(f"Model trained on {len(df)} samples.")
return model
就这样——我们的第一个模型完成了!
Our Dependencies
- Pandas – 用于处理表格数据的库。其核心结构 DataFrame 让我们能够轻松访问和操作数据。
- scikit-learn – Python 的机器学习库。
LinearRegression是其中的模型之一,用于学习输入特征与目标值之间的最佳线性关系。 - Joblib – 用于序列化的实用库。它让我们能够将训练好的模型保存到磁盘,并在以后加载进行推理。
恭喜你——已经创建了你的第一个模型!不过,它还未达到生产就绪的水平。接下来,我们将使用测试数据评估模型的真实表现。