【发布时间】:2019-11-03 03:03:22
【问题描述】:
我喜欢 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 束对象。
现在,在Sci-kit learn - How to create a Bunch object,他们非常严厉地告诉我不要尝试创建一堆对象;但我也没有技能将我的 DF 或 NP 数组转换为上面的 viz 函数可以接受的东西。
我们可以假设我的 DF 有九个特征和一个目标,称为“Feature01”、“Feature02”等和“Target01”。
我通常会这样拆分
FeatDF = FullDF.drop( columns = ["Target01"])
LabelDF = FullDF["Target01"]
然后设置我的快乐方式来分配一个分类器,或者如果对于 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)
或者这是愚蠢的?感谢您到目前为止的指导!
【问题讨论】:
-
您能否提供minimal reproducible example 以便我们可以复制该问题?
-
您能否提供您尝试调用 dtreeviz 的方式?因为我知道如何构造数据框,但我想知道如何使用数据框调用函数以及得到什么错误。
标签: python scikit-learn visualization dtreeviz