CHAPTER 01 / 37
机器学习在做什么?
当我们谈机器学习时,真正需要想清楚的不是算法有多复杂,而是:你是在预测一个已知目标,还是在寻找一个尚未被定义的结构。
如果把机器学习放在一个非常简单的框架里,它其实只解决一个问题——当数据越来越多时,我们如何从中提取稳定的规律?
传统编程依赖人写规则,机器学习则是用数据去“反推出规则”。而几乎所有机器学习问题,都可以落在两个大的方向上:有明确答案的学习没有明确答案的学习。
技术上,这两类叫做:监督学习和非监督学习。
第一篇,从这两个最基本的结构开始。
监督学习:当我们知道自己在找什么
现实世界里,大多数机器学习项目,其实都属于监督学习。原因很简单:大多数业务问题,都是“预测”。
比如这笔贷款会不会违约? 这个用户会不会流失? 这个商品能卖多少钱? 这条广告是否会被点击?
这些问题都有一个共同点:我们知道什么叫“对”。 历史数据里,已经存在结果。
形式上可以写成:
输入 X → 输出 Y我们给模型大量的 (X, Y) 样本,让它学习一个函数f,使得: f(X) ≈ Y
监督学习占据了当下绝大多数商业应用场景。
风控、推荐排序、广告投放、销量预测,本质都是如此。
在监督学习内部,又可以分成两类。
回归(监督学习):预测一个连续数值
当输出是一个连续数值时,就是回归问题。
举个例子,假设你在做一个二手车平台,你想根据车辆信息预测合理售价。输入可能包括:行驶里程、车龄、品牌型号、是否出险、城市;输出是:预计成交价格。
这是一个典型的回归问题,常见算法包括:线性回归、岭回归/Lasso和神经网络。
示例代码如下(看不懂没关系,后面文章会详细介绍):
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)从数学角度看,模型是在寻找一条(或一组)函数曲线,使误差最小。
从业务角度看,回归给的是一个“可排序”的数值。
分类(监督学习):做出有限选择
如果输出不是一个连续值,而是有限个类别,那就是分类问题。
比如:是否违约(是 / 否)、是否高风险(低 / 中 / 高)、图片属于哪一类等。
再换个产品场景。
假设你在做一个内容社区,你希望在发布阶段就判断:这条内容是否可能违反社区规则? 输出是:
0 = 正常
1 = 需要审核这就是二分类问题,示例代码如下(同样的,暂时看不懂没关系):
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。这时,监督学习就无法直接使用。
于是,就进入第二种结构。
非监督学习:当我们不知道答案
非监督学习的数据形式只有:
输入 X没有对应的输出Y。
算法的任务不再是预测结果,而是在数据内部寻找结构。
它在商业中的占比没有监督学习那么高,但在认知和分析层面非常重要。
聚类(非监督学习):自动发现分组
假设你在做一个在线教育产品。
你有用户行为数据:每周学习时长、完课率、是否购买会员、活跃时间段。
但你并不知道:哪些人属于“高自驱型”、哪些人是“冲动型购买”、哪些人是“试听型用户”。
你可以使用聚类算法,让数据自己分组。
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、基础概念
B、本文内容核心名词
C、监督学习
D、非监督学习