一、聚类算法:从 "物以类聚" 到 k 均值
1. 聚类:无监督学习的 "分类术"
聚类是无监督学习的典型任务 ------ 当我们面对没有标签的数据时,如何根据数据的 "相似性" 将其自动分组?简单来说,聚类的核心思想就是 "相似的东西放在一起"。
但聚类并非易事,它的难点在于两点:一是如何评估聚类结果的好坏,二是如何调整参数以获得更优分组。
2. 距离度量:判断 "相似性" 的标尺
要判断数据是否相似,首先需要定义 "距离"。常用的距离度量有两种:
欧式距离 :最直观的距离度量,即多维空间中两点的直线距离。
二维空间公式:d=(x1−x2)2+(y1−y2)2
n 维空间中,它是各维度差值平方和的平方根,衡量的是两点的绝对距离。
曼哈顿距离 :也叫 "出租车距离",指两点在坐标轴上的绝对轴距总和。
平面上公式:d=∣x1−x2∣+∣y1−y2∣,类似出租车在城市网格中行驶的路径长度。
3. k 均值算法:聚类中的 "快手"
k 均值(k-means)是最经典的聚类算法之一,以简单快速著称。它的核心步骤如下:
初始化:随机选择 k 个样本作为初始聚类中心;
分配样本:计算每个样本到 k 个中心的距离,将样本分到最近的中心所在的组;
更新中心:计算每个组内所有样本的均值,作为新的聚类中心;
迭代收敛:重复步骤 2 和 3,直到聚类中心不再明显变化,输出最终分组。
4. 如何评估聚类效果?CH 指标来帮忙
聚类结果的好坏需要量化评估,CH 指标是常用工具:
它通过计算 "类内紧密度"(类中样本与中心的距离平方和)和 "类间分离度"(各类中心与总中心的距离平方和)来综合判断;
CH 值越大,说明类内越紧密、类间越分散,聚类效果越好。
5. k 均值的优缺点与实践
优点:简单易实现,计算速度快,适合处理常规规模的数据集;
缺点:需要提前确定 k 值(这往往是个难题),对初始聚类中心敏感,难以识别非凸形状的簇。
代码小示例 :
用sklearn
的make_blobs
生成聚类数据集,再用KMeans
聚类:
python运行
from sklearn.datasets import make_blobs
from sklearn.cluster import KMeans
# 生成数据集:100个样本,2个特征,3个簇
X, y = make_blobs(n_samples=100, n_features=2, centers=3, random_state=42)
# k均值聚类
kmeans = KMeans(n_clusters=3, random_state=42)
clusters = kmeans.fit_predict(X)
二、集成学习:"三个臭皮匠顶个诸葛亮"
1. 集成学习的核心思想
集成学习的灵感来自生活:面对复杂问题,多个专家的综合判断往往比单个专家更可靠。在机器学习中,它通过构建并组合多个 "个体学习器",实现比单个模型更好的性能。
2. 如何组合多个学习器?三大策略
简单平均法 :直接对多个学习器的预测结果取平均(适用于回归);加权平均法 :给性能更好的学习器分配更高权重,再计算加权平均;投票法:分类任务中,"少数服从多数",以多数学习器的预测结果作为最终输出。
3. 集成学习的三大流派
根据个体学习器的生成方式,集成学习可分为三类:Bagging:并行 "投票" 的代表
Bagging 的核心是 "并行训练多个分类器,再取平均 / 投票"。它通过bootstrap 抽样(有放回地随机采样)生成不同的训练集,让每个学习器在不同数据上训练,最后综合结果。
随机森林是 Bagging 的典型代表:
"随机" 体现在两点:数据采样随机、特征选择随机;
"森林" 指由多个决策树组成,最终通过多数投票(分类)或平均(回归)输出结果。
随机森林的优势:
能处理高维数据,无需手动特征选择;
可评估特征重要性,便于分析;
并行化训练,速度快。
代码中常用RandomForestClassifier
(分类)和RandomForestRegressor
(回归),关键参数包括树的数量n_estimators
、是否使用袋外数据评估oob_score
等。
Boosting:串行 "纠错" 的高手
Boosting 与 Bagging 不同,它的个体学习器串行生成,后一个学习器会 "纠正" 前一个的错误。
AdaBoost是 Boosting 的经典算法,步骤如下:
初始化所有样本的权重(相同);
训练第一个弱分类器,根据分类结果调整样本权重:分错的样本权重提高,分对的降低;
用新权重的样本集训练下一个弱分类器,重复步骤 2;
所有弱分类器训练完成后,按其性能(误差率越低,权重越高)组合成强分类器。
Stacking:"暴力组合" 的策略
Stacking 更 "简单粗暴"------ 直接组合多种不同类型的分类器(如 KNN、SVM、随机森林等),分两阶段训练:
第一阶段:用多个基础分类器对数据预测,得到各自结果;
第二阶段:用第一阶段的结果作为新特征,训练一个 "元分类器",输出最终预测。
三、总结:算法的选择与实践
k 均值聚类是无监督学习中处理 "分组" 问题的利器,适合快速挖掘数据的内在结构,但需注意 k 值的选择和数据分布;集成学习则通过组合多个模型提升性能,Bagging 的随机森林适合并行高效场景,Boosting 的 AdaBoost 擅长处理不平衡数据,Stacking 则适合需要 "强强联合" 的复杂任务。