【问题标题】:Can we fit a model using the same dataset applied during cross validation process?我们可以使用在交叉验证过程中应用的相同数据集来拟合模型吗?
【发布时间】:2019-01-10 15:21:48
【问题描述】:

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

import numpy as np
import utilities.utils as utils
from sklearn.model_selection import cross_val_score
from sklearn.neural_network import MLPClassifier
from sklearn.metrics import accuracy_score
from sklearn.model_selection import train_test_split
import pandas as pd
from sklearn.utils import shuffle

def 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 >>> Start Cross Validation ... ')
    scores = cross_val_score(estimator=clf, X=df_features, y=df_labels, cv=5, n_jobs=-1)
    print("CV Accuracy: %0.2f (+/- %0.2f)\n\n" % (scores.mean(), scores.std() * 2))


    # Final Fit
    print('\t >>> Start Final Fit ... ')
    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. 在每个 CV 折叠期间,模型参数是否执行到下一个折叠?比如在神经网络的情况下,是从 fold=1 执行到 fold=2 的拟合模型吗?
  3. 这个过程(我的意思是像上面那样拟合整个数据集)产生的模型准确度是否接近我们在交叉验证后获得的平均准确度?

谢谢

【问题讨论】:

    标签: machine-learning classification cross-validation


    【解决方案1】:

    R1。最后,当您执行 CV 时,您将数据集拆分为 k 集,并且每次您将使用 k-1 集训练您的集并使用 1/k 数据进行测试/验证(每次都不同) .

    R2。每次 MLP 对一个集合(k-1 个小集合)进行学习时,学习任务都会重新开始,最后 MSE 的平均度量或误差度量是 k 个不同场景中误差的平均值。

    R3。如果数据中的类分布是 k-CV 的平衡结果,传统的 70/30 分裂将有近似的概括。另一方面,如果数据集高度不平衡,则 k-CV (10) 将倾向于比传统拆分更好地学习泛化(因为数据将更有效地代表所有或大部分问题类别)。

    【讨论】:

      猜你喜欢
      • 2019-09-17
      • 2017-05-27
      • 2021-03-09
      • 2020-03-26
      • 2018-09-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-10-01
      相关资源
      最近更新 更多