gpt4 book ai didi

python - 如何让我的决策树模型在每个节点都提问

转载 作者:行者123 更新时间:2023-12-01 15:30:51 25 4
gpt4 key购买 nike

我一直在研究一个基本的决策树分类器,我需要我的模型在每个节点上提问。基本上我的疾病预测器应该根据用户告诉的症状来猜测疾病。所以我想在每个阶段询问用户是否有特定症状(在节点处 split )并用它来预测输出。

详细来说,这是我当前的代码片段:

import pandas as pd
import numpy as np
from sklearn import tree
..
..
#import data from db and store in variables
..
clf = tree.DecisionTreeClassifier(criterion='entropy', splitter='best')
clf = clf.fit(relations,diseaseCodes)

print(clf.predict([relations[10]]))

在这里,我必须一次性提供所有值的完整列表。我想在每一步都问我的用户问题,比如你现在有什么症状,并根据它对疾病进行分类。

注意:我知道我的决策树过拟合了。

最佳答案

为此,您可以手动遍历拟合树,访问公共(public) api 不可用的属性。

首先,让我们使用“iris”数据集得到一棵拟合树:

import numpy as np # linear algebra
from sklearn.datasets import load_iris
from sklearn.tree import DecisionTreeClassifier, plot_tree
import matplotlib.pyplot as plt

data = load_iris()
clf = DecisionTreeClassifier(max_depth=3).fit(data['data'],data['target'])

让我们想象一下这棵树,主要是为了调试我们的最终程序:

plt.figure(figsize=(10,8))
plot_tree(clf,feature_names=data['feature_names'],class_names=data['target_names'],filled=True);

在我的案例中输出: enter image description here

现在是主要部分。从这个link , 我们知道-

The binary tree "tree_" is represented as a number of parallel arrays. The i-th element of each array holds information about the node i.

我们需要的数组是featurevaluethreshold 和两个children_*。因此,从根节点 (i=0) 开始,我们首先收集我们访问的每个节点的特征和阈值,向用户询问该特定特征的值,并通过比较给定值向左或向右遍历与阈值。当我们到达一片叶子时,我们会在该叶子中找到最频繁的类,然后结束我们的循环。

tree = clf.tree_
node = 0 #Index of root node
while True:
feat,thres = tree.feature[node],tree.threshold[node]
print(feat,thres)
v = float(input(f"The value of {data['feature_names'][feat]}: "))
if v<=thres:
node = tree.children_left[node]
else:
node = tree.children_right[node]
if tree.children_left[node] == tree.children_right[node]: #Check for leaf
label = np.argmax(tree.value[node])
print("We've reached a leaf")
print(f"Predicted Label is: {data['target_names'][label]}")
break

上述树的此类运行示例是:

3 0.800000011920929
The value of petal width (cm): 1
3 1.75
The value of petal width (cm): 1.5
2 4.950000047683716
The value of petal length (cm): 5.96
We've reached a leaf
Predicted Label is: virginica

关于python - 如何让我的决策树模型在每个节点都提问,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59758402/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com