2016-12-02 102 views
1

我一直在使用包tsfresh来查找时间序列的相关特征。它输出大约300个“相关”特征,通过了每个特征可预测性的p检验阈值。当我使用scikit的DecisionTreeClassifier()来训练分类器时,我得到了一些奇怪的结果。每次我执行树的学习时,它都会返回一个只有两个级别的树,并且每次使用的特性都不相同。我很困惑。树每次都做得很好,但是我没有看到所有的关卡? 使用此代码:理解scikit的决策树 - 不一致的学习

from sklearn import tree 
from sklearn.tree import _tree 
X_train, X_test, y_train, y_test = train_test_split(X_filtered, y, test_size=.2) 
cl = DecisionTreeClassifier() 
cl.fit(X_train, y_train) 
tree.export_graphviz(cl,out_file='tree.dot',feature_names=X.columns) 

其中len(X.colums)超过300返回,每次两个层次的决策树。

回答

0

这条线的输出是随机的:

X_train, X_test, y_train, y_test = train_test_split(X_filtered, y, test_size=.2) 

也就是说,每次你一分为训练和测试设备中的数据时,你会得到不同的集合。您可以使用random_state属性来获得可预测的分裂:

X_train, X_test, y_train, y_test = train_test_split(X_filtered, y, test_size=.2, random_state=4) 

这样做应该给你相同的拆分始终配备了树。

+0

这有帮助,但我很好奇的是'DecisionTreeClassifier'类。它返回不同的功能。我有一个大的测试集,所以我不知道发生了什么。 – superhero

+0

如果您每次获得不同的选定功能时都有不同的训练集。你有没有尝试像我说的那样设置'random_state'? – dukebody

+0

是的,使用'random_state'我得到相同的状态,但它们的重要性差异很大。 – superhero