我喜欢Dtreeviz library - GitHub提供的决策树可视化,可以使用
# Install libraries
!pip install dtreeviz
!apt-get install graphviz
# Sample code
from sklearn.datasets import *
from sklearn import tree
from dtreeviz.trees import *
from IPython.core.display import display, HTML
classifier = tree.DecisionTreeClassifier(max_depth=4)
cancer = load_breast_cancer()
classifier.fit(cancer.data, cancer.target)
viz = dtreeviz(classifier,
cancer.data,
cancer.target,
target_name='cancer',
feature_names=cancer.feature_names,
class_names=["malignant", "benign"],
fancy=False)
display(HTML(viz.svg()))
然而,当我将上述方法应用于我自己制作的dtree时,代码会爆炸,因为我的数据在pandas DF(或np数组)中,而不是scikit learn bunch对象。
现在,在Sci-kit learn - How to create a Bunch object他们非常严厉地告诉我不要试图创建一个bunch对象;但是我也没有技能将DF或NP数组转换成上面的viz函数可以接受的东西。
我们可以假设我的测向有九个特征和一个目标,叫做“Feature01”、“Feature02”等和“Target01”。
这个我通常会分开
^{pr2}$然后按照我愉快的方式分配一个分类器,或者如果对于ML,创建一个测试/训练分割。
当调用dtreeviz
时,这些都没有帮助,因为它需要像“feature_names”(我认为它是“bunch”对象中包含的内容)。因为我不能把我的DF转换成一堆,所以我被卡住了。哦,请带上你的智慧。
更新:我想任何简单的DF都能说明我的难题。我们可以一起荡秋千
import pandas as pd
Things = {'Feature01': [3,4,5,0],
'Feature02': [4,5,6,0],
'Feature03': [1,2,3,8],
'Target01': ['Red','Blue','Teal','Red']}
DF = pd.DataFrame(Things,
columns= ['Feature01', 'Feature02',
'Feature02', 'Target01'])
例如DF。现在,我可以走了吗
DataNP = DF.to_numpy()
classifier.fit(DF.data, DF.target)
feature_names = ['Feature01', 'Feature02', 'Feature03']
#..and what if I have 50 features...
viz = dtreeviz(classifier,
DF.data,
DF.target,
target_name='Target01',
feature_names=feature_names,
class_names=["Red", "Blue", "Teal"],
fancy=False)
还是这愚蠢?感谢您的指导!
可以使用sklearn的
LabelEncoder
将字符串转换为整数dtreeviz
期望class_names
是list
或{label_encoder
得到它完整代码
旧答案
让我们使用cancer数据集来创建Pandas数据帧
它给出了下面的数据帧。在
对于你的分类器,它可以用以下方式使用。在
也就是说,只需将最后一列作为训练/输入,
target
列作为输出/目标。在可视化也是一样:
我认为您对文档中提供的示例感到困惑。在
Here让我们看看iris数据集的示例。在
如您所述,数据集存储为sklearn Bunch对象。在
但是
^{pr2}$dtreeviz
没有在其任何参数中使用此对象。所有参数都是numpy数组。在因此很明显,
dtreeviz
方法正在使用numpy数组,并且没有使用Bunch对象。在您的例子中,要素名称与选定要素的列名无关。在更新
相关问题 更多 >
编程相关推荐