我试图用一个dataframe(pandas)实现sklearn中的decisiontreeclassifier,但它在分割数据时返回一些奇怪的值。我的数据集包含3列pearsons相关系数,它们只能介于-1.0和1.0之间。但是,根节点已经开始被pearsons<=1.0处的其中一列拆分,并显示true和false的两个子节点。但是,这是不可能的!!所有值都是<=1.0。不可能在那里分裂。有人知道这是怎么回事吗?
在我的代码中,我尝试了基尼准则和熵准则,也尝试了拆分器和其他可能参数的不同组合。这或多或少是我的代码,但我仍然在玩参数:
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
这是树的第一个节点的样子。所以,我的意思是
假
在根节点(pearson 350nm<=1.0)的条件下
不可能的
因为所有样本都是<=1.0(真)。