【问题标题】:Understanding scikit's decision tree - inconsistent learning理解scikit的决策树——不一致的学习
【发布时间】:2017-04-17 16:41:20
【问题描述】:

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

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 的地方每次都会返回一个两层的决策树。

【问题讨论】:

    标签: python scikit-learn decision-tree


    【解决方案1】:

    这一行的输出是随机的:

    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)
    

    这样做应该始终为树提供相同的拆分功能。

    【讨论】:

    • 这有帮助,但我很好奇的是 DecisionTreeClassifier 类。它返回不同的功能。我有一个很大的测试集,所以我不确定发生了什么。
    • 如果每次有不同的训练集可以得到不同的选择特征。你试过像我说的那样设置random_state吗?
    • 是的,使用random_state 我得到相同的状态,但它们的重要性差异很大。
    猜你喜欢
    • 2016-12-29
    • 2017-05-03
    • 1970-01-01
    • 2015-06-15
    • 2011-05-06
    • 2013-04-21
    • 2017-02-03
    • 2011-06-23
    • 2011-01-29
    相关资源
    最近更新 更多