2017-11-16 5 views
0

Ich verwende pybrain, um Hauspreise im Hauspreisdatensatz vorherzusagen. Ich habe die Datenmenge von unten Link: https://www.kaggle.com/apratim87/housingdata/dataHauspreisvoraussage mit Neural Network- network nicht lernen

I 6 Spalten nahm den Preis 'Schlafzimmer', 'Bad', 'sqft_living', 'sqft_lot', 'Etagen', 'zipcode'

vorherzusagen Ich nahm ein neurales Netzwerk mit 6 Eingabeeinheiten, 1 versteckte Schicht mit 3 Neuronen und 1 Einheit in der Ausgabe.

Ich habe die Daten normalisiert. Code ist wie folgt:

house_df = pd.read_csv("kc_house_data.csv") 
print(house_df.head()) 
df = house_df.dropna(axis=0) 
df = df[(df != 0).all(1)] 
df.reset_index(drop=True,inplace=True) 
X_org=house_df[['bedrooms','bathrooms','sqft_living','sqft_lot','floors','zipcode']] 
y_org=house_df[['price']] 


scaler = Normalizer().fit(X_org) 
X = scaler.transform(X_org) 
target_scaler = preprocessing.MinMaxScaler() 
y=target_scaler.fit_transform(y_org) 

ds=SupervisedDataSet(X.shape[1],y.shape[1]) 
for i in range(len(X)): 
    ds.addSample(X.iloc[i,:].values,y.iloc[i,:].values) 

train,rest=ds.splitWithProportion(0.60) 
test,validation=rest.splitWithProportion(0.50) 

print('Training Set Size='+str(len(train))) 
print('Test Set Size='+str(len(test))) 
print('Validation Set Size='+str(len(validation))) 

#creating a neural network 
def buildNN(invar,hidden,out): 
    net=buildNetwork(invar,hidden,out,hiddenclass=SigmoidLayer,outclass=SoftmaxLayer) 
    trainer=BackpropTrainer(net,dataset=train,momentum=0.1,verbose=True,weightdecay=0.01) 
    trn_err,val_err=trainer.trainUntilConvergence(dataset=train,maxEpochs=50) 

    #trainer.trainOnDataset(trndata,500) 
    tst,=plt.plot(trn_err,'b',label='Test Error') 
    vali,=plt.plot(val_err,'r',label='Validation Error') 
    plt.legend(handles=[tst, vali]) 
    plt.ylabel('Error') 
    plt.xlabel('Number of Epochs') 
    plt.show() 
    #testing it on test data 
    out=net.activateOnDataset(test).argmax(axis=1) 
    test_error=percentError(out,test['price']) 
    #on validation data 
    out=net.activateOnDataset(validation).argmax(axis=1) 
    vali_error=percentError(out,validation['price']) 
    return test_error,vali_error 

print('Neaural network with 6 input, 3 hidden units, 1 output') 
nn3_testerr,nn3_valierr=buildNN(6,3,1) 

ich konstant Fehler und mein Programm lernt nicht. Können Sie mir bitte vorschlagen, was das Problem sein könnte?

Gesamtfehler: ,441892335278 Gesamtfehler: ,441892335278 Gesamtfehler: ,441892335278 Gesamtfehler: ,441892335278 Gesamtfehler: ,441892335278 Gesamtfehler: ,441892335278 Gesamtfehler: ,441892335278 Gesamtfehler: ,441892335278 Gesamtfehler: ,441892335278 Gesamt Fehler: ,441892335278 Gesamtfehler: ,441892335278 Gesamtfehler: ,441892335278 Gesamtfehler: 0,441892335278

+0

Welche Fehler bekommen Sie? – QHarr

+0

Vielen Dank für Ihre Antwort. Ich bekomme einen konstanten quadratischen Fehler. Das Netzwerk lernt nicht. – user1690117

+0

Ist das die vollständige Fehlermeldung an der Unterseite? Gesamtfehler: 0.441892335278 ..... – QHarr

Antwort

0

Idealerweise Sie müssen zwei dichte Schichten und eine höhere Anzahl von Neuronen pro Schicht haben. Ein weiterer wichtiger Punkt ist die mittlere Normalisierung Ihrer Feature-Matrix. Versuchen Sie Relu oder Elu anstelle von Sigmoid als Aktivierungsfunktion.

0

gibt es viele Möglichkeiten, NN Leistung zu verbessern

1) zwicken die Geometrie (add Schichten Änderungsschicht Größe)

2) ändern, um die Aktivierungsfunktion

3) Änderung Schrittgröße/spielen, um Schwung

4) mit Datenvorverarbeitung

Sie sollten alle diese versuchen und verschiedene Kombinationen von allen von diesen. Aus einem kurzen Blick, eine einzelne Schicht, mit nur drei Neuronen wird nicht sehr robust sein, also fang dort an.

Können Sie dieses Netzwerk konvergieren auf ein einfaches Beispiel wie xor?

Verwandte Themen