Python是机器学习领域最常用的开发语言之一,而监督学习和无监督学习是机器学习的两大核心分支,理解两者的差异和用法是入门机器学习的关键。很多开发者在实际项目中会面临选择学习方式的难题,明确两者的核心逻辑就能快速做出判断。

监督学习的核心概念
监督学习的核心特点是训练数据包含特征和对应的标签,模型通过学习特征到标签的映射关系,实现对未知数据的预测。这类学习的目标通常是分类或者回归,训练过程相当于有老师指导,因此被称为监督学习。
常见监督学习算法
- 分类算法:逻辑回归、支持向量机、决策树、随机森林、K近邻
- 回归算法:线性回归、岭回归、Lasso回归、梯度提升回归树
监督学习代码示例
以下是使用scikit_learn实现逻辑回归分类的示例:
import numpy as np
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LogisticRegression
from sklearn.datasets import load_iris
from sklearn.metrics import accuracy_score
# 加载鸢尾花数据集,该数据集是经典的分类数据集,包含特征和标签
iris = load_iris()
X = iris.data # 特征数据
y = iris.target # 标签数据
# 划分训练集和测试集,测试集占比20%
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
# 初始化逻辑回归模型
model = LogisticRegression(max_iter=200)
# 使用训练集训练模型
model.fit(X_train, y_train)
# 使用测试集进行预测
y_pred = model.predict(X_test)
# 计算模型准确率
acc = accuracy_score(y_test, y_pred)
print(f"模型准确率为:{acc}")
无监督学习的核心概念
无监督学习的训练数据只有特征没有对应的标签,模型需要自主发现数据中的内在结构或者规律,常见的目标包括聚类、降维、异常检测等。这类学习没有预设的标签指导,完全依靠数据本身的特征进行分析。
常见无监督学习算法
- 聚类算法:K均值聚类、层次聚类、DBSCAN
- 降维算法:主成分分析PCA、t-SNE
- 异常检测:孤立森林、One-Class SVM
无监督学习代码示例
以下是使用scikit_learn实现K均值聚类的示例:
import numpy as np
from sklearn.cluster import KMeans
from sklearn.datasets import make_blobs
import matplotlib.pyplot as plt
# 生成模拟的聚类数据,共3个簇
X, y_true = make_blobs(n_samples=300, centers=3, cluster_std=0.6, random_state=42)
# 初始化K均值模型,指定聚类数为3
kmeans = KMeans(n_clusters=3, random_state=42)
# 训练模型,无监督学习不需要标签
kmeans.fit(X)
# 获取每个样本的聚类结果
y_pred = kmeans.predict(X)
# 输出聚类中心
print(f"聚类中心坐标为:n{kmeans.cluster_centers_}")
两者的核心差异对比
可以通过以下维度快速区分两种学习方式:
| 对比维度 | 监督学习 | 无监督学习 |
|---|---|---|
| 数据要求 | 需要特征和标签 | 只需要特征 |
| 学习目标 | 预测未知数据的标签 | 发现数据内在结构 |
| 常见任务 | 分类、回归 | 聚类、降维、异常检测 |
| 评估方式 | 有明确的准确率、均方误差等指标 | 评估指标相对主观,如轮廓系数 |
如何选择合适的学习方式
实际项目中可以根据业务需求和数据情况做选择:
- 如果业务目标是预测某个已知的结果,且已经有标注好的训练数据,优先选择监督学习。比如判断用户是否会流失、预测房价走势等场景。
- 如果业务目标是探索数据的分组情况、降低数据维度方便后续处理,或者没有标注数据,优先选择无监督学习。比如用户分群、图片特征压缩等场景。
- 如果标注数据很少,也可以考虑半监督学习,结合少量标注数据和大量无标注数据进行训练。
需要注意,两种方式并非完全对立,很多实际项目中会结合使用,比如先使用无监督学习做特征降维,再将处理后的特征输入监督学习模型进行预测。
Python机器学习监督学习无监督学习scikit_learn修改时间:2026-07-04 07:09:10