当你开始学习机器学习时,第一个岔路口就是:你在做什么类型的学习?答案会改变一切——您可用的算法、您需要的数据以及您期望模型做什么。
两个基本类别是监督学习和无监督学习。理解其中的差异不仅仅是学术上的——这是您在处理任何新的机器学习问题时要做的第一个决定。
监督学习和无监督学习之间最根本的区别是你的训练数据是否包含标签。
标记数据意味着数据集中的每个示例都带有“正确答案” - 您希望模型预测或分类的结果:
# Labelled dataset (supervised)
email_text | label
------------------------------------|-------
"Congratulations! You've won £1000" | spam
"Meeting rescheduled to Thursday" | not_spam
"URGENT: Your account is suspended" | spam
未标记的数据意味着您有输入,但没有预定义的答案 - 只有原始观察结果:
# Unlabelled dataset (unsupervised)
customer_id | age | annual_spend | frequency | location
------------|-----|--------------|-----------|----------
C001 | 34 | £2,400 | 12/year | London
C002 | 52 | £18,000 | 52/year | Manchester
C003 | 28 | £650 | 3/year | London
生成标记数据既昂贵又耗时——它需要人类手动注释示例。无标签数据非常丰富(世界上大部分数据都没有标签)。这种实际约束决定了对于给定问题可以采用哪种方法。
在监督学习中,模型通过研究标记的示例来学习从输入到输出的映射。 “监督者”是标记数据本身 - 每个训练示例都告诉模型正确的输出应该是什么。
### 分类
当输出是离散类别时,这是一个分类问题。
示例:
常用算法:
from sklearn.ensemble import RandomForestClassifier
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)
classifier = RandomForestClassifier(n_estimators=100)
classifier.fit(X_train, y_train)
accuracy = classifier.score(X_test, y_test)
print(f"Test accuracy: {accuracy:.2%}")
当输出是连续数时,这是一个回归问题。
示例:
登录 参与讨论
常用算法:
from sklearn.ensemble import GradientBoostingRegressor
model = GradientBoostingRegressor(n_estimators=200, learning_rate=0.1)
model.fit(X_train, y_train)
predictions = model.predict(X_test)
# predictions = [245000, 182000, 412000, ...] (house prices in £)
梯度提升模型(XGBoost、LightGBM、CatBoost)赢得的 Kaggle 机器学习竞赛比任何其他算法类别都多。它们仍然是行业中结构化/表格数据的首选。
在无监督学习中,模型探索数据的结构没有任何标签。它不是学习到已知输出的映射,而是自己发现隐藏的模式、分组或表示。
聚类算法将相似的数据点分组在一起,而无需告知分组应该是什么。
示例:
常用算法:
from sklearn.cluster import KMeans
# We don't know how many customer segments exist — let's try 4
kmeans = KMeans(n_clusters=4, random_state=42)
kmeans.fit(customer_data_scaled)
# Each customer now has a cluster label (0, 1, 2, or 3)
df['segment'] = kmeans.labels_
# Analyse what each segment looks like
print(df.groupby('segment')[['age', 'annual_spend', 'frequency']].mean())
将高维数据压缩为更少的维度,同时保留尽可能多的结构。用于可视化、预处理和删除冗余信息。
常用算法:
from sklearn.decomposition import PCA
import matplotlib.pyplot as plt
# Reduce 50-dimensional data to 2D for visualisation
pca = PCA(n_components=2)
X_2d = pca.fit_transform(X_scaled)
plt.scatter(X_2d[:, 0], X_2d[:, 1], c=cluster_labels, cmap='tab10')
plt.title('Customer segments visualised in 2D')
plt.show()
一家零售商拥有 1000 万客户的交易数据,但没有预定义的客户群。为什么无监督聚类在这里有用?发现的细分可以为哪些业务决策提供信息?
监督/无监督的区别是基础性的,但机器学习领域比这两个类别更丰富。
使用少量标记数据与大量未标记数据相结合。这是非常实用的,因为标签很昂贵。
示例:您有 1,000 个标记的医疗扫描和 100,000 个未标记的扫描。半监督学习可让您从未标记的数据中受益,从而提高性能,超出仅 1,000 个标签所能达到的效果。
一种特殊情况,标签是根据数据本身自动生成的。这就是现代大型语言模型的预训练方式。
示例:取一个句子,隐藏一些单词,然后训练模型来预测丢失的单词。 “标签”(正确的单词)是免费的——它们直接来自文本本身。这就是 BERT 的训练方式。
Input: "The cat sat on the [MASK]."
Target: "mat"
自我监督学习具有变革性,因为它允许在无需人工注释的情况下对互联网规模的数据进行训练。
代理通过在环境中采取行动并接收奖励或惩罚来学习。没有标签——只有结果的反馈信号。
示例:下棋、训练机器人行走、优化数据中心的冷却系统。我们在自己的课程中深入讨论了这一点。
这是一个实用的决策框架:
Do you have labelled data?
├── YES → Supervised Learning
│ ├── Output is a category? → Classification
│ │ (spam/not spam, dog/cat, fraud/legit)
│ └── Output is a number? → Regression
│ (price, temperature, sales volume)
└── NO → Unsupervised Learning
├── Want to find groups? → Clustering
│ (customer segments, document topics)
├── Want to compress data? → Dimensionality Reduction
│ (visualisation, pre-processing)
└── Want to detect anomalies? → Anomaly Detection
(fraud, equipment failure)
Partially labelled? → Semi-Supervised Learning
Learning from interaction? → Reinforcement Learning
您有 50,000 条没有星级或情感标签的产品评论。您希望自动按主题对它们进行分组。您应该使用哪种学习方法?