2016-04-17 7 views
0

Ich arbeite an einer Aufgabe für Courseras Machine Learning: Regression Kurs. Ich verwende den Datensatz kc_house_data.gl/ und GraphLab Create. Ich füge neue Variablen zu train_data und test_data hinzu, die Kombinationen alter Variablen sind. Dann nehme ich den Mittelwert all dieser Variablen. Dies sind die Variablen Ich addiere:Laufzeitausnahme. Ausnahme in der Python Callback Funktion Auswertung:

bedrooms_squared = bedrooms * bedrooms 

bed_bath_rooms = bedrooms*bathrooms 

log_sqft_living = log(sqft_living) 

lat_plus_long = lat + long 

Hier ist mein Code:

train_data['bedrooms_squared'] = train_data['bedrooms'].apply(lambda x: x**2) 
test_data['bedrooms_squared'] = test_data['bedrooms'].apply(lambda x: x**2) 
# create the remaining 3 features in both TEST and TRAIN data 
train_data['bed_bath_rooms'] = train_data.apply(lambda row: row['bedrooms'] * row['bathrooms']) 
test_data['bed_bath_rooms'] = test_data.apply(lambda row: row['bedrooms'] * row['bathrooms']) 

train_data['log_sqft_living'] = train_data['sqft_living'].apply(lambda x: log(x)) 
test_data['log_sqft_living'] = test_data['bedrooms'].apply(lambda x: log(x)) 
train_data['lat_plus_long'] = train_data.apply(lambda row: row['lat'] + row['long']) 
train_data['lat_plus_long'] = train_data.apply(lambda row: row['lat'] + row['long']) 
test_data['bedrooms_squared'].mean() 
test_data['bed_bath_rooms'].mean() 
test_data['log_sqft_living'].mean() 
test_data['lat_plus_long'].mean() 

Dies ist der Fehler Ich erhalte:

RuntimeError: Runtime Exception. Exception in python callback function evaluation: 
ValueError('math domain error',): 
Traceback (most recent call last): 
    File "graphlab\cython\cy_pylambda_workers.pyx", line 426, in graphlab.cython.cy_pylambda_workers._eval_lambda 
    File "graphlab\cython\cy_pylambda_workers.pyx", line 169, in graphlab.cython.cy_pylambda_workers.lambda_evaluator.eval_simple 
    File "<ipython-input-13-1cdbcd5f5d9b>", line 5, in <lambda> 
ValueError: math domain error 

Ich habe keine Ahnung, was das bedeutet . Irgendeine Idee darüber, was es verursacht hat und wie ich es repariere? Vielen Dank.

Antwort

0

Ihr Problem ist, dass log eine negative Zahl erhält.

log ist nur für Zahlen größer als Null definiert.

Sie müssen Ihre Werte überprüfen.

0

Bitte addieren/lernen Ausnahmen Ihren Code robuster zu machen:

try: 
    train_data['log_sqft_living'] = train_data['sqft_living'].apply(lambda x: log(x)) 
    test_data['log_sqft_living'] = test_data['bedrooms'].apply(lambda x: log(x)) 
    train_data['lat_plus_long'] = train_data.apply(lambda row: row['lat'] + row['long']) 
    train_data['lat_plus_long'] = train_data.apply(lambda row: row['lat'] + row['long']) 
    test_data['bedrooms_squared'].mean() 
    test_data['bed_bath_rooms'].mean() 
    test_data['log_sqft_living'].mean() 
    test_data['lat_plus_long'].mean() 
except e as Exception: 
    print "ERROR in function:", e 
Verwandte Themen