我们可以在交叉验证过程中使用相同的数据集来拟合模型吗?

我有一个方法,先对数据集进行交叉验证,然后进行最终模型拟合:

import numpy as npimport utilities.utils as utilsfrom sklearn.model_selection import cross_val_scorefrom sklearn.neural_network import MLPClassifierfrom sklearn.metrics import accuracy_scorefrom sklearn.model_selection import train_test_splitimport pandas as pdfrom sklearn.utils import shuffledef CV(args, path):    df = pd.read_csv(path + 'HIGGS.csv', sep=',')    df = shuffle(df)    df_labels = df[df.columns[0]]    df_features = df.drop(df.columns[0], axis=1)    clf = MLPClassifier(hidden_layer_sizes=(64, 64, 64),                        activation='logistic',                        solver='adam',                        learning_rate_init=1e-3,                        max_iter=1000,                        batch_size=1000,                        learning_rate='adaptive',                        early_stopping=True                        )    print('\t >>> 开始交叉验证 ... ')    scores = cross_val_score(estimator=clf, X=df_features, y=df_labels, cv=5, n_jobs=-1)    print("CV 准确率: %0.2f (+/- %0.2f)\n\n" % (scores.mean(), scores.std() * 2))    # 最终拟合    print('\t >>> 开始最终拟合 ... ')    num_to_read = (int(10999999) * (args.stages * np.dtype(np.float64).itemsize))    C1 = utils.read_from_disk(path + 'HIGGS.dat', 0, num_to_read, args.stages)    print(C1)    print(C1.shape)    r = C1[:, :1]    C = np.delete(C1, 0, axis=1)    tr_C, ts_C, tr_r, ts_r = train_test_split(C, r, train_size=.8)    clf.fit(tr_C, tr_r)    prd_r = clf.predict(ts_C)    test_acc = accuracy_score(ts_r, prd_r) * 100.    return test_acc

我知道交叉验证是用来评估模型在给定数据集上的表现。我的问题是:

  1. 用我在交叉验证过程中使用过的相同数据集再次拟合模型在逻辑上是否正确?
  2. 在每次交叉验证折叠中,模型参数是否会传递到下一折?例如,在神经网络的情况下,从第一折拟合的模型是否会传递到第二折?
  3. 这个过程(我是指像我上面那样拟合整个数据集)是否会产生接近交叉验证后平均准确率的模型准确率?

谢谢


回答:

R1. 在进行交叉验证的最后阶段,你会将数据集分成k个子集,每次你会用k-1个子集进行训练,并用剩下的1/k数据进行测试/验证(每次不同)。

R2. 每次MLP在k-1个小数据集上进行学习时,学习任务会重新开始,最终的平均MSE或错误度量是k个不同场景中错误的平均值。

R3. 如果数据中的类别分布是平衡的,k折交叉验证和传统的70/30分割将具有近似的泛化能力。另一方面,如果数据集高度不平衡,k折交叉验证(如10折)将比传统分割(因为数据将更有效地代表所有或大多数问题类别)倾向于更好的学习泛化能力。

Related Posts

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注