如果把机器学习放在一个非常简单的框架里,它其实只解决一个问题——当数据越来越多时,我们如何从中提取稳定的规律?

传统编程依赖人写规则,机器学习则是用数据去“反推出规则”。而几乎所有机器学习问题,都可以落在两个大的方向上:有明确答案的学习没有明确答案的学习。

技术上,这两类叫做:监督学习和非监督学习。

第一篇,从这两个最基本的结构开始。

监督学习:当我们知道自己在找什么

现实世界里,大多数机器学习项目,其实都属于监督学习。原因很简单:大多数业务问题,都是“预测”。

比如这笔贷款会不会违约? 这个用户会不会流失? 这个商品能卖多少钱? 这条广告是否会被点击?

这些问题都有一个共同点:我们知道什么叫“对”。 历史数据里,已经存在结果。 

形式上可以写成: 

CODE
输入 X  →  输出 Y

我们给模型大量的 (X, Y) 样本,让它学习一个函数f,使得: f(X) ≈ Y

监督学习占据了当下绝大多数商业应用场景。

风控、推荐排序、广告投放、销量预测,本质都是如此。

在监督学习内部,又可以分成两类。

回归(监督学习):预测一个连续数值

当输出是一个连续数值时,就是回归问题。

举个例子,假设你在做一个二手车平台,你想根据车辆信息预测合理售价。输入可能包括:行驶里程、车龄、品牌型号、是否出险、城市;输出是:预计成交价格。

这是一个典型的回归问题,常见算法包括:线性回归、岭回归/Lasso和神经网络。

示例代码如下(看不懂没关系,后面文章会详细介绍):

CODE
import numpy as np
from sklearn.linear_model import LinearRegression
X = np.array([[5, 80000], [3, 40000], [8, 120000]])  # 车龄, 里程
y = np.array([8.5, 12.0, 5.0])  # 价格(万元)
model = LinearRegression()
model.fit(X, y)
prediction = model.predict([[4, 60000]])
print(prediction)

从数学角度看,模型是在寻找一条(或一组)函数曲线,使误差最小。

从业务角度看,回归给的是一个“可排序”的数值。

分类(监督学习):做出有限选择

如果输出不是一个连续值,而是有限个类别,那就是分类问题。

比如:是否违约(是 / 否)、是否高风险(低 / 中 / 高)、图片属于哪一类等。

再换个产品场景。

假设你在做一个内容社区,你希望在发布阶段就判断:这条内容是否可能违反社区规则? 输出是:

CODE
0 = 正常
1 = 需要审核

这就是二分类问题,示例代码如下(同样的,暂时看不懂没关系):

CODE
from sklearn.linear_model import LogisticRegression
import numpy as np
X = np.array([[100, 5], [10, 1], [200, 20]])  # 阅读数, 举报数
y = np.array([0, 0, 1])  # 是否违规
model = LogisticRegression()
model.fit(X, y)
prediction = model.predict([[150, 15]])
print(prediction)

分类与回归的区别在于:

  • 回归预测任意连续数值

  • 分类预测有限个类别

但它们都属于监督学习,因为我们有“标准答案”。

从监督学习到一个自然问题

当我们理解监督学习之后,会很自然地遇到一个问题:如果数据里根本没有“答案”,怎么办?

现实中并不是所有问题都已经有标签。

例如:用户到底可以分成几类?行为模式是否存在自然分群?哪些交易“看起来异常”?

这些问题并没有现成的 Y。这时,监督学习就无法直接使用。

于是,就进入第二种结构。

非监督学习:当我们不知道答案

非监督学习的数据形式只有:

CODE
输入 X

没有对应的输出Y。

算法的任务不再是预测结果,而是在数据内部寻找结构。

它在商业中的占比没有监督学习那么高,但在认知和分析层面非常重要。

聚类(非监督学习):自动发现分组

假设你在做一个在线教育产品。

