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

如何用Scikit-learn基于两个不同特征集训练决策树?

关于scikit-learn决策树多特征集训练的问题

首先明确:直接执行clf.fit(Z, Y)会完全覆盖之前基于X的训练结果。scikit-learn里的fit()方法是从头开始训练模型,每次调用都会重置模型的所有参数,用新传入的数据集重新学习,之前的训练数据和参数都会被丢弃,第二次fit之后,模型只记住了Z和对应的Y,和X没有任何关系。

你现在的核心问题是X和Z的特征维度不一致(X是2特征,Z是3特征),且样本数不同,没法直接合并。要同时用两个数据集训练,得按以下步骤处理:

  • 统一特征维度:决策树要求所有输入样本的特征数量必须一致。要么给X补充一个特征列(比如补0、对应特征的均值,或根据业务逻辑补合理值),把X变成3维;要么给Z删掉一个特征列,降到2维。
  • 合并数据集:维度统一后,把X和Z合并成一个大的特征矩阵,对应的标签Y也合并起来,再用合并后的数据集一次性训练。

举个代码例子(给X补0特征列):

import numpy as np
from sklearn import tree

# 第一个特征集
X = [[0, 0], [1, 1]]
Y1 = ['a','b']
# 第二个特征集
Z = [[1,2,0.5],[2,1,0.5],[0.5,2,2]]
Y2 = ['a','b','a']

# 给X补一个特征列,转为3维
X_3d = np.hstack([X, np.zeros((len(X), 1))])
# 合并特征矩阵与标签列表
combined_features = np.vstack([X_3d, Z])
combined_labels = Y1 + Y2

# 训练模型
clf = tree.DecisionTreeClassifier()
clf.fit(combined_features, combined_labels)

如果不想修改特征维度,也可以考虑分别用X和Z训练两个决策树模型,之后通过模型融合(比如投票)来综合结果,但这是另一种思路,适合两个特征空间差异较大的场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 04:25:16