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