【发布时间】: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
我了解交叉验证是关于评估您的模型在给定数据集上的表现。我的问题是:
- 用我在交叉验证过程中使用的同一数据集再次拟合模型在逻辑上是否正确?
- 在每个 CV 折叠期间,模型参数是否执行到下一个折叠?比如在神经网络的情况下,是从 fold=1 执行到 fold=2 的拟合模型吗?
- 这个过程(我的意思是像上面那样拟合整个数据集)产生的模型准确度是否接近我们在交叉验证后获得的平均准确度?
谢谢
【问题讨论】:
标签: machine-learning classification cross-validation