【发布时间】:2018-11-25 06:45:05
【问题描述】:
我正在尝试使用 DataFrame (pandas) 从 sklearn 实现 DecisionTreeClassifier,但是在拆分我的数据时它会返回一些奇怪的值。我的数据集包含 3 列具有 Pearsons 相关系数的列,只能介于 -1.0 和 1.0 之间。但是,根节点已经开始在 Pearsons
在我的代码中,我尝试了 Gini 和 Entropy 标准、拆分器和其他可能参数的不同组合。现在或多或少是我的代码,但我仍在使用参数:
newtable = table_of_pickle_ptptnew.loc[:,('Pearsons Ratio', 'Pearsons 330nm', 'Pearsons 350nm', 'Ratio Space', '330nm Similarity', '350nm Similarity')]
x = newtable.values
y = table_of_pickle_ptptnew['Binding Known'].values
dtree=DecisionTreeClassifier(max_features='auto',
max_depth=3,
criterion ='entropy',
min_impurity_decrease=0.09
)
fittree = dtree.fit(x, y.astype('str'))
dot_data = tree.export_graphviz(fittree, out_file=None,
class_names=['No Interaction', 'Interaction'],
feature_names=['Pearsons Ratio', 'Pearsons 330nm', 'Pearsons 350nm', 'Ratio Space', '330nm Similarity', '350nm Similarity'],
filled=True)
graph = graphviz.Source(dot_data)
graph
Pearsons Ratio Pearsons 330nm Pearsons 350nm Ratio Space 330nm Similarity 350nm Similarity
Elem a 0.94856 0.99999 0.99999 0.000725507 0.157209 0.0572688
Elem b 0.99234 1 0.99999 0.00657003 0.0568281 0.0465139
Elem c 0.98525 0.99999 0.99999 0.0114932 0.0226809 0.133452
Elem d 0.99793 0.99999 0.99999 0.000643209 0.154585 0.0914759
Elem e 0.99849 0.99999 0.99999 0.00128532 0.0932893 0.0464462
这是树的第一个节点的样子。所以,我的意思是 False 在根节点 (Pearson 350nm 不可能 存在,因为所有样本都是
【问题讨论】:
-
为了澄清,皮尔逊的相关系数一般可以取-1到1之间的值,但您的数据只包含0到1之间的值?
-
不抱歉,我的错。它是从-1到1,正确的。我会在问题中更正它。
-
一个可能的想法是您重新调整了功能,但从代码 sn-p 来看似乎并非如此。顺便说一句,该图还显示了有多少样本满足给定的条件链,对于 False,这个数字真的是 0 吗?
-
否... True/False 的两个子节点都给出满足条件的样本。那是我的问题。如果我在我的真实代码中实现它,它不会起作用,因为我知道没有任何值可以高于 1.0。现在,它给了我 [7,53] 的 True 和 [34,7] 的 False ...:/
-
你能从你的新表中发布 5 到 10 行吗?
标签: python pandas decision-tree sklearn-pandas