2016-01-14 16 views
9

私はcsvから得られたデータに対して単純な線形回帰のためのPython scikit-learnを使用しています。 Input contains NaN, infinity or a value too large for dtype('float64').Scikit-learn:フィッティングモデルの誤差 - 入力にNaN、無限大、またはfloat64の値が大きすぎる

どのように私はこのエラーを削除する必要があります。

reader = pandas.io.parsers.read_csv("data/all-stocks-cleaned.csv") 
stock = np.array(reader) 

openingPrice = stock[:, 1] 
closingPrice = stock[:, 5] 

print((np.min(openingPrice))) 
print((np.min(closingPrice))) 
print((np.max(openingPrice))) 
print((np.max(closingPrice))) 

peningPriceTrain, openingPriceTest, closingPriceTrain, closingPriceTest = \ 
    train_test_split(openingPrice, closingPrice, test_size=0.25, random_state=42) 


openingPriceTrain = np.reshape(openingPriceTrain,(openingPriceTrain.size,1)) 

openingPriceTrain = openingPriceTrain.astype(np.float64, copy=False) 
# openingPriceTrain = np.arange(openingPriceTrain, dtype=np.float64) 

closingPriceTrain = np.reshape(closingPriceTrain,(closingPriceTrain.size,1)) 
closingPriceTrain = closingPriceTrain.astype(np.float64, copy=False) 

openingPriceTest = np.reshape(openingPriceTest,(openingPriceTest.size,1)) 
closingPriceTest = np.reshape(closingPriceTest,(closingPriceTest.size,1)) 

regression = linear_model.LinearRegression() 

regression.fit(openingPriceTrain, closingPriceTrain) 

predicted = regression.predict(openingPriceTest) 

最小値と最大値は、しかし、私はこのエラーとValueErrorを取得しています 0.6 41998.0 2593.9

0.0として示したていますか? 上記の結果から、無限またはNan値が含まれていないことは事実です。

この解決策は何ですか?

編集:すべての株式-cleaned.csvがhttp://www.sharecsv.com/s/cb31790afc9b9e33c5919cdc562630f3/all-stocks-cleaned.csv

+0

再現可能な例を提供してください。 – iled

+0

@iled all-stocks-cleaned.csvはhttp://www.sharecsv.com/s/cb31790afc9b9e33c5919cdc562630f3/all-stocks-cleaned.csvから入手できます –

答えて

21

でavaliabaleであるあなたの回帰の問題は何とかNaN年代があなたのデータに潜入していることです。これは、簡単に次のコードスニペットで確認することができます

import pandas as pd 
import numpy as np 
from sklearn import linear_model 
from sklearn.cross_validation import train_test_split 

reader = pd.io.parsers.read_csv("./data/all-stocks-cleaned.csv") 
stock = np.array(reader) 

openingPrice = stock[:, 1] 
closingPrice = stock[:, 5] 

openingPriceTrain, openingPriceTest, closingPriceTrain, closingPriceTest = \ 
    train_test_split(openingPrice, closingPrice, test_size=0.25, random_state=42) 

openingPriceTrain = openingPriceTrain.reshape(openingPriceTrain.size,1) 
openingPriceTrain = openingPriceTrain.astype(np.float64, copy=False) 

closingPriceTrain = closingPriceTrain.reshape(closingPriceTrain.size,1) 
closingPriceTrain = closingPriceTrain.astype(np.float64, copy=False) 

openingPriceTest = openingPriceTest.reshape(openingPriceTest.size,1) 
openingPriceTest = openingPriceTest.astype(np.float64, copy=False) 

np.isnan(openingPriceTrain).any(), np.isnan(closingPriceTrain).any(), np.isnan(openingPriceTest).any() 

(True, True, True) 

あなたは以下のように欠損値を帰しようとした場合:

openingPriceTrain[np.isnan(openingPriceTrain)] = np.median(openingPriceTrain[~np.isnan(openingPriceTrain)]) 
closingPriceTrain[np.isnan(closingPriceTrain)] = np.median(closingPriceTrain[~np.isnan(closingPriceTrain)]) 
openingPriceTest[np.isnan(openingPriceTest)] = np.median(openingPriceTest[~np.isnan(openingPriceTest)]) 

問題なくスムーズに実行されますあなたの回帰:

regression = linear_model.LinearRegression() 

regression.fit(openingPriceTrain, closingPriceTrain) 

predicted = regression.predict(openingPriceTest) 

predicted[:5] 

array([[ 13598.74748173], 
     [ 53281.04442146], 
     [ 18305.4272186 ], 
     [ 50753.50958453], 
     [ 14937.65782778]]) 

要するに、エラーメッセージにはあなたのデータに欠損値があります。

EDIT:

おそらく簡単に、より簡単な方法は、あなたがパンダとのデータを読み取る直後、あなたが欠落しているデータを持っているかどうかを確認するために、次のようになります。

data = pd.read_csv('./data/all-stocks-cleaned.csv') 
data.isnull().any() 
Date     False 
Open      True 
High      True 
Low      True 
Last      True 
Close     True 
Total Trade Quantity  True 
Turnover (Lacs)   True 

、その後転嫁

data = data.fillna(lambda x: x.median()) 

又は

:以下の2つのラインのいずれかでデータ
data = data.fillna(method='ffill') 
+2

ありがとう! - メソッド= ffill働いた! –

+0

np.isnan(openingPriceTrain).any()、np.isnan(closingPriceTrain).any()、np.isnan(openingPriceTest).any() この部分は、ありがとう – Rahul

関連する問題