2017-07-07 3 views
0

Ich trainiere ein logistisches Regressionsmodell mit sklearn LogisticRegression. Ich erhalte einen TypeError, wenn ich versuche, den Testsatz vorherzusagen.Sklearn Vorhersage python3.5

Code:

test_features=test[["Sex","Age","Pclass","Fare","Embarked"]].values 
myprediction=myfit2.predict(test_features) 

ERROR:

float() argument must be a string or a number

ich die Syntax ein paar times.Could dies sein geprüft habe, weil ich mit Python bin 3.5. Weil dies auf Python 2.7 gut zu funktionieren scheint. Würde mich sehr über Hilfe freuen, um diesen Fehler zu beheben.

+0

können Sie den Test-Datensatz hochladen ? haben Sie auch NaN oder Strings in diesem Testdatensatz? – sera

+0

https://www.kaggle.com/c/titanic/data Ich habe alle NaNs imputiert und alle kategorischen Variablen durch Strings ersetzt, mit ganzen Zahlen, bevor es in die Vorhersagefunktion eingegeben wurde –

+0

Das Problem ist, dass Sie "Sex" verwenden enthält Zeichenfolgen und keine Zahlen. Die Funktion predict() übernimmt als Eingabe nur einen Datensatz mit Zahlen. Du musst "sex" in binär wie 1 für Männer und 0 für Frauen umwandeln. – sera

Antwort

0

Das Problem ist, dass die Daten enthalten NaN:

Code:

import pandas as pd 
from numpy import nanmean 
import numpy as np 
from sklearn.linear_model import LogisticRegression 

train = pd.read_csv("train.csv") 
test = pd.read_csv("test.csv") 

test["Sex"][test["Sex"]=="male"]=0 
test["Sex"][test["Sex"]=="female"]=1 
test["Embarked"][test["Embarked"]=='S']=0 
test["Embarked"][test["Embarked"]=='C']=1 
test["Embarked"][test["Embarked"]=='Q']=2 

train["Sex"][train["Sex"]=="male"]=0 
train["Sex"][train["Sex"]=="female"]=1 
train["Embarked"][train["Embarked"]=='S']=0 
train["Embarked"][train["Embarked"]=='C']=1 
train["Embarked"][train["Embarked"]=='Q']=2 

nan_mean_age = nanmean(test.iloc[:,4]) 
test = test.fillna(value = nan_mean_age) 

nan_mean_age2 = nanmean(train.iloc[:,5]) 
train = train.fillna(value = nan_mean_age2) 

train_features=train[["Sex","Age","Pclass","Fare","Embarked"]].values 
test_features=test[["Sex","Age","Pclass","Fare","Embarked"]].values 

train_features = np.asarray(train_features) 
test_features = np.asarray(test_features) 

lg = LogisticRegression() 
#define your target variable y and then fit 
y_train = train.iloc[:,1] 

lg.fit(train_features,y_train) 
lg.predict(test_features) 

Ergebnis:

array([0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 0, 0, 1, 0, 1, 1, 0, 0, 1, 0, 0, 0, 1, 
     1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 1, 0, 0, 0, 0, 0, 1, 1, 0, 
     0, 0, 1, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 0, 1, 
     1, 1, 0, 1, 1, 1, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 
     1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 
     0, 0, 1, 0, 1, 1, 0, 1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 
     1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 1, 0, 1, 1, 
     0, 1, 0, 0, 1, 0, 0, 1, 1, 0, 0, 0, 0, 0, 1, 1, 0, 1, 1, 0, 0, 1, 0, 
     1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 1, 0, 0, 1, 0, 1, 1, 
     0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 1, 0, 1, 0, 0, 
     0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 1, 0, 1, 1, 1, 0, 1, 
     0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 0, 1, 
     0, 0, 0, 0, 1, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 
     0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 
     0, 0, 1, 0, 1, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
     1, 0, 1, 0, 1, 1, 0, 0, 0, 1, 0, 1, 0, 0, 1, 0, 1, 1, 0, 1, 1, 0, 1, 
     1, 0, 0, 1, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 1, 1, 0, 1, 0, 0, 0, 0, 1, 
     1, 0, 0, 0, 1, 0, 1, 0, 0, 1, 0, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 
     1, 0, 0, 0], dtype=int64) 

So etwas sollte gut funktionieren

+0

Schon das erste Mal gemacht ** code: ** test ["Sex"] [test ["Sex"] == "männlich"] = 0 test ["Sex"] [test ["Sex"] == "weiblich"] = 1 test ["Eingetreten"] [test ["Eingekoppelt"] == 'S'] = 0 test [" Einmarsch "] [test [" Einmarsch "] == 'C'] = 1 test [" Einmarsch "] [test [" Einmarsch "] == 'Q'] = 2 Und das selbe für den Zug auch –

+0

@PoojaRavichandran sehe meine neue Lösung. Sie müssen die Nan ersetzen – sera

+0

Ich habe alle NaN mit dem Mittelwert des Alters ersetzt. –