2017-02-09 4 views
2

Ich arbeite mit Keras NN mit Theanos Backend, ich arbeite an einem Klassifizierungsproblem mit 14 Ausgabeklassen. Ich möchte die vorhergesagte Klasse plus die zugehörigen Wahrscheinlichkeiten. Das Problem ist, dass die Wahrscheinlichkeiten von predict_proba() nicht mit der vorhergesagten Klasse von predict() übereinstimmen, hier ist der Code plus die resultierende Ausgabe von 1 Probe.Keras Klassifizierer predict_proba() passt nicht zu predict()

PPRANK = ['pp1', 'pp2', 'pp3', 'pp4', 'pp5', 'pp6', 'pp7', 'pp8', 'pp9', 'pp10', 'pp11', 'pp12', 'pp13', 'pp14', 'pp15'] 

FEATURES = (PPRANK) 

# fix random seed for reproducibility 
seed = 7 
np.random.seed(seed) 

data_df = pd.DataFrame.from_csv("data.csv") 
X = np.array(data_df[FEATURES].values) 
Y = (data_df["bres"].replace(14,13).values) 


# define baseline model 
def baseline_model(): 
    # create model 
    model = Sequential() 
    model.add(Dense(8, input_dim=(len(FEATURES)), init='normal', activation='relu')) 
    model.add(Dense(14, init='normal', activation='softmax')) 
    # Compile model 
    model.compile(loss='sparse_categorical_crossentropy', optimizer='adam', metrics=['accuracy']) 
    return model 
#build model 
estimator = KerasClassifier(build_fn=baseline_model, nb_epoch=200, batch_size=5, verbose=0) 

#split train and test 
X_train, X_test, Y_train, Y_test = train_test_split(X, Y, test_size=0.1, random_state=seed) 
estimator.fit(X_train, Y_train) 

#get probabilities 
predictions = estimator.predict_proba(X_test) 

#convert expon to floats 
probs = [[] for x in range(21)] 
tick2 = 0 
for i in range(len(predictions)): 
    tick = 0 
    for x in xrange(14): 
     (predictions[i][(tick)]) = '%.4f' % (predictions[i][(tick)]) 
     probs[(tick2)].append((predictions[i][(tick)])) 
     tick += 1 
    tick2 += 1 

# pprint probabilities 
pp = pprint.PrettyPrinter(indent=0) 
pp.pprint(probs) 

#print class predictions 
print estimator.predict(X_test) 
print Y_test 

Wahrscheinlichkeiten

[0,00000, 0,00030, 0,02360, 0,04329, 0,00019, 0,00069, 0,00120, 0,00030, 0,00559, 0,00410, 0,00510, 0,91549, 0.0, 0.0]

vorhergesagte Klasse

eigentliche Klasse

Es zeigt 12 mit der höchsten Wahrscheinlichkeit von Predict_proba() statt 11 von Predicted(). Danke für jede Hilfe.

Antwort

3

Der Index der Python-Arrays (und hier Klassen) zählt von 0, nicht von 1. Noch ein Blick, 0,91 ist der 12. Wert, da Leute Dinge zählen, aber es ist bei Index = 11 also Vorhersage und Vorhersage_Proba sind konsistent

Für warum nicht 13, die Vorhersage möglicherweise falsch (aber überprüfen Sie, dass Sie nicht die gleiche Art von Fehler dort haben)

Verwandte Themen