我在分析中使用了分类决策树。首先,我将整个数据分为训练和测试- 60%:40%。然后我在我的训练集上使用GridSearch来获得最佳得分模型(max_depth=7)。然后在交叉验证集和训练集上绘制学习曲线。这是我得到的图表。似乎有两条线是重叠的。那么它告诉我什么呢?在我的模型中没有过度拟合?总的来说,为什么我们在分析中需要学习曲线?
Link to my learning curve image
非常感谢!
发布于 2021-04-09 10:58:07
学习曲线显示了不同数量的训练样本的估计器的有效性和训练分数。它是一个工具,用来找出我们从添加更多训练数据中获得了多少好处,以及估计器是遭受了更多的方差误差还是偏差误差。
机器学习曲线用于许多目的,包括比较不同的算法,在设计过程中选择模型参数,调整优化以提高收敛性,以及确定用于训练的数据量。
您没有很好地利用学习曲线工具,因为您从非常高的训练规模开始,并且它不允许您很好地查看模型的行为。
这里有一个示例,它显示了一个图,其中您从小训练规模开始分析,而另一个图则从非常大的训练规模开始(您的案例)。为此,您只需更改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()

发布于 2019-02-11 06:19:03
您的图表显示了作为训练示例数量的函数的准确性。训练示例的数量越多,模型训练的训练数据点的数量就越多。
训练精度是训练模型在其训练数据上进行测试时的准确度分数。本质上,它是在已经看到的数据上进行测试的
在交叉验证中,数据被随机分成训练集和测试集。模型在训练集上进行训练,并在测试集上进行测试。准确率分数反映了测试集被预测的程度。
这些线是重合的,因为模型可能经过了良好的训练:它在预测以前没有见过的东西方面和在训练过的东西上一样好。
https://stackoverflow.com/questions/54621429
复制相似问题