我对机器学习是新手,正在尝试使用Keras来执行回归任务。我基于这个例子实现了以下代码。
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 modelestimator = 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_modelfrom sklearn.model_selection import cross_val_score, KFoldfrom keras.models import Sequentialfrom sklearn.metrics import accuracy_scorefrom keras.layers import Densefrom keras.wrappers.scikit_learn import KerasRegressorseed = 1diabetes = 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 modelestimator = 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)