机器学习核心概念详解(回归、分类和聚类)
一、前言
机器学习中有三个最核心、最基础的概念:回归、分类和聚类。它们代表了三种不同的任务类型和思维方式。首先,我们可以通过一个表格快速把握三者的核心区别:
| 任务类型 | 关键词 | 问题类型 | 输出 | 算法类型 | 典型例子 |
|---|---|---|---|---|---|
| 回归 | 预测、连续值 | “有多少?” | 连续的数值 | 监督学习 | 预测房价、预测销量 |
| 分类 | 判断、类别、标签 | “是哪个?” | 离散的类别 | 监督学习 | 垃圾邮件识别、图像分类 |
| 聚类 | 分组、发现结构 | “怎么分群?” | 数据的内在分组 | 无监督学习 | 客户细分、新闻主题分组 |
二、详解
1. 回归
核心思想:预测一个连续的数值。
- 目标:根据输入数据(特征),建立一个模型,来预测一个连续的、定量的输出值。
- “回归”一词的由来:源于弗朗西斯·高尔顿的“回归平庸”现象,但现代机器学习中,它更广泛地指“数值预测”。
- 输入/输出:
- 输入:特征(例如,房屋面积、地段、卧室数量)。
- 输出:一个具体的数值(例如,房屋的价格:350万元)。
- 典型算法:
- 线性回归:最简单、最基础的方法,尝试用一条直线(或超平面)来拟合数据。
- 决策树回归:通过一系列“如果…那么…”的规则进行预测。
- 支持向量回归(SVR):尝试在容忍一定误差的情况下,用一个“管道”来拟合数据。
- 神经网络:强大的非线性回归模型。
- 应用场景:
- 股票价格预测:根据历史数据预测未来股价。
- 销售额预测:根据广告投入、季节等因素预测下个月销售额。
- 疾病风险评分:根据患者年龄、体重、血压等指标预测其患某病的风险系数。
简单比喻:回归就像是预测一个具体的分数。比如,根据一个学生的学习时间、错题数量,预测他这次考试能考85分。
2. 分类
核心思想:预测一个离散的类别标签。
- 目标:根据输入数据,将其划分到预先定义好的、有限的类别中。
- 输入/输出:
- 输入:特征(例如,邮件的关键词、发件人地址;图片的像素值)。
- 输出:一个离散的类别标签(例如,邮件是“垃圾邮件”或“正常邮件”;图片是“猫”或“狗”)。
- 类别数量:
- 二分类:只有两个类别(是/否,正/负)。最常见,如垃圾邮件过滤。
- 多分类:类别数量大于两个(如,识别手写数字0-9;图像识别1000种物体)。
- 典型算法:
- 逻辑回归:名字带“回归”,但本质是分类算法,尤其擅长二分类。
- 决策树、随机森林、梯度提升树(如XGBoost):非常强大且常用的分类器。
- 支持向量机(SVM):擅长在小样本、高维度数据上找到复杂的分类边界。
- K近邻(K-NN):根据“最近的K个邻居”的类别来投票决定。
- 神经网络:尤其在图像、语音、文本分类上表现卓越。
- 应用场景:
- 垃圾邮件识别:将邮件分为“垃圾”或“非垃圾”。
- 图像识别:识别图片中的物体是猫、狗、汽车等。
- 医疗诊断:根据医学影像判断肿瘤是“良性”或“恶性”。
- 情感分析:判断一条评论的情感是“正面”、“负面”还是“中性”。
简单比喻:分类就像是做选择题。题目是输入的数据,选项是预先定义好的类别(A/B/C/D),模型的任务是选出最正确的那个。
3. 聚类
核心思想:发现数据内在的群组结构,无需预先定义标签。
- 目标:将数据集中的样本划分成若干个组(称为“簇”),使得同一簇内的样本彼此相似,而不同簇的样本差异较大。
- 与分类的关键区别:聚类是无监督学习,我们不知道也没有预先给定的类别标签。聚类算法是自己去“发现”数据中潜在的自然分组。
- 输入/输出:
- 输入:只有特征,没有标签。
- 输出:每个样本被分配到一个“簇”的编号(如0,1,2…),但这些编号的含义需要人工事后解读。
- 典型算法:
- K均值聚类:最著名、最常用的聚类算法。需要预先指定要聚成几个簇(K值)。
- 层次聚类:不需要指定K值,会形成一个树状的聚类结构(树状图),可以按需切割。
- DBSCAN:基于密度的算法,能发现任意形状的簇,并能识别出离群点(噪声)。
- 应用场景:
- 客户细分:根据用户的购买行为、人口属性将其分成不同的群组,以便精准营销。
- 社交网络分析:发现社区群体。
- 异常检测:偏离所有簇的数据点可能就是异常值或欺诈行为。
- 文档/新闻分组:将海量未标记的文档按照主题自动归类。
简单比喻:聚类就像是**“物以类聚,人以群分”**。你走进一个陌生的聚会,你不知道有哪些小圈子(无标签),但你会通过观察(算法计算),自然而然地将人群分成“聊体育的一群”、“聊电影的一群”、“聊政治的一群”。
4. 总结与对比
| 特性 | 回归 | 分类 | 聚类 |
|---|---|---|---|
| 学习类型 | 监督学习 | 监督学习 | 无监督学习 |
| 输出类型 | 连续数值(整数/实数) | 离散类别(标签) | 簇的编号(无预设意义) |
| 是否有标签 | 需要已知的输入和输出标签来训练模型 | 需要已知的输入和输出标签来训练模型 | 不需要标签,算法自行探索 |
| 核心目标 | 预测一个值 | 预测一个类别 | 发现数据的内在结构/分组 |
| 评估指标 | 均方误差(MSE)、R²分数 | 准确率、精确率、召回率、F1分数 | 轮廓系数、Calinski-Harabasz指数 |
5.算法对比
| 算法类型 | 学习类型 | 任务类型 | 核心目标 | 评估指标 | sklearn类 |
|---|---|---|---|---|---|
| 线性回归 | 监督学习 | 线性回归 | 预测一个值 | 均方误差(MSE)、R²分数 | sklearn.linear_model.LinearRegression |
| 回归决策树 | 监督学习 | 非线性回归 | 预测一个值 | 均方误差(MSE)、R²分数 | sklearn.tree.DecisionTreeRegressor |
| 支持向量回归(SVR) | 监督学习 | 回归 | 预测一个值 | 均方误差(MSE)、R²分数 | sklearn.svm.SVR |
| 随机森林回归 | 监督学习 | 非线性回归 | 预测一个值 | 均方误差(MSE)、R²分数 | sklearn.ensemble.RandomForestRegressor |
| 回归梯度提升树(Boosting) | 监督学习 | 回归 | 预测一个值 | sklearn.ensemble.GradientBoostingRegressor | |
| 逻辑回归 | 监督学习 | 二分类/多分类 | 预测一个类别 | sklearn.linear_model.LogisticRegression | |
| 分类决策树 | 监督学习 | 分类 | 预测一个类别 | sklearn.tree.DecisionTreeClassifier | |
| 随机森林分类 | 监督学习 | 分类 | 预测一个类别 | sklearn.ensemble.RandomForestClassifier | |
| 分类梯度提升树(Boosting) | 监督学习 | 分类 | 预测一个类别 | sklearn.ensemble.GradientBoostingClassifier | |
| 支持向量分类(SVC) | 监督学习 | 分类 | 预测一个类别 | sklearn.svm.SVC|sklearn.svm.LinearSVC |
注意:1、sklearn.svm.SVR既可以做线性回归,也可以做非线性回归,这完全取决于你选择的核函数(kernel)
2、决策树、随机森林、梯度提升树、支持向量既可以用于回归也可以用作分类
3、SVM=Support Vector Machine 是支持向量机
SVC=Support Vector Classification就是支持向量机用于分类,
SVC=Support Vector Regression.就是支持向量机用于回归分析,
如何选择?
- 如果你想预测一个具体的数量(比如价格、温度、销量) -> 用回归。
- 如果你想判断数据属于哪一类(比如是否患病、是哪类用户)并且已有明确的类别定义 -> 用分类。
- 如果你不知道数据有哪些类别,想探索数据,发现潜在的自然分组 -> 用聚类。