你有用户行为数据:每周学习时长、完课率、是否购买会员、活跃时间段。

但你并不知道:哪些人属于“高自驱型”、哪些人是“冲动型购买”、哪些人是“试听型用户”。

你可以使用聚类算法,让数据自己分组。

CODE
from sklearn.cluster import KMeans
import numpy as np
X = np.array([
    [10, 0.9],
    [2, 0.2],
    [8, 0.8],
    [1, 0.1]
])  # 学习时长, 完课率
kmeans = KMeans(n_clusters=2)
kmeans.fit(X)
print(kmeans.labels_)

需要注意的是,算法不会告诉你“这组叫高价值用户”,它只告诉你“数据自然分成了两群”。

解释工作仍然需要人来完成。

异常检测(非监督学习):识别偏离

另一类常见问题是:找出“不像其他人的样本”。

例如:某个账号行为突然异常,某台设备震动模式异常,某笔交易偏离常规模式。这里的目标不是预测类别,而是判断“偏离程度”。

常见方法包括:基于概率分布建模、Isolation Forest、One-Class SVM。(看不懂没关系,以后会详细介绍到。)

本质上,是对“正常结构”建模,再识别离群点。

两种方式在现实中的分工

如果从应用角度看,监督学习解决“预测未来”,非监督学习解决“理解现在”。

在商业场景中,监督学习的直接价值更明显,因此应用比例更高。

但非监督学习往往出现在产品早期、市场分析、数据探索阶段,它帮助我们重新认识数据本身。

有时,两者还会结合:先用聚类做用户分层,再对每个层分别训练监督模型。

所以它们并不是对立关系,而是不同阶段的工具。


决定写这个系列,并不是为了把算法罗列一遍,而是希望把机器学习还原成一种可以被理解、被讨论的产品能力。

很多时候,我们谈模型、谈框架、谈效果,却很少回到问题本身:它究竟在解决什么结构性的难题?如果不能用清晰的语言说明问题形态,再复杂的模型也只是技术堆叠。

监督学习和非监督学习的差别,本质上是问题是否已经被定义清楚。

监督学习适用于目标明确、结果可衡量的场景,它回答的是“未来会怎样”;非监督学习则发生在目标尚未成形时,它试图回答“数据里到底有什么”。一个偏向优化,一个偏向认知;一个依赖既有标准,一个帮助建立标准。

真正有价值的,不是掌握多少算法,而是知道什么时候该预测,什么时候该探索。机器学习并不是替代判断,而是迫使我们更清晰地定义判断本身。

附录:本文涉及的专有名词中英文对照(标红为最核心)

A、基础概念

中文
英文
说明
机器学习
Machine Learning
从数据中学习规律的方法
模型
Model
学习到的函数或结构
训练
Training
用数据优化模型参数
推理
Inference
用训练好的模型做预测
特征
Feature
输入变量
标签
Label
输出结果(监督学习中)
样本
Sample
一条数据记录
数据集
Dataset
多条样本集合 

B、本文内容核心名词

中文
英文
说明
监督学习
Supervised Learning
有输入和标签
非监督学习
Unsupervised Learning
只有输入,没有标签
输入
Input
X
输出
Output
Y
映射关系
Mapping Function
X 到 Y 的函数
预测
Prediction
生成输出结果
结构发现
Structure Discovery
在数据中寻找模式

C、监督学习

中文
英文
说明
回归
Regression
预测连续数值
分类
Classification
预测类别
二分类
Binary Classification
两个类别
多分类
Multi-class Classification
多个类别
连续变量
Continuous Variable
可取任意数值
类别变量
Categorical Variable
离散类别

D、非监督学习

中文
英文
说明
聚类
Clustering
自动分组
异常检测
Anomaly Detection
识别异常样本
降维
Dimensionality Reduction
减少特征维度
离群点
Outlier
明显偏离数据结构的点