当前位置: 首页 > news >正文

机器学习两大核心算法:集成学习与 K-Means 聚类详解

在机器学习的世界里,算法就像解决问题的不同工具箱—— 集成学习(重点是集成算法)和 K-Means 聚类。一个擅长 解决分类与回归问题,一个能在无标签数据中 找到数据分组

一、集成算法:多 联手,让预测更靠谱

咱们先从集成算法说起。你有没有想过,要是遇到一个复杂问题,只问一个专家可能会有局限,但把多个专家的意见综合起来,结果往往更准确?集成算法的核心思路就是这样 ——构建多个 “个体学习器”,再通过特定策略把它们的结果结合起来,最终得到比单个学习器更优的预测效果,这就是 “集成学习” 的本质。

1. 集成算法的基础:怎么 结合个体学习器

多个学习器的结果不能随便拼,得有章法。常见的结合策略有三种:

  • 简单平均法:适合回归任务,比如 3 个学习器对某房价的预测结果是 100 万、105 万、98 万,取平均值 101 万作为最终结果,简单直接。
  • 加权平均法:比简单平均更灵活,给 “水平高” 的学习器更高权重。比如上面 3 个学习器中,中间那个过往预测更准,给它 0.5 的权重,另外两个各给 0.25,最终结果就是 100×0.25 + 105×0.5 + 98×0.25 = 102 万,更贴合靠谱学习器的判断。
  • 投票法:适合分类任务,就是 “少数服从多数”。比如判断一张图片是不是猫,5 个学习器里 3 个说 “是”,2 个说 “不是”,最终就判定为 “是”。不过要注意,要是学习器们意见特别不一致(比如 2:2:1),或者大多数学器都错了,集成结果也可能 “翻车”,这时候就得优化个体学习器的多样性了。

2. 集成算法的三大流派:Bagging、Boosting、Stacking

根据个体学习器的生成方式,集成算法主要分三类,每类的 “协作模式” 完全不同。

Bagging:并行 “抱团”,随机森林是代表

Bagging 的全称是 “bootstrap aggregation”,简单说就是 “并行训练一堆分类器,最后取平均 / 投票”。它的核心是 “随机采样”—— 从原始数据中多次 “有放回” 地抽样本(比如抽 1000 次,每次抽 80% 的数据),每个样本集训练一个个体学习器,最后所有学习器一起 “投票 / 平均”。

随机森林,就是 Bagging 的 “明星产品”。它的 “随机” 体现在两点:一是数据采样随机(和 Bagging 一样),二是特征选择随机(每个决策树训练时,只从所有特征里随机选一部分来分裂)。这样一来,每个决策树都有自己的 “个性”,不会都犯同样的错,最后通过 “多数投票” 得到结果。

随机森林的优点特别突出:

  • 能处理高维度数据(比如有上百个特征),不用手动做特征选择;
  • 训练完能告诉你哪些特征重要(比如分析用户购买行为时,能看出 “价格” 比 “品牌” 影响更大);
  • 天生适合并行计算,训练速度快;
  • 还能把决策树画出来,方便理解数据逻辑。

在 Python 的 sklearn 里,用RandomForestClassifier()(分类)和RandomForestRegressor()(回归)就能调用它,关键参数有n_estimators(树的数量,默认 100,太少容易欠拟合,太多浪费资源)、bootstrap(是否有放回采样,默认 True,这是 Bagging 的核心)等。

比如用红酒数据集做分类:加载load_wine()数据后,用随机森林训练,就能根据酒精含量、苹果酸等 13 个特征,把红酒分成 3 个品类,效果比单个决策树好不少。

  1. 一开始,所有样本权重一样(比如每个样本权重都是 1 / 总样本数);
  2. 训练第一个弱学习器,要是某个样本分错了,就给它 “加权重”(相当于 “这个题你错了,下次重点看”);
  3. 用调整后的权重重新训练第二个弱学习器,再重复 “错了就加权” 的过程;
  4. 最后,把所有弱学习器整合,表现好的(误差率低的)权重高,表现差的权重低,一起组成 “强学习器”。
