我有以下方法对数据集执行交叉验证,然后进行最终模型拟合:
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
我了解交叉验证是关于评估给定数据集的模型效果。我的问题是:
谢谢
答案 0 :(得分:0)
R1。最后,在执行简历时,您会将数据集分成k个集合,每次您要使用k-1个集合训练集合并使用1 / k数据进行测试/验证(每次都不同)
R2。每次MLP用一组(k-1个小集合)执行学习时,学习任务都会重新开始,最后,MSE的平均度量或误差度量是k个不同场景中误差的平均值。
R3。如果数据中的类别分布是k-CV的平衡结果,则传统的70/30拆分将具有近似的概括。另一方面,如果数据集高度不平衡,则k-CV(10)会比传统的分裂方法更好地学习归纳法(因为数据将更有效地代表所有或大多数问题类别)。