随机森林分类VS回归

1. 先区分两种 Random Forest:分类 vs 回归

🟢 分类 RF(RandomForestClassifier)

  • 目标变量是 类别,比如:

    • 0 = 不发生滑坡 / 不发生冲突

    • 1 = 发生滑坡 / 发生冲突

也就是 "有 / 没有"、"属于哪一类"。

🔵 回归 RF(RandomForestRegressor)

  • 目标变量是 连续数值,比如:

    • 某栅格格点的死亡人数

    • 某格点的事件次数

    • 某处经济损失的金额

也就是 "有多大 / 有多少" 这种量。


2. 分类 RF:predict() vs predict_proba()

2.1 predict(X) ------ 给你"类别结果"

  • 输出是:0 或 1(或者多个类别 A/B/C)

举个例子:

你用的是二分类:0=不发生滑坡,1=发生滑坡。

y_pred = clf.predict(X)

可能得到:

[0, 0, 1, 1, 0, 1, ...]

意思就是:

  • 第 1 个样本:模型判断"不发生"

  • 第 3 个样本:模型判断"会发生"

特点:

  • 这是模型最终"下决定"的结果。

  • 如果你把这个直接写进栅格,地图上就是 0/1 的 分类图(发生/不发生)。


2.2 predict_proba(X) ------ 给你"概率(置信度)"

probs = clf.predict_proba(X)

对于二分类,probs 每一行是两个数:

[ [0.9, 0.1], [0.3, 0.7], [0.2, 0.8], ... ]

如果类别顺序是 [0, 1],那:

  • 第一行 [0.9, 0.1] =

    • P(类别0) = 0.9(不发生的概率 0.9)

    • P(类别1) = 0.1(发生的概率 0.1)

我们最常用的是 "发生"这一类的概率,也就是第二列:

p_event = probs[:, 1] # 发生滑坡/冲突的概率

比如得到:

[0.1, 0.7, 0.8, 0.05, ...]

特点:

  • 输出是 0--1 之间的连续值,可直接理解为:

    👉"这个位置发生事件的概率/风险大小"

  • 如果你把它写回点 → 再转栅格,就是一幅 风险概率图,非常适合做 0--1 的风险图、热度图。

你可以这样理解:

  • predict() = 模型帮你"拍板":发生 / 不发生(0/1)

  • predict_proba() = 模型告诉你它的"信心":发生的可能性是 0.8 还是 0.2

在空间风险制图里,一般 更喜欢用 predict_proba 的结果 来做图。


3. 回归 RF:只有 predict()(没有概率)

回归模型(RandomForestRegressor)的目标是一个连续值

reg = RandomForestRegressor(...) y_pred = reg.predict(X)

举例:

  • 你训练的是 "某栅格的冲突事件次数"

    • 输入一堆因子 → 输出可能是:0.3 次、2.7 次、5.1 次...
  • 或者 "死亡人数"

    • 预测结果可能是:0.0、12.5、3.2 ...

这里的 predict() 就是你想要的"数值预测结果",本身就是连续的。

典型区别:

  • 分类 RF:predict() 给 0/1、A/B/C(离散)

  • 回归 RF:predict() 给 3.7、10.2 这种连续数

注意:

回归 RF 一般 没有 predict_proba(),因为回归本身就不是"概率意义的分类",而是直接预测数值。


4. 跟你这套流程的关系(帮你选用哪个)

结合你现在这套"因子栅格 → 转点 → 提取多因子 → RF → 写回 prediction → 转栅格"的流程来看:

如果你的标签是 0/1(有事件 / 无事件)

  • 这是 分类问题

  • 推荐做法:

    1. RandomForestClassifier 训练模型;

    2. predict_proba(X) 得到每个点/像元的 发生概率(取类别 1 的那一列);

    3. 把这个概率写到 prediction 字段 → 再转成栅格。

  • 得到的结果:

    👉 每个像元是一个 0--1 的概率值,可以说"这里发生事件的概率是 0.73"。

如果你的标签是 连续数量(比如次数、死亡人数等)

  • 这是 回归问题

  • 做法:

    1. RandomForestRegressor

    2. predict(X) 得到连续数值;

    3. 写入 prediction 字段 → 转栅格。

  • 得到的结果:

    👉 每个像元是 "预测的次数/人数"。


5. 一句简短总结

  • 分类 RF:

    • predict():给你分类结果(0/1),适合做"发生 / 不发生"图。

    • predict_proba():给你类别的概率(0--1),适合做"风险概率图"。

  • 回归 RF:

    • 只有 predict():直接给连续数值(强度/次数/损失),适合做"强度分布图"。
相关推荐
Mr.看海14 小时前
【终审稿】CNN-RNN 通用分类算法及 MATLAB 实现
rnn·分类·cnn
丨白色风车丨15 小时前
PyTorch 迁移学习实战:ResNet18 实现 20 类食物图像分类(完整可运行代码)
pytorch·分类·迁移学习
BOTTLE_平20 小时前
AI认知篇:AI是什么 与 核心分类体系
人工智能·机器学习·分类·语音识别
解局易否结局3 天前
鸿蒙端侧 NLP 实战:分词器 + TF-IDF + 朴素贝叶斯分类 + 文本相似度
华为·自然语言处理·分类·harmonyos·tf-idf
All The Way North-4 天前
【TorchMetrics精通系列①】核心设计哲学 + Accuracy 超详解
机器学习·分类·模型评估·accuracy·准确率·评估指标·torchmetrics
遥感知识服务4 天前
Sentinel-1 + DEM + FwDET + 随机森林:从快速水深初估到多因子误差修正
算法·随机森林·sentinel
All The Way North-5 天前
【NLP文本分类实战】随机森林 + TF-IDF 完整流程,准确率82.5%(数据分析/分词/模型训练)
随机森林·机器学习·nlp·tf-idf·文本分类·sklearn·保姆级教程
皓悦编程记6 天前
【YOLO26 系列】基于YOLO26的垃圾分类检测系统【python源码+Pyqt5界面/WEB+数据集+训练代码】
python·qt·分类
AI科技星7 天前
全域三极公理统一篇——所有分析、代数、拓扑、算子理论同源归一,回归0/1/∞创世本源闭环《全域数学vs传统数学:人类文明进阶200讲》第91讲
人工智能·线性代数·机器学习·数据挖掘·回归·乖乖数学·全域数学
AI科技星7 天前
线性算子不是空间映射函数,是全域双螺旋场之间拉伸、旋转、耦合、坍缩的跨空间标准化变换载体《全域数学vs传统数学:人类文明进阶200讲》第80讲
线性代数·算法·矩阵·数据挖掘·回归·乖乖数学·全域数学