我大概是去年开始认真学 ML。之前只是"知道"但没真正理解。这篇是我自己入门时整理的知识脉络,从最简单的线性回归一路推到神经网络。
机器学习到底在学什么
用一句话讲:找一个函数,让它能根据输入给出我们想要的输出。
- 房价预测:输入面积、位置、房龄 → 输出价格
- 图片识别:输入像素 → 输出"猫"或"狗"
- 推荐系统:输入用户行为 → 输出可能感兴趣的商品
传统编程是我们写规则,ML 是让数据教会计算机规则。
线性回归:一切的起点
已知:x -> y
(1, 2), (2, 4), (3, 6) ...
我们要找:y = wx + b
w 是权重(斜率), b 是偏置(截距)
怎么找 w 和 b?先随便猜一个,然后看预测值和真实值的差距(损失),朝损失变小的方向调整 w 和 b。这个"调参"的过程就是训练。
损失函数通常用均方误差 MSE,优化方法用梯度下降:
损失 = 所有(预测值 - 真实值)² 的平均值
梯度 = 损失对 w 和 b 分别求偏导
w_new = w_old - 学习率 × 梯度
学习率不能太大(震荡不收敛)也不能太小(收敛慢得像蜗牛)。
从线性到非线性
线性回归的问题是——现实世界没那么多线性关系。房价和面积的关系不是简单的一条直线。
这时候引入激活函数——在线性变换后面加一个非线性函数:
没有激活: y = wx + b (永远线性)
有激活: y = ReLU(wx + b) (可以拟合曲线)
常用的 ReLU:max(0, x),负数变 0,正数不变。简单粗暴但有效。
多个神经元堆在一起就是神经网络:
输入层 隐藏层 输出层
x₁ ─────→ h₁ ─┐
\ / \ \────→ y
x₂ ──→ h₂ ──→ h₄
\ \ / /
x₃ ──→ h₃ ──→
每个箭头是一个权重 w,每个节点过一遍激活函数。训练就是让所有 w 一起调到最优。
实际跑一个例子
用 Python 的 scikit-learn,几行代码搞定:
from sklearn.linear_model import LinearRegression
from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(
X, y, test_size=0.2
)
model = LinearRegression()
model.fit(X_train, y_train)
score = model.score(X_test, y_test) # R² score
print(f"拟合度: {score:.3f}")
以上是 ML 的"Hello World"。后续还会学分类问题(逻辑回归、SVM)、集成方法(随机森林、XGBoost)、深度学习(CNN、RNN、Transformer)。
新手容易困惑的几个点
- 过拟合:训练集上准确率 99%,测试集上 60%——"背答案了,没学会"。解法:加正则化、dropout、更多数据
- 特征工程:原始数据往往不能直接喂模型,怎么处理缺失值、怎么归一化、怎么组合特征,这些比调参更重要
- 数据比算法重要:一个简单模型 + 大量高质量数据,往往优于复杂模型 + 脏数据
入门的路上,亲手跑代码比看理论重要十倍。先能跑起来,再看为什么。
评论