一、K-means算法
K-means算法是一种常用的聚类算法,旨在将数据集划分成 k 个簇,使得每个簇中的数据点尽可能相似,而不同簇之间的数据点差异尽可能大。该算法是基于迭代的方法来寻找最优的簇中心,并通过不断调整簇的划分来最小化簇内的平方误差。
K-means算法步骤
初始化:
- 选择一个整数 k 作为簇的数量。
- 随机选择 k 个点作为初始簇中心,或使用其他启发式方法选择初始中心点。
分配数据点到簇:
- 对于每个数据点,计算它到每个簇中心的距离。
- 将每个数据点分配到距离它最近的簇。
更新簇中心:重新计算每个簇的中心点。新的簇中心是该簇中所有数据点的平均值。
迭代:重复步骤2和3,直到簇中心不再发生变化,或达到预设的迭代次数。
示例
假设我们有如下数据点,并希望将它们分成 k=3 个簇:
数据点 | x坐标 | y坐标 |
---|---|---|
1 | 1 | 2 |
2 | 2 | 1 |
3 | 4 | 3 |
4 | 5 | 4 |
5 | 8 | 7 |
步骤1:初始化
随机选择三个点作为初始簇中心,例如(1,2)、(4,3)和(8,7)。
步骤2:分配数据点到簇
计算每个数据点到三个中心点的距离,并将数据点分配到最近的中心点。例如,点(1,2)最接近(1,2),点(5,4)最接近(4,3),点(8,7)最接近(8,7)。
步骤3:更新簇中心
计算每个簇的新中心点。例如,新的簇中心可能变为(1.5,1.5)、(4.5,3.5)和(8,7)。【簇中所有数据点的平均值:(1,2)和(2,1),(4,3)和(5,4),(8,7)】
步骤4:迭代
重复步骤2和3,直到簇中心不再发生变化。
K-means改进算法
为了克服K-means算法的缺点,研究者提出了多种改进方法,例如:
- K-means++:改进初始簇中心的选择方法,增加中心点之间的距离,减少陷入局部最优解的可能性。
- Mini-batch K-means:使用小批量的数据点进行簇中心的更新,提高算法的计算效率,适用于大规模数据集。
- DBSCAN:一种基于密度的聚类算法,可以发现任意形状的簇,对噪声和异常值有更好的处理能力。
二、PCA(主成分分析)
PCA(Principal Component Analysis)是一种用于降维的统计技术。它的目标是通过减少变量的维度来去除数据中的冗余部分,同时保留尽可能多的原始数据变异信息。这在数据可视化、特征提取、降噪等方面非常有用。
PCA的基本思想
PCA通过找到数据中方差最大的方向,将数据投影到这些方向上,形成新的坐标系,这些方向被称为“主成分”。每个主成分都是原始变量的线性组合,并且各主成分之间是相互正交的(即相互独立)。
- 第一主成分:反映数据中最大方差的方向,即在这个方向上的数据分布最广。
- 第二主成分:反映数据中剩余方差最大的方向,并且与第一主成分正交。
- 第三主成分:反映数据中剩余方差次大的方向,并且与前两个主成分正交。
- 依此类推...
通过这种方式,PCA可以将高维数据映射到低维空间中,同时尽可能地保留原始数据的主要特征。
PCA的步骤
数据标准化:首先,将数据进行标准化处理,使得每个变量具有相同的尺度。通常采用均值为0、方差为1的标准化方法。
计算协方差矩阵:计算标准化数据的协方差矩阵,以衡量变量之间的相关性。
计算特征值和特征向量:对协方差矩阵进行特征值分解,得到特征值和特征向量。特征值表示主成分所解释的方差,特征向量表示主成分的方向。
选择主成分:根据特征值的大小,选择前k个最大的特征值对应的特征向量,作为主要的主成分。
转换数据:将原始数据投影到选定的主成分上,得到降维后的数据。
三、Bagging(Bootstrap Aggregating)
概念: Bagging是一种通过减少模型的方差来提升模型稳定性和准确性的集成学习方法。它的基本思想是通过多次随机采样生成多个数据子集(Bootstrap是有放回采样),并在每个子集上训练一个模型,然后将这些模型的预测结果进行平均(回归问题)或投票(分类问题)来得到最终结果。【随机森林!】
主要步骤:
- 数据子集生成:从原始训练集通过自助采样(Bootstrap Sampling)生成多个子集。每个子集的大小与原始训练集相同,但可能包含重复的样本。
- 模型训练:在每个子集上训练一个模型(如决策树)。这些模型通常是相同的基学习器,但由于训练数据不同,训练出的模型也会有所不同。
- 结果整合:
- 对于回归问题,将所有模型的预测结果进行平均。
- 对于分类问题,通过投票机制确定最终分类结果,选择得票最多的类别作为最终预测结果。
优势:
- 减少模型的方差,从而提高模型的稳定性和泛化能力。
- 适合用于高方差的基学习器(如决策树)。
- 对噪声的敏感性弱于Boosting,因为它经过双重随机采样,同时并行训练模型,对噪声不太容易过度捕捉造成过拟合。
缺点:
- 每个模型是独立训练的,或者说,Bagging是并行集成训练的模型,将多个弱分类器转变为唯一强分类器,没有关注到之前模型的错误,它允许众多模型“百花齐放”地表达,无论结果是否优秀都不会继续迭代改变,可能对某些难分类的样本效果不佳。
四、Boosting
概念: Boosting是一种通过减少模型的偏差来提升模型性能的集成学习方法。它的基本思想是通过逐步调整样本权重,使后续模型更关注前一轮中错误分类的样本,从而逐步提升整体模型的准确性。
主要步骤:
初始化权重:为每个样本分配相等的初始权重。
模型训练:
- 训练第一个基学习器,然后根据其分类结果调整样本的权重。错误分类的样本权重增加,正确分类的样本权重减少。
- 使用调整后的样本权重训练下一个基学习器,使其更关注前一个基学习器错误分类的样本。
- 重复上述步骤,逐步训练多个基学习器,每个基学习器都在前一个基学习器的基础上进行改进。
结果整合:
- 每个基学习器在最终预测中都有一定的权重,通常错误率越低的基学习器权重越大。
- 对于回归问题,通过加权平均得到最终预测结果。
- 对于分类问题,通过加权投票机制确定最终分类结果。
优势:
- 逐步减少模型的偏差,提高模型的预测准确性。
- 对于某些难分类的样本,Boosting能够更有效地进行处理和改进。
缺点:
- 由于关注于难分类的样本,Boosting可能对噪声敏感,导致过拟合。
- 训练过程是串行的,因此相比于Bagging,Boosting训练时间更长。可想而知。Bagging对于算力的要求要强于Boosting才能支持多决策树并行训练。
Bagging与Boosting比较
- Bagging:关注于减少方差,通过并行训练多个模型并整合其结果,适合高方差基学习器。
- Boosting:关注于减少偏差,通过逐步调整样本权重和串行训练模型,适合高偏差基学习器。