You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于0-9随机整数的决策树代码问题:为何输出仍为[0,1]?

问题分析与修正方案

原代码的核心错误

  • 训练样本量过少:仅用2个样本训练,决策树无法学习0-9整数的任何分布规律,只能拟合这两个随机生成的数值,导致模型输出范围局限在这两个数(刚好随机到0和1时就会出现[0,1]的情况)。
  • 特征设计冗余无效:每个样本的特征是[num, num],两个特征完全相同,模型无法从重复特征中提取有效区分信息,且特征与标签完全一致,会导致极端过拟合。
  • 缺少概率输出逻辑:原代码仅完成模型训练,未调用概率预测方法,且当前模型设置也无法输出合理的概率分布。

修正后的代码示例

假设需求是:基于大量0-9随机整数对训练决策树,输入任意整数对后输出其和的概率分布:

from sklearn import tree
import random

# 生成1000个有效训练样本
sample_size = 1000
X = []
Y = []
for _ in range(sample_size):
    num1 = random.randint(0, 9)
    num2 = random.randint(0, 9)
    X.append([num1, num2])
    Y.append(num1 + num2)  # 标签设为两数之和,类别范围0-18

# 训练决策树(限制树深防止过拟合)
clf = tree.DecisionTreeClassifier(max_depth=5)
clf.fit(X, Y)

# 测试任意整数对的概率输出
test_pair = [3, 5]
probabilities = clf.predict_proba([test_pair])[0]
print(f"整数对{test_pair}的和的概率分布:")
for idx, prob in enumerate(probabilities):
    print(f"和为{idx}的概率:{prob:.4f}")

关键修正点说明

  1. 充足训练数据:生成1000个样本,让模型能学习0-9整数对的潜在规律。
  2. 合理特征与标签:特征为真实的两个随机整数,标签根据需求定义(这里用两数之和作为分类目标)。
  3. 防止过拟合:设置max_depth限制决策树复杂度,避免模型完全拟合训练数据的噪声。
  4. 概率输出:使用predict_proba方法输出每个类别的概率,满足你的概率输出需求。

如果你的需求是直接输出整数对本身出现的概率,可以将标签改为num1 * 10 + num2(把整数对映射为0-99的唯一标识),再训练分类器即可。

内容的提问来源于stack exchange,提问作者realistdream

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.08 07:25:19