【发布时间】:2018-04-02 15:12:06
【问题描述】:
我正在尝试建立一个回归模型,对其进行验证和测试,并确保它不会过度拟合数据。到目前为止,这是我的代码:
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 左右,并且始终是数组中的最大数字。 我很难弄清楚如何处理这些数字。那么如果第一个数字是最大的数字,那么这是否意味着在第一次交叉验证尝试中,模型得分最高,然后随着它不断尝试交叉验证而得分下降?
另外,在调用交叉验证函数之前,我是否应该对数据进行拟合?我试着评论它,它给了我或多或少相同的结果。
【问题讨论】:
-
请了解交叉验证的实际作用。从looking here 开始。在这种情况下,它将不适合您以后使用的模型。它只是为您提供有关模型如何处理数据的信息。一旦您对性能感到满意,就需要对整个数据进行拟合。
-
你可能想看看TimeSeriesSplit
标签: machine-learning scikit-learn regression cross-validation