4

私は、機械学習に新しいです、と私は回帰タスクを実行するKerasを処理しようとしています。私はthisの例に基づいてこのコードを実装しました。私は、コードを実行するとKeras - KerasRegressorを使用して予測を実行するにはどうすればよいですか?

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でモデルを '挿入' だろうか?

+0

完全なスタックトレースを投稿できますか? –

+0

見積もりにはどこですか? –

+0

@AbhishekThakur 'cross_val_score'は、見積もりに合っています。 –

答えて

7

新しいデータに評価する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) 
+0

を持っている私は前にこのソリューションを試してみましたが、私は同じ結果を得る: 'はAttributeError:「KerasRegressor」オブジェクトが「何の属性を持っていないmodel'' – Simone

+0

あなたが持っていますこの行は 'estimator.fit(X、y)'ですか? –

+0

はい、私はちょうど '予測= estimator.predict(X_test)' – Simone

2

システムのパフォーマンスの評価のために、あなたがエラーを計算することができます次のように。 また、KFoldとcross_val_scoreを呼び出す必要はありません。

import numpy as np 
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) 
estimator.fit(X, y) 
prediction = estimator.predict(X) 

train_error = np.abs(y - prediction) 
mean_error = np.mean(train_error) 
min_error = np.min(train_error) 
max_error = np.max(train_error) 
std_error = np.std(train_error) 
1

kerasRegressorではなく、モデル自体を直接使用することができます。コードの これら二つのスニペットは、まったく同じ結果が得られ:

estimator = KerasRegressor(build_fn=baseline_model) 
estimator.fit(X, y, nb_epoch=100, batch_size=100, verbose=False, shuffle=False) 
prediction = estimator.predict(X) 


model = baseline_model() 
model.fit(X, y, nb_epoch=100, batch_size=100, verbose=False, shuffle=False) 
prediction = model.predict(X) 

がkerasRegressorとモデルの両方のためのフィットのシャッフル()関数の引数がFalseにする必要がありますのでご注意ください。さらに、初期状態を固定して再現性のある結果を得るには、スクリプトの冒頭に以下のコード行を追加する必要があります:

import random as rn 
rn.seed(1) 
np.random.seed(1)  
tf.set_random_seed(1) 
session_conf = tf.ConfigProto(intra_op_parallelism_threads=1, inter_op_parallelism_threads=1) 
sess = tf.Session(graph=tf.get_default_graph(), config=session_conf) 
K.set_session(sess) 
関連する問題