绘制决策树未给出预期结果
Plot decision tree doesn't give the expected outcome
我有一个时间序列数据 (4917, 50, 136) 作为 (batch, step, feature)
共有8个classes.
在使用 LSTM 模型训练它们以了解 classes 之间的相似性之前,我想 运行 做出树决策。
在我为 8-class 数据集拟合树之后。
X_train.shape = (245850, 136)
y_train.shape = (245850,)
我试图绘制一棵树,但只有文本出来,Jupyter 显示代码仍然是 运行ning。
plt.figure(figsize= (15,15))
tree.plot_tree(clf,filled=True,rounded=True)
下面显示了部分输出,实际的要长得多。
[Text(386.62505751196755, 807.7075471698113, 'X[9] <= 0.214\ngini = 0.825\nsamples = 245850\nvalue = [70000, 44200, 41400, 28350, 23100, 22850, 8750, 7200]'),
Text(194.71922553590255, 792.322641509434, 'X[8] <= 0.053\ngini = 0.828\nsamples = 202360\nvalue = [54382, 38286, 36102, 22575, 17882, 19248, 7775, 6110]'),
Text(100.44763452614337, 776.9377358490566, 'X[71] <= -0.421\ngini = 0.824\nsamples = 169238\nvalue = [48221, 31129, 30271, 18167, 14775, 14749, 6717, 5209]'),
Text(49.35201252001606, 761.5528301886792, 'X[4] <= -0.512\ngini = 0.831\nsamples = 12607\nvalue = [3305, 2125, 1762, 1453, 2254, 898, 423, 387]'),
Text(18.629607720355484, 746.1679245283019, 'X[69] <= -0.73\ngini = 0.84\nsamples = 5647\nvalue = [1138, 1163, 921, 547, 1014, 459, 179, 226]'),
Text(4.619141935578377, 730.7830188679245, 'X[0] <= 1.155\ngini = 0.805\nsamples = 1114\nvalue = [320, 193, 134, 75, 271, 62, 38, 21]'),
更新
我让代码 运行 足够长的时间,我得到了一个图形输出,但它不正确。这让我感到困惑,因为我的 objective 是要初步检查 class 之间的关系,但是这个决策树显然没有输出正确的信息。
您的绘图输出是正确的。这是你得到的决策树模型。
如果你想要一个更“小”和“简单”的决策树来可视化初步解释,你应该调整模型的一些超参数。
具体来说,我建议将您的 max_depth
调整为 5,甚至更少(使用这个超参数,您的树的深度将不能大于该值)。因此,您将获得一个简单的模型,但您将能够获得您要查找的基本信息:
dt=DecisionTreeClassifier(max_depth=5, random_state=42)
之后,按照你之前的方式制作。
我有一个时间序列数据 (4917, 50, 136) 作为 (batch, step, feature)
共有8个classes.
在使用 LSTM 模型训练它们以了解 classes 之间的相似性之前,我想 运行 做出树决策。
在我为 8-class 数据集拟合树之后。
X_train.shape = (245850, 136)
y_train.shape = (245850,)
我试图绘制一棵树,但只有文本出来,Jupyter 显示代码仍然是 运行ning。
plt.figure(figsize= (15,15))
tree.plot_tree(clf,filled=True,rounded=True)
下面显示了部分输出,实际的要长得多。
[Text(386.62505751196755, 807.7075471698113, 'X[9] <= 0.214\ngini = 0.825\nsamples = 245850\nvalue = [70000, 44200, 41400, 28350, 23100, 22850, 8750, 7200]'),
Text(194.71922553590255, 792.322641509434, 'X[8] <= 0.053\ngini = 0.828\nsamples = 202360\nvalue = [54382, 38286, 36102, 22575, 17882, 19248, 7775, 6110]'),
Text(100.44763452614337, 776.9377358490566, 'X[71] <= -0.421\ngini = 0.824\nsamples = 169238\nvalue = [48221, 31129, 30271, 18167, 14775, 14749, 6717, 5209]'),
Text(49.35201252001606, 761.5528301886792, 'X[4] <= -0.512\ngini = 0.831\nsamples = 12607\nvalue = [3305, 2125, 1762, 1453, 2254, 898, 423, 387]'),
Text(18.629607720355484, 746.1679245283019, 'X[69] <= -0.73\ngini = 0.84\nsamples = 5647\nvalue = [1138, 1163, 921, 547, 1014, 459, 179, 226]'),
Text(4.619141935578377, 730.7830188679245, 'X[0] <= 1.155\ngini = 0.805\nsamples = 1114\nvalue = [320, 193, 134, 75, 271, 62, 38, 21]'),
更新
我让代码 运行 足够长的时间,我得到了一个图形输出,但它不正确。这让我感到困惑,因为我的 objective 是要初步检查 class 之间的关系,但是这个决策树显然没有输出正确的信息。
您的绘图输出是正确的。这是你得到的决策树模型。
如果你想要一个更“小”和“简单”的决策树来可视化初步解释,你应该调整模型的一些超参数。
具体来说,我建议将您的 max_depth
调整为 5,甚至更少(使用这个超参数,您的树的深度将不能大于该值)。因此,您将获得一个简单的模型,但您将能够获得您要查找的基本信息:
dt=DecisionTreeClassifier(max_depth=5, random_state=42)
之后,按照你之前的方式制作。