我有一个很小的数据集,我想尝试使用sklearn中的Multi-layer Perceptron regressor预测相同变量的值。
这就是我正在做的事情:
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.neural_network import MLPRegressor
X_train, X_test, y_train, y_test = train_test_split(X, Y)
scaler = StandardScaler()
scaler.fit(X_train)
X_train = scaler.transform(X_train)
X_test = scaler.transform(X_test)
mlp = MLPRegressor(hidden_layer_sizes=(10,10))
mlp = mlp.fit(X_train,y_train)
test_y = mlp.predict(X_test)现在,训练集由100示例组成。我想要做的是在75和25中将训练集分割四次,以便使用4不同的数据集来训练相同的模型。
这就是我要做的:
c1 = 0
c2 = 25
for i in range(0,4):
xt = X_train[c1:c2]
yt = np.setdiff1d(X_train, xt)
c1 = c2 + 1
c2 = c2 + 25
mlp = mlp.fit(xt ,yt)发布于 2019-03-29 20:16:59
您应该会得到一个错误,因为您在最后一次迭代中访问的X_train超出了它的界限。当然,鉴于X_train只有100个样本。
访问以下形式的数组myArray[a:b]意味着我希望检索从a开始直到b的元素。
因此,您需要更改此行:
c1 = c2 + 1
对于这一条:
c1 = c2
看一看documentation,了解如何访问numpy数组。
发布于 2019-03-29 21:11:19
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.neural_network import MLPRegressor
import numpy as np
from sklearn.model_selection import cross_validate
# Generate some random data
X = np.random.rand(100,5)
Y = np.dot(X, np.random.rand(5))+np.random.rand(100)
# Split into train and test
X_train, X_test, y_train, y_test = train_test_split(X, Y)
# Use 4 fold cross validation on train data
cv_results = cross_validate(MLPRegressor(hidden_layer_sizes=(10,10)), X_train, y_train, cv=4,
scoring=('neg_mean_squared_error'), return_estimator=True)
print (cv_results['test_score'])
# Make predictions on test data
y = np.zeros(len(y_test))
for i, model in enumerate(cv_results['estimator']):
y_hat = model.predict(X_test)
print ("Model {0} MSE Error: {1}".format(i,
mean_squared_error(y_test, y_hat)))
y += y_hat
print ("Average Test MSE Error: {0}".format(
mean_squared_error(y_test, y/len(models))))代码在注释中进行了解释。我们将数据分为训练数据和隐藏测试数据。我们对训练数据做了4倍的CV。它如下图所示。

https://stackoverflow.com/questions/48668186
复制相似问题