首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >分类决策树中的学习曲线是什么意思?

分类决策树中的学习曲线是什么意思?
EN

Stack Overflow用户
提问于 2019-02-11 05:49:36
回答 2查看 1.2K关注 0票数 1

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

Link to my learning curve image

非常感谢!

EN

回答 2

Stack Overflow用户

发布于 2021-04-09 10:58:07

学习曲线显示了不同数量的训练样本的估计器的有效性和训练分数。它是一个工具,用来找出我们从添加更多训练数据中获得了多少好处,以及估计器是遭受了更多的方差误差还是偏差误差。

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

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

这里有一个示例,它显示了一个图,其中您从小训练规模开始分析,而另一个图则从非常大的训练规模开始(您的案例)。为此,您只需更改sklearn.model_selection.learning_curve的train_sizes参数。

代码语言:javascript
运行
复制
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()

票数 4
EN

Stack Overflow用户

发布于 2019-02-11 06:19:03

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

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

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

这些线是重合的,因为模型可能经过了良好的训练:它在预测以前没有见过的东西方面和在训练过的东西上一样好。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54621429

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档