背景
前文中我们提到:
Scikit-Learn 库的算法主要有四类:分类、回归、聚类、降维:
- 回归:线性回归、决策树回归、SVM回归、KNN 回归;集成回归:随机森林、Adaboost、GradientBoosting、Bagging、ExtraTrees。
- 分类:线性分类、决策树、SVM、KNN,朴素贝叶斯;集成分类:随机森林、Adaboost、GradientBoosting、Bagging、ExtraTrees。
- 聚类:K均值(K-means)、层次聚类(Hierarchical clustering)、DBSCAN。
- 降维:LinearDiscriminantAnalysis、PCA。
本文将展开解释回归 、分类 、聚类 和降维的区别,并使用 Scikit-learn 中的自带数据集来说明各自的用途以及它们所达到的效果,可以帮助我们更直观地理解这几类机器学习任务。
1. 回归(Regression)
回归 任务用于预测连续变量。它的目标是根据输入特征,预测一个连续的数值结果。
波士顿房价数据集(已被替换为加利福尼亚房价数据集)
使用线性回归模型。
python
from sklearn.datasets import fetch_california_housing
from sklearn.linear_model import LinearRegression
from sklearn.model_selection import train_test_split
from sklearn.metrics import mean_squared_error
# 导入加州房价数据集
data = fetch_california_housing()
X = data.data
y = data.target
# 数据划分为训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)
# 训练线性回归模型
lr_model = LinearRegression()
lr_model.fit(X_train, y_train)
# 预测房价
y_pred = lr_model.predict(X_test)
# 评估回归模型(均方误差)
mse = mean_squared_error(y_test, y_pred)
print(f"均方误差: {mse:.2f}")
用途:
- 回归 主要用于预测连续型数值,例如预测房价、股票价格、温度等。
效果:
- 通过训练回归模型,可以预测目标值,并评估模型的准确度。在房价预测中,预测的房价是连续变量,模型输出具体的房价数值。我们通过均方误差等评价指标评估预测的准确性。
2. 分类(Classification)
分类 任务用于预测数据的类别标签。它的目标是将数据点分类到某个预定义的类中。
鸢尾花数据集
使用K近邻进行分类。
python
from sklearn.datasets import load_iris
from sklearn.neighbors import KNeighborsClassifier
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score
# 导入鸢尾花数据集
iris = load_iris()
X = iris.data
y = iris.target
# 划分数据集为训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)
# 训练K近邻分类模型
knn_model = KNeighborsClassifier(n_neighbors=3)
knn_model.fit(X_train, y_train)
# 预测鸢尾花类别
y_pred = knn_model.predict(X_test)
# 评估分类模型(准确率)
accuracy = accuracy_score(y_test, y_pred)
print(f"分类准确率: {accuracy:.2f}")
用途:
- 分类用于分类任务,如垃圾邮件检测、图像识别、疾病诊断等。
效果:
- 通过分类模型,能准确将数据点分配到预定的类别中。在鸢尾花分类中,模型可以识别不同种类的鸢尾花,并输出其对应的类别。通过准确率等指标评估分类的精确度。
3. 聚类(Clustering)
聚类 是无监督学习的一种,用于将数据点分组,使得同一组内的点尽可能相似,而不同组间的点差异尽可能大。聚类任务没有预定义的标签。
手写数字数据集(无标签)
使用KMeans进行聚类。
python
from sklearn.datasets import load_digits
from sklearn.cluster import KMeans
import matplotlib.pyplot as plt
# 导入手写数字数据集
digits = load_digits()
X = digits.data
# 使用KMeans进行聚类
kmeans = KMeans(n_clusters=10, random_state=42)
clusters = kmeans.fit_predict(X)
# 可视化部分聚类结果
plt.figure(figsize=(8, 8))
for i in range(10):
plt.subplot(2, 5, i + 1)
plt.imshow(digits.images[i], cmap='gray')
plt.title(f"Cluster: {clusters[i]}")
plt.show()
用途:
- 聚类常用于探索性数据分析,目标群体细分(如市场细分)、推荐系统(用户行为分组)等场景。
效果:
- 聚类算法通过发现数据中潜在的模式,将数据划分为多个簇。例如,在手写数字数据集中,虽然没有标签,但通过聚类算法可以自动将相似的数字图像聚为一类。每个聚类代表一类相似的手写数字。
4. 降维(Dimensionality Reduction)
降维 用于减少数据的特征维度,保留尽可能多的信息。通过降维,能使数据在低维空间中表现,同时减少噪声和计算复杂度。
手写数字数据集
通过主成分分析(PCA)进行降维。
python
from sklearn.decomposition import PCA
import matplotlib.pyplot as plt
# 导入手写数字数据集
digits = load_digits()
X = digits.data
# 使用PCA将数据降维到2维
pca = PCA(n_components=2)
X_pca = pca.fit_transform(X)
# 可视化降维后的数据
plt.scatter(X_pca[:, 0], X_pca[:, 1], c=digits.target, cmap='viridis', s=50)
plt.colorbar()
plt.title('PCA降维后的手写数字数据')
plt.show()
用途:
- 降维 常用于数据可视化、减少数据维度以提升算法效率、降低计算复杂度和去噪等场景。
效果:
- 通过降维,原来多维度的数据被压缩到低维空间(如2维),便于可视化和分析。在手写数字数据集中,降维后的数据能保留关键信息,并显示不同类别的分布情况。
总结
回归、分类、聚类、降维的区别
类型 | 任务目标 | 常见算法 | 用途 |
---|---|---|---|
回归 | 预测连续值 | 线性回归、决策树回归等 | 房价预测、天气预测等 |
分类 | 预测离散类别 | KNN、SVM、决策树等 | 图像识别、垃圾邮件检测、疾病诊断等 |
聚类 | 将数据点分组,无预定义标签 | K-Means、层次聚类等 | 市场细分、推荐系统、图像分割等 |
降维 | 减少数据特征维度 | PCA、t-SNE、LDA等 | 数据可视化、降噪、特征提取等 |
- 回归 用于预测数值结果,分类 用于预测类别标签,聚类 则无监督地将数据分组,降维用于在降低数据维度的同时保留重要信息。
- 这些任务在各自的应用场景中帮助解决不同问题,通过Scikit-learn自带数据集,可以直观地理解和实践这些概念。
资源
作者同步上传了 Jupyter 资源,可自行下载查看跑通代码运算结果:sklearn机器学习包应用 - 辨析回归/分类/聚类/降维作用效果