machine-learning - Keras - 如何使用 KerasRegressor 执行预测?

标签 machine-learning scikit-learn neural-network regression keras

我是机器学习新手,我正在尝试处理 Keras 来执行回归任务。我已经实现了这段代码,基于 this示例。

X = df[['full_sq','floor','build_year','num_room','sub_area_2','sub_area_3','state_2.0','state_3.0','state_4.0']]
y = df['price_doc']

X = np.asarray(X)
y = np.asarray(y)

X_train, X_test, Y_train, Y_test = train_test_split(X, y, test_size=.2)
def baseline_model():
    model = Sequential()
    model.add(Dense(13, input_dim=9, kernel_initializer='normal', 
        activation='relu'))
    model.add(Dense(1, kernel_initializer='normal'))
    model.compile(loss='mean_squared_error', optimizer='adam')
    return model

estimator = KerasRegressor(build_fn=baseline_model, nb_epoch=100, batch_size=100, verbose=False)
kfold = KFold(n_splits=10, random_state=seed)
results = cross_val_score(estimator, X_train, Y_train, cv=kfold)
print("Results: %.2f (%.2f) MSE" % (results.mean(), results.std()))

prediction = estimator.predict(X_test)
accuracy_score(Y_test, prediction)

当我运行代码时,出现此错误:

AttributeError: 'KerasRegressor' object has no attribute 'model'

如何在 KerasRegressor 中正确“插入”模型?

最佳答案

您必须在 cross_val_score 之后再次拟合估计器才能评估新数据:

estimator = KerasRegressor(build_fn=baseline_model, nb_epoch=100, batch_size=100, verbose=False)
kfold = KFold(n_splits=10, random_state=seed)
results = cross_val_score(estimator, X_train, Y_train, cv=kfold)
print("Results: %.2f (%.2f) MSE" % (results.mean(), results.std()))

estimator.fit(X, y)
prediction = estimator.predict(X_test)
accuracy_score(Y_test, prediction)

工作测试版本:

from sklearn import datasets, linear_model
from sklearn.model_selection import cross_val_score, KFold
from keras.models import Sequential
from sklearn.metrics import accuracy_score
from keras.layers import Dense
from keras.wrappers.scikit_learn import KerasRegressor
seed = 1

diabetes = datasets.load_diabetes()
X = diabetes.data[:150]
y = diabetes.target[:150]

def baseline_model():
    model = Sequential()
    model.add(Dense(10, input_dim=10, activation='relu'))
    model.add(Dense(1))
    model.compile(loss='mean_squared_error', optimizer='adam')
    return model


estimator = KerasRegressor(build_fn=baseline_model, nb_epoch=100, batch_size=100, verbose=False)
kfold = KFold(n_splits=10, random_state=seed)
results = cross_val_score(estimator, X, y, cv=kfold)
print("Results: %.2f (%.2f) MSE" % (results.mean(), results.std()))

estimator.fit(X, y)
prediction = estimator.predict(X)
accuracy_score(y, prediction)

关于machine-learning - Keras - 如何使用 KerasRegressor 执行预测?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44132652/

相关文章:

python - 如何从 GridSearchCV 中的每个折叠中获得准确性和 f1 分数?

python - 如何使用Python的FastFM库(分解机)做推荐任务?

python : How to use Multinomial Logistic Regression using SKlearn

python - 获取 pytorch 数据集的子集

machine-learning - Caffe的train.prototxt中平均值的顺序是什么?

machine-learning - 在计算机视觉中使用形状描述符检测对象类别

python - ValueError : The name "dense_1" is used 2 times in the model. 所有图层名称应该是唯一的

python - 使用 Scipy 实现逻辑回归 : Why does this Scipy optimization return all zeros?

python - 用 sk-learn 分类 : handle missing categorical features at prediction

neural-network - 神经网络训练。只有很少的结果