手机在兜里震了一下。掏出来,屏幕亮着——相册刚把十二张猫的照片收进了"宠物"那一栏。你没下任何指令,是它自己干的。
电脑其实看不见猫。它接到的只是一串像素的明暗数字:黑是 0,亮是 255。可训练过后,它就能从数字里认出一只从没见过的猫。
这,就是机器学习。
很多教程一上来就甩公式、甩术语,把人劝退。本文换一种讲法:用"认猫"这件事串起整条主线,从两种学习方式,一路讲到深度学习、聚类与降维。读完你应该能回答两个问题——机器到底在"学"什么,以及常见的那些算法,各自解决哪类问题。
一、两种学习方式:监督 vs 无监督
所有机器学习任务,几乎都能塞进这两个筐。
1. 监督学习(Supervised Learning)
你手里有一份数据集:既有输入特征(比如房子的面积、位置、建造年份),也有一个目标变量(比如真实成交价)。目标变量的真实结果是已知的,这种已知结果在分类问题里通常叫标签(label)。
训练时,算法拿这些"带答案的题"去练;练完,再让它预测新的、没见过的数据。
- 预测房价:特征是面积/位置/房龄,目标是连续的价格。
- 判断猫狗:特征是身高/体重/耳朵大小/眼睛颜色,目标是"猫"或"狗"这个标签。
类比:先告诉一个孩子,典型的猫长什么样、典型的狗长什么样,再递一张新图问他"这是哪种动物"。
2. 无监督学习(Unsupervised Learning)
这里没有提前给的正确答案。算法得自己从数据里淘出潜在的规律和结构。
类比:给一个完全不知道"猫""狗"是什么的孩子一堆动物图片,让他在没有任何提示的情况下,按相似程度自行分组。之后你再看这些堆,给它们起名。
典型例子:邮箱自动把你的来信分成几个尚未命名的类别,你事后查看,再决定哪堆是"账单"、哪堆是"订阅"。这种"机器自己决定怎么分"的类别,也叫簇(cluster)。
二、监督学习的两大分支:回归与分类
监督学习本身还能再劈成两叉,区别在于你要预测的东西是"数"还是"类"。
|
类型 |
预测目标 |
例子 |
|
回归(Regression) |
连续的数值 |
根据房屋特征预测房价 |
|
分类(Classification) |
离散的类别标签 |
判断邮件是"垃圾"还是"正常" |
分类也不一定只有两类。很多邮箱会把邮件进一步划成"主要""社交""推广""更新"等多个类别。
三、经典监督算法逐个看
1. 线性回归(Linear Regression)—— 算法之母
监督学习的目标,本质上是找到一个函数,把输入映射到输出。线性回归最简单的形式,就是找输入和输出之间的线性关系:试图画出一条最贴合数据的直线,让"真实值"和"预测值"之间的误差尽可能小。
更具体地说,是最小化误差平方和(最小二乘):
一个直觉例子:人的身高与鞋码大致成正比——鞋码每增加一个单位,预测身高平均高约 5 厘米(虚构示例,只为说明线性关系)。当然可以加更多特征(性别、年龄、足宽)让模型更准。
很多看似复杂的算法,包括后面的神经网络,都能看作这一基本思想的延伸。
2. 逻辑回归(Logistic Regression)—— 名字带"回归",干的是分类
回归预测连续值,逻辑回归却要预测类别。它先对输入做一次线性计算,再把结果丢进一个叫 sigmoid 的函数,压进 0 到 1 之间,当作"属于某类的概率":
例如:一名身高 180cm 的成年人,被预测为男性的概率是 80%。数据纯属虚构,但原理是真的。
3. KNN(k-近邻)—— 简单到有点不好意思
来一个新数据点,看离它最近的 k 个邻居:回归取邻居目标值的平均,分类听邻居里最多的类别。
它不假设数据服从某种固定方程(所以叫"非参数"),也不需要像线性回归那样拟合一组固定参数。直觉上非常好懂。
但有个绕不开的问题:k 取几?
- k 太小(如 1、2):训练集贴合得死死的,一遇新数据就栽——这叫过拟合(overfitting)。
- k 太大(如 1000):又钝得学不到规律——这叫欠拟合(underfitting)。
- 合适的 k 在中间,且高度依赖具体问题,常靠交叉验证来挑。
4. SVM(支持向量机)—— 画一条"最宽"的边界
SVM 的核心,是在不同类别之间找一条决策边界,并且让边界两侧的"间隔"尽可能大。间隔越大,泛化能力通常越好,对噪声和异常值也越不敏感。
- 位于间隔边缘的那些关键数据点,叫支持向量(support vectors)——预测时主要依赖它们。
- 当特征数远多于样本数(高维,"维数灾难"),边界不再是直线,而是超平面。
- 它的绝活是核技巧(kernel trick):不真的把所有特征两两组合算一遍,也能把数据映射到更复杂空间,画出弯弯曲曲的非线性分界。常用核:线性、多项式、RBF(径向基)、sigmoid。
5. 朴素贝叶斯(Naive Bayes)—— 拦垃圾邮件的老将
最常拿它做垃圾邮件过滤。思路很朴素也很有效:
- 用一批垃圾/非垃圾邮件训练,分别统计每个词在这两类里出现的次数;
- 新邮件来了,根据其中包含的词,算它更可能归哪边。
它大胆假设"在类别已定的前提下,各个词的出现彼此独立、互不影响"——这假设粗得离谱,所以叫"朴素"。但正因如此,它算得飞快,在文本分类上真管用。
6. 决策树与集成学习—— 一棵太嫩,一群就凶
决策树本质是一串"是或否"的问题,通过不断回答,把数据逐步划分成更纯的组(让每个叶子节点尽量只含同一类)。
单棵决策树太"嫩",把很多棵组合起来就强了,这叫集成学习(ensemble):
- Bagging(自助聚合):对原始数据有放回抽样,得到多个子集,分别训练多个模型,再投票。代表实现是随机森林(Random Forest)——大量决策树各自预测,多数投票定结果。它的"随机"来自两方面:每棵树用随机抽样的样本、每个节点随机考虑部分特征,从而降低过拟合风险。
- Boosting(提升法):按顺序训练,每一棵新树专门修正前一棵犯的错误,最终叠成一个强模型。代表算法有 AdaBoost、梯度提升、XGBoost。精度常高于随机森林,但更易过拟合,且必须串行训练,速度更慢。
四、神经网络与深度学习:让机器自己"长"出特征
要理解神经网络,先回到逻辑回归。假设要识别手写数字 0–9:特征是图像里各像素的亮度,目标是判断是几。
难点在于:不同的人写"1"并不完全相同,同一个人连写几次也略有差异,被点亮的像素不可能完全一致。但它们有共同特征——比如都含一条占主要位置的竖线,且一般不会有交叉线。
最早的办法是人工特征工程:人手工去量"有没有竖线、横线、圆圈",再喂给模型。神经网络(和 SVM 的核方法思路相通)的厉害之处在于:不需要你逐个定义中间特征,它能在训练中自动学习有用的表示。
做法是:在输入和输出之间加隐藏层(hidden layer)。
- 没有隐藏层 → 单层感知机,本质是个线性分类器。
- 加了隐藏层 → 输入不会直接出答案,而是先在中间经过一串转换,这些中间结果可以理解成"网络自己学出来的新特征",再由它们生成最终预测。
回到数字"1":当相邻的多个像素同时被点亮,网络可能逐渐学到一种"类似横线"的中间特征——这个特征从没被你显式命名,是训练过程中自己长出来的。
那如果隐藏层越来越多呢?层数增加,网络就能逐级组合出更复杂的特征——某些特征或许对应"图中是否有人脸"。这正是深度学习(Deep Learning)背后的基本思路。我们通常并不清楚每个隐藏特征到底代表什么,只知道它们能帮模型预测得更准。
五、回到无监督:聚类与降维
前面讲的都是监督学习。有些时候我们根本没有"要预测的目标",只想挖出数据里潜在的结构,这就轮到无监督学习。
1. 聚类(Clustering)—— 和分类不是一回事
|
分类(Classification) |
聚类(Clustering) | |
|
是否知道类别 |
提前知道要分几类,且有带标签的训练数据 |
完全不知道有几类、没有标签 |
|
做法 |
学一个映射函数 |
从数据结构里把未知的群"揪"出来 |
最著名的聚类算法是 k-均值(k-means),这里的 k 同样是超参数,表示你想找几个簇。步骤简单到一眼懂:
k 取几也是门靠经验和反复试验的学问。除了 k-means,还有不需要预先指定簇数的层次聚类、能发现任意形状簇的 DBSCAN 等。
2. 降维(Dimensionality Reduction)—— 少而精
降维就是减少特征数量,同时尽量保住重要信息。有些方法删掉重复/作用小的特征,有些则把多个原始特征重组成更少的新特征。
例子:为了识别飞机,真需要超高分辨率吗?降点像素照样认得出。降维既能帮我们理解特征间关系,也能作为监督学习前的预处理,让后续模型更快、更稳。
典型算法是 PCA(主成分分析):它找数据中"变化最猛"的方向当新特征,贡献小的就丢掉。比如鱼的体长和体高高度相关,留两个不如合成一个"形状"特征——变化最大的那条对角线叫第一主成分,贡献很小的第二主成分可以直接舍去。
六、核心观点:机器"学"的到底是什么
回到开头那张自动归类"宠物"的相册。屏幕背后,没有谁真的爱猫、懂猫。
所谓机器学习,不是让机器"理解"世界,而是让它在数字里找规律、自动长出能帮助预测的中间特征。监督学习靠标签指路,无监督学习自己淘结构;浅层模型(线性回归、KNN、朴素贝叶斯)靠人定特征,深层模型(神经网络)自己学特征。
规律是冰冷的,特征是训出来的。下次手机再震,弹出"宠物"那一栏——那只是一串数字,悄悄投了一票。
996



被折叠的 条评论
为什么被折叠?



