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'

어떻게 수 I 제대로 '삽입'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

예,'prediction = 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 및 모델 모두 적합의 셔플 인수() 함수는 거짓이 될 필요가 있습니다. 또한 고정 된 초기 상태를 유지하고 재현 가능한 결과를 얻으려면 스크립트 시작 부분에 다음 코드 줄을 추가해야합니다.

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) 
관련 문제