我正在尝试构建回归模型,验证并测试它,并确保它不会过度拟合数据。到目前为止,这是我的代码:
from pandas import read_csv
from sklearn.neural_network import MLPRegressor
from sklearn.metrics import mean_squared_error
from sklearn.model_selection import train_test_split, cross_val_score, validation_curve
import numpy as np
import matplotlib.pyplot as plt
data = np.array(read_csv('timeseries_8_2.csv', index_col=0))
inputs = data[:, :8]
targets = data[:, 8:]
x_train, x_test, y_train, y_test = train_test_split(
inputs, targets, test_size=0.1, random_state=2)
rate1 = 0.005
rate2 = 0.1
mlpr = MLPRegressor(hidden_layer_sizes=(12,10), max_iter=700, learning_rate_init=rate1)
# trained = mlpr.fit(x_train, y_train) # should I fit before cross val?
# predicted = mlpr.predict(x_test)
scores = cross_val_score(mlpr, inputs, targets, cv=5)
print(scores)
Scores打印出一个包含5个数字的数组,其中第一个数字通常在0.91左右,并且始终是数组中的最大数字。 我在弄清楚如何处理这些数字时遇到了一些麻烦。因此,如果第一个数字是最大数字,那么这是否意味着在第一次交叉验证尝试中,模型得分最高,然后分数降低,因为它一直试图交叉验证?
另外,在调用交叉验证功能之前,我是否应该对数据进行训练?我试着将它评论出来,它给了我或多或少相同的结果。
答案 0 :(得分:1)
交叉验证功能执行模型拟合作为操作的一部分,因此您无需手动执行任何操作:
以下示例演示了如何通过分割数据,拟合模型并连续5次计算得分(每次使用不同的分割)来估计线性内核支持向量机对虹膜数据集的准确性:
http://scikit-learn.org/stable/modules/cross_validation.html#computing-cross-validated-metrics
是的,返回的数字反映了多次运行:
返回:每次交叉验证运行的估算器得分数组。
最后,没有理由期望第一个结果是最大的:
from sklearn.model_selection import cross_val_score
from sklearn import datasets
from sklearn.neural_network import MLPRegressor
boston = datasets.load_boston()
est = MLPRegressor(hidden_layer_sizes=(120,100), max_iter=700, learning_rate_init=0.0001)
cross_val_score(est, boston.data, boston.target, cv=5)
# Output
array([-0.5611023 , -0.48681641, -0.23720267, -0.19525727, -4.23935449])