2016-04-17 10 views
0

私はCourseraのMachine Learning:Regressionコースの課題に取り組んでいます。私はkc_house_data.gl/データセットとGraphLab Createを使用しています。私は、古い変数の組み合わせであるtrain_dataとtest_dataに新しい変数を追加しています。そして、私はこれらの変数すべての平均を取る。ここでランタイム例外。 Pythonコールバック関数評価の例外:

bedrooms_squared = bedrooms * bedrooms 

bed_bath_rooms = bedrooms*bathrooms 

log_sqft_living = log(sqft_living) 

lat_plus_long = lat + long 

は私のコードです:

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() 

これは私が取得していますエラーです:

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 

私はこれが何を意味するのか見当がつかないこれらは私が追加してい変数です。それを引き起こした原因や解決方法についての考えはありますか?ありがとう。

答えて

0

あなたの問題は、logが負の数を受け取っていることです。

logは、ゼロより大きい数値に対してのみ定義されます。

値を確認する必要があります。

0

追加してください/あなたのコードをより堅牢にするために例外を学ぶ:

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