【问题标题】:What does the learning curve in classification decision tree mean?分类决策树中的学习曲线是什么意思?
【发布时间】:2019-07-04 09:48:16
【问题描述】:

我在分析中使用了分类决策树。首先,我将整个数据分成训练和测试——60%:40%。然后我在我的训练集上使用了 GridSearch 来获得得分最高的模型(max_depth=7)。然后我在交叉验证集和训练集上绘制学习曲线。这是我得到的图表。似乎两条线是重叠的。那么它告诉我什么?我的模型中没有过拟合?总的来说,为什么我们需要分析中的学习曲线?

Link to my learning curve image

非常感谢!

【问题讨论】:

    标签: decision-tree grid-search


    【解决方案1】:

    学习曲线显示不同数量的训练样本的估计器的验证和训练得分。它是一种工具,用于了解我们从添加更多训练数据中受益多少,以及估计器是否因方差误差或偏差误差而受到更多影响。

    机器学习曲线可用于多种用途,包括比较不同的算法、在设计期间选择模型参数、调整优化以提高收敛性以及确定用于训练的数据量。

    您没有很好地利用学习曲线工具,因为您从一个非常高的训练规模开始,它不允许您很好地了解模型的行为。

    这是一个示例,显示了您从较小的训练规模开始分析的图和从非常大的训练规模开始分析的另一个图(您的案例)。为此,您只需改变 sklearn.model_selection.learning_curve 的 train_sizes 参数。

    import numpy as np
    import matplotlib.pyplot as plt
    from sklearn.svm import SVC
    from get_csv_data import HandleData
    from sklearn.model_selection import learning_curve
    from sklearn.model_selection import ShuffleSplit
    
    def plot_learning_curve(estimator, X, y, ax=None, ylim=(0.5, 1.01), cv=None, n_jobs=4, train_sizes=np.linspace(.1, 1.0, 5)):
    
        train_sizes, train_scores, test_scores = \
            learning_curve(estimator, X, y, cv=cv, n_jobs=n_jobs, train_sizes=train_sizes)
                  
        train_scores_mean = np.mean(train_scores, axis=1)
        train_scores_std = np.std(train_scores, axis=1)
        test_scores_mean = np.mean(test_scores, axis=1)
        test_scores_std = np.std(test_scores, axis=1)
    
        # Plot learning curve
        if ylim is not None:
            ax.set_ylim(*ylim)
        ax.set_xlabel("Training examples")
        ax.set_ylabel("Score")
        ax.plot(train_sizes, train_scores_mean, 'o-', color="r", label="Training score")
        ax.plot(train_sizes, test_scores_mean, 'o-', color="g", label="Cross-validation score")
        ax.legend(loc="best")
    
        return plt
    
    fig, (ax1, ax2) = plt.subplots(1, 2)
    
    data = HandleData(oneHotFlag=False)
    #get the data
    X, y = data.get_synthatic_data()
    
    cv = ShuffleSplit(n_splits=10, test_size=0.2, random_state=0)
    estimator = SVC()
    plot_learning_curve(estimator, X, y, ax = ax1, cv=cv, train_sizes=np.linspace(.1, 1.0, 5))
    plot_learning_curve(estimator, X, y, ax = ax2, cv=cv, train_sizes=np.linspace(.5, 1.0, 5))
    
    plt.show()

    【讨论】:

      【解决方案2】:

      您的图表显示了作为训练示例数量函数的准确性。训练示例的数量越多,模型训练的训练数据点的数量就越多。

      训练准确度是训练模型在训练数据上测试时的准确度得分。本质上,它是在已经看到的数据上进行测试的

      在交叉验证中,数据被随机分成训练集和测试集。该模型在训练集上进行训练,并在测试集上进行测试。准确度分数反映了测试集的预测程度。

      这两条线重合,因为该模型很可能训练有素:它在预测它以前从未见过的事物方面和预测它所训练的事物一样好。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-06-04
        • 2021-06-02
        • 2016-12-14
        • 2021-04-19
        • 2017-05-03
        • 2011-05-06
        • 2013-04-21
        • 2013-03-16
        相关资源
        最近更新 更多