Stacking:所有模型一起上

Stacking 是最 “豪放” 的流派 —— 不管是 KNN、SVM 还是随机森林,只要是模型,都能 “堆” 进来。它分两步走:

  1. 第一阶段:用所有基础模型(比如 KNN、SVM、随机森林)分别对数据做预测,得到一堆 “中间结果”;
  2. 第二阶段:把这些 “中间结果” 当成新的特征,训练一个 “元学习器”(比如逻辑回归),最后由元学习器给出最终预测。

比如做房价预测:先用随机森林、线性回归、SVM 分别预测房价,得到 3 个预测值,再把这 3 个值作为新特征,用逻辑回归训练,最终输出更精准的房价。Stacking 的优点是能利用不同模型的优势,但缺点是复杂,容易过拟合,一般数据量特别大时才用。

二、K-Means 聚类:无标签数据的 “自动分组术”

说完了需要标签的 “监督学习”(集成算法大多用于监督学习),再来说 “无监督学习” 里的经典 ——K-Means 聚类。它的核心是:把相似的数据分到一组,让组内数据尽量像,组间数据尽量不像

1. 聚类的基础:怎么判断 “相似”?距离度量

要分组,首先得定义 “两个数据像不像”,这就需要 “距离度量”,常用的有两种:

  • 欧式距离:最直观的 “直线距离”,比如二维平面上点(x1,y1)和(x2,y2)的距离,就是√[(x1-x2)²+(y1-y2)²]。三维、n 维空间也一样,就是把每个维度的差异平方和开根号。
  • 曼哈顿距离:可以理解为 “出租车距离”—— 只能走直角,不能走斜线。比如同样两个点,曼哈顿距离是 | x1-x2| + |y1-y2|。比如从(0,0)到(2,3),欧式距离是√(4+9)=√13≈3.6,曼哈顿距离是 2+3=5,适合需要 “沿坐标轴移动” 的场景(比如物流路径规划)。

2. K-Means 的核心步骤:找中心、分群、更新,循环到收敛

K-Means 的名字里,“K” 是你要分的组数(比如把客户分成 3 组,K=3),“Means” 是 “均值”,指用每组的 “均值点” 作为 “聚类中心”。它的步骤特别清晰,像 “找朋友”:

  1. 初始化:先随机选 K 个样本点作为初始聚类中心(比如 K=2,就选两个点当 “组长”);
  2. 分群:计算每个样本到 K 个中心的距离,把样本分到距离最近的中心所在的组;
  3. 更新中心:对每个组,计算所有样本的 “均值”(比如 x 坐标的均值、y 坐标的均值),把这个均值点作为新的聚类中心;
  4. 收敛判断:如果新中心和旧中心差不多(比如移动距离小于 0.001),或者迭代次数到了上限,就停止;否则回到步骤 2,继续循环。

3. K-Means 的优缺点与评估:CH 指标帮你判断聚类好不好

(1)优点很明显
  • 简单快速:逻辑好理解,计算量不大,适合常规数据集(比如几万条样本);
  • 应用广:从用户分群、图像分割到异常检测,都能用。
(2)缺点也很突出
  • K 值难确定:到底分 3 组还是 5 组?全靠经验或尝试,没有统一标准;
  • 对初始中心敏感:如果第一次选的中心不好,可能会得到很差的结果(不过 sklearn 的KMeans默认会运行多次n_init,选最好的结果);
  • 只能分 “球形簇”:如果数据是环形、月牙形,K-Means 就 “懵了”,分不出来。
(3)怎么评估聚类效果?CH 指标

聚类没有标签,怎么知道分的好不好?可以用CH 指标

  • 先算 “类内紧密度”:每个样本到自己组中心的距离平方和,越小说明组内数据越像;
  • 再算 “类间分离度”:每个组中心到所有数据总中心的距离平方和,越大说明组与组越不像;
  • CH 指标 = (分离度 / 类数 - 1) / (紧密度 / 样本数 - 类数),CH 值越大,聚类效果越好

