基于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}")
关键修正点说明
- 充足训练数据:生成1000个样本,让模型能学习0-9整数对的潜在规律。
- 合理特征与标签:特征为真实的两个随机整数,标签根据需求定义(这里用两数之和作为分类目标)。
- 防止过拟合:设置
max_depth限制决策树复杂度,避免模型完全拟合训练数据的噪声。 - 概率输出:使用
predict_proba方法输出每个类别的概率,满足你的概率输出需求。
如果你的需求是直接输出整数对本身出现的概率,可以将标签改为num1 * 10 + num2(把整数对映射为0-99的唯一标识),再训练分类器即可。
内容的提问来源于stack exchange,提问作者realistdream
相关产品推荐
相关产品推荐

