机器学习是什么
机器学习从历史数据中学习参数或规则,再对未见数据产生可评价预测。
学习前需要掌握
背景与问题
手写规则适合条件清楚、可以穷举的任务;当输入变化很多,却能收集历史输入与结果时,可以考虑让算法从数据中估计规律。是否采用机器学习,仍需先确认标签可靠、未来输入可获得、错误结果能够检查。
例如预测明天的订单量,应该先规定预测时点、输入可用时间和评价误差,而不是先决定使用某种复杂模型。没有明确任务,训练过程即使正常结束,也很难判断模型是否有用。
概念定义
机器学习使用数据和学习目标确定模型中的可学习部分,再把得到的映射应用于新输入。这里“学习”是参数或结构随训练数据改变,不表示系统获得了与人相同的理解。
训练算法、已拟合模型和完整业务系统是三个层次:算法负责寻找参数,模型负责计算预测,系统还要负责数据、校验、失败处理和监控。
直观理解
可以把模型看作一套从过去样本中估计出来的预测规则。一个房价模型可能学习面积与价格的统计关联,但它不能因为会预测,就证明“扩大面积必然导致某个价格变化”。
构造案例:预测订单量之前先定义任务
假设每天晚上 8 点预测次日订单量。可以使用今天 8 点前已有的浏览量与历史订单,不能使用次日实际成交总额。若把后者放进特征,验证成绩可能非常好,却无法真实上线。
再设一个简单基线:“明天等于上周同一天”。复杂模型只有在相同时间划分和误差指标下带来可靠改进,才有证据说明它值得增加系统成本。
核心原理
任务应同时写清输入、输出与评价条件。分类输出类别或类别概率,回归输出连续数值;不同任务对应不同损失与指标,不能只把 score 的数值当成通用质量分。
拟合阶段可以接触训练标签;预测新样本时不能读取其真实答案,也不能让验证或测试数据提前参与有状态预处理。输入管线和模型应共同遵守这条边界。
泛化是模型在未参与相应训练的数据上的表现。训练成绩很高可能来自记忆、泄漏或容易的数据,必须通过符合实际使用的独立评价来区分。
数据分布和任务定义可能变化。上线后的错误、未知类别和标签延迟,需要反馈到数据与评价协议;重新训练不是修复所有问题的唯一办法。
数学表达
核心表达
任务必须明确输入、输出、标签定义、评价指标和真实使用条件;只有未见数据上的表现才能反映泛化。
变量含义
变量定义与本页概念定义一致,代码中的同名变量保持相同语义。
计算步骤
- 1定义业务问题与错误成本
- 2确认数据和标签可用
- 3划分数据并建立基线
- 4训练、验证、测试
代码对应位置
示例 1完整走一遍拟合、预测与独立比较:用显式构造的线性数据区分训练输入与未参与拟合的检查点。
计算与实现步骤
- 定义业务问题与错误成本
- 确认数据和标签可用
- 划分数据并建立基线
- 训练、验证、测试
- 保存、部署和监控
代码实现
示例 1
完整走一遍拟合、预测与独立比较
example_01.py用途:用显式构造的线性数据区分训练输入与未参与拟合的检查点。
from sklearn.linear_model import LinearRegression
from sklearn.metrics import mean_squared_error
X_train, y_train = [[0.], [1.], [2.]], [1., 3., 5.]
X_test, y_test = [[3.], [4.]], [7., 9.]
model = LinearRegression().fit(X_train, y_train)
prediction = model.predict(X_test)
print("prediction:", prediction.round(4).tolist())
print(f"test_mse={mean_squared_error(y_test, prediction):.4f}")代码解析
解析始终位于完整代码下方,并按实际代码段逐项对应。
输入数据与任务
用显式构造的线性数据区分训练输入与未参与拟合的检查点。
X_train- 训练特征,只允许它参与预处理器和模型的 fit。
X_test- 测试特征,只用于最终 transform、predict 和评价。
y_train- 与 X_train 对齐的训练目标。
y_test- 与 X_test 对齐的测试目标。
model- 组合预处理和估计器的模型对象。
Step 1 · 1–8 行
导入当前步骤需要的数值计算、预处理、模型或评价工具。依赖集中写在代码开头,便于复现。
from sklearn.linear_model import LinearRegression
from sklearn.metrics import mean_squared_error
X_train, y_train = [[0.], [1.], [2.]], [1., 3., 5.]
X_test, y_test = [[3.], [4.]], [7., 9.]
model = LinearRegression().fit(X_train, y_train)
prediction = model.predict(X_test)
print("prediction:", prediction.round(4).tolist())
print(f"test_mse={mean_squared_error(y_test, prediction):.4f}")代码与数学原理
减去训练均值并除以训练标准差,对应代码中的 mean/std 或 StandardScaler。
预期输出或运行结果
prediction: [7.0, 9.0] test_mse=0.0000
常见错误 · 5 条
- 不要在测试集上调用 fit 或 fit_transform;测试集只能复用训练参数。
- 把拟合当真正理解
- 无法评价结果仍强行建模
- 只看训练分数
- 确认样本轴、特征轴以及 X 与 y 的第一维完全对应。
实际应用
- 分类
- 回归
- 聚类与异常检测
常见错误
- 把拟合当真正理解
- 无法评价结果仍强行建模
- 只看训练分数