4. K-Means 的代码实现:用 sklearn 快速上手

在 sklearn 里,用KMeans()就能调用算法,还能用make_blobs()生成模拟聚类数据(比如生成 3 组、每个组有 100 个样本的数据)。

关键参数有:

  • n_clusters:K 值,必须指定(比如n_clusters=3);
  • max_iter:最大迭代次数,默认 300,防止无限循环;
  • random_state:随机种子,固定后每次结果一样,方便调试。

比如自己生成数据:用make_blobs(n_samples=500, n_features=2, centers=3, random_state=42),就能生成 500 个样本、2 个特征、3 个类别的数据,再用KMeans(n_clusters=3)聚类,最后画图就能看到 3 个清晰的簇,特别直观。

三、总结:两种算法的适用场景

  • 集成算法:适合有标签的分类 / 回归任务(比如预测客户是否流失、预测未来股价),尤其是数据复杂、单个模型效果差的时候。随机森林适合快速出结果、需要解释性的场景;AdaBoost 适合样本不平衡(比如少数样本是 “流失客户”)的场景;Stacking 适合追求极致精度、不介意复杂度的场景。
  • K-Means 聚类:适合无标签的数据探索(比如用户分群、商品分类),数据维度不高、簇是球形的场景。如果数据维度高,建议先降维(比如用 PCA);如果簇形状复杂,可以试试 DBSCAN 等其他聚类算法。

其实机器学习没有 “万能算法”,关键是根据数据特点和任务需求选对工具。

http://www.dtcms.com/a/342693.html

相关文章:

  • 机器学习经典算法总结:K-Means聚类与集成学习(Bagging, Boosting, Stacking)
  • 机器学习核心算法笔记:集成学习与聚类算法
  • QT6(QSpinBox和QDoubleSpinBox)
  • java项目数据脱敏工具类实现
  • 【离线安装】CentOS Linux 7 上离线部署Oracle 19c(已成功安装2次)
  • 【数据可视化-96】使用 Pyecharts 绘制主题河流图(ThemeRiver):步骤与数据组织形式
  • 如何使用 DeepSeek 助力工作​
  • C# 13 与 .NET 9 跨平台开发实战(第一章:开发环境搭建与.NET概述-下篇)
  • 阿里云的centos8 服务器安装MySQL 8.0
  • 【LeetCode 415】—字符串相加算法详解
  • Java学习历程14——制作一款五子棋游戏(4)
  • R 语言科研配色 --- 第 85 期 (附免费下载的配色绘图PPT)
  • 全屋WiFi强电款WiFi6 86面板一站式测试解决方案
  • leetcode 904 水果成篮
  • 从零开始理解 K 均值聚类:原理、实现与应用
  • Grafana侧重可视化,那多数据源告警呢?
  • Linux的奇妙冒险——进程间通信(管道、SystemV IPC)
  • 【实战记录】麒麟服务器操作系统安装KSC-Defender安全中心全指南
  • EagleTrader交易员采访|交易是一场概率游戏
  • 免费DirectX修复工具?游戏运行异常?【图文详解】dll修复工具?D3DX9_43.dll丢失
  • 【科研绘图系列】R语言绘制序列分析图
  • Rust 的流程控制与函数
  • SQL 中 DISTINCT 的全方位指南:从基础用法到性能优化
  • 【51单片机】【protues仿真】基于51单片机温度烟雾控制系统
  • C++项目实战——高性能内存池(一)
  • Redis面试精讲 Day 26:Redis源码分析:事件循环与网络模型
  • docker使用和部署深化学习
  • 深入理解Java虚拟机:JVM高级特性与最佳实践(第3版)第一章知识点问答(21题)
  • 华为AUTOSAR质量目标与开发实践
  • LeetCode100 -- Day3