2017-07-31 4 views
0

Je suis en train de créer un pipeline pour m'aider à traiter certaines données en: Imputant la moyenne, mise à l'échelle des données, puis ajustement d'un régresseur. Je rencontre des problèmes avec l'Imputer, et peut-être l'utiliser incorrectement. Je sais que mes données contiennent des NaN; mais quand je tente de les imput dans un pipeline, je reçois un ValueError:Erreur Pipeline Imputer "Entrée contient NaN"

Traceback (most recent call last): 

File "<ipython-input-124-8517b294cb64>", line 1, in <module> 
modelBuild(df) 

File "C:/Users/tmori/Google Drive/Projects/Product Dimension Accuracy/Qubert_PredictiveModel/qubert_predictive_model.py", line 81, in modelBuild 
clf_x = pipeline.fit_transform(df[['OverallHeight-ToptoBottom', 'OverallDepth-FronttoBack']], df['OverallWidth-SidetoSide']) 

File "C:\Program Files\Anaconda\lib\site-packages\sklearn\pipeline.py", line 303, in fit_transform 
return last_step.fit_transform(Xt, y, **fit_params) 

File "C:\Program Files\Anaconda\lib\site-packages\sklearn\base.py", line 497, in fit_transform 
return self.fit(X, y, **fit_params).transform(X) 

File "C:\Program Files\Anaconda\lib\site-packages\sklearn\ensemble\forest.py", line 248, in fit 
y = check_array(y, accept_sparse='csc', ensure_2d=False, dtype=None) 

File "C:\Program Files\Anaconda\lib\site-packages\sklearn\utils\validation.py", line 407, in check_array 
_assert_all_finite(array) 

File "C:\Program Files\Anaconda\lib\site-packages\sklearn\utils\validation.py", line 58, in _assert_all_finite 
" or a value too large for %r." % X.dtype) 

ValueError: Input contains NaN, infinity or a value too large for dtype('float64'). 

Mon code ressemble à ceci jusqu'à présent:

def modelBuild(df): 
    imp = Imputer() 
    scl = StandardScaler() 
    clf = RandomForestRegressor()  
    pipeline = Pipeline([('imputer', imp), 
         ('scaler', scl), 
         ('clf', clf)]) 
    clf_x = pipeline.fit_transform(df[['OverallHeight-ToptoBottom', 'OverallDepth-FronttoBack']], df['OverallWidth-SidetoSide']) 

et un exemple des données de dataframe:

StagName OverallDepth-FronttoBack OverallHeight-ToptoBottom \ 
PtagPrSKU               
AABP1004      NaN      48.0 
AAI2179      28.0      32.0 
AAI2180      28.0      32.0 
AAI2181      36.0      32.0 
AAI2182      36.0      32.0 

StagName OverallWidth-SidetoSide 
PtagPrSKU       
AABP1004      64.0 
AAI2179      55.0 
AAI2180      55.0 
AAI2181      71.0 
AAI2182      71.0 

Je suis assez sûr que je n'utilise pas correctement l'Imputer, mais je ne peux pas pour la vie de moi localiser où.

Merci d'avance pour toute l'aide!

Best, Tom

+0

Le problème dans votre code est la ligne PtagPrSKU que vous avez dans la base de données. Vois ma réponse. – sera

Répondre

0

Essayez de supprimer la ligne PtagPrSKU. Donc, après les noms de colonnes, vous devriez simplement avoir leurs valeurs. Le moyen le plus simple de le faire est d'utiliser des pandas et de définir des pistes de ski lors du chargement des données.

Ce qui suit fonctionne bien pour moi.

Le problème

La ligne PtagPrSKU insère une cellule vide pour chaque colonne (ce qui est le problème).

Le fichier que j'ai utilisé pour cet exemple peut être trouvé ici link

from sklearn.preprocessing import Imputer 
from sklearn.preprocessing import StandardScaler 
from sklearn.ensemble import RandomForestRegressor 
from sklearn.pipeline import Pipeline 
import pandas as pd 



def buildit(df): 
    imp = Imputer() 
    scl = StandardScaler() 
    clf = RandomForestRegressor()  
    pipeline = Pipeline([('imputer', imp), ('scaler', scl), ('clf', clf)]) 
    clf_x = pipeline.fit_transform(df[['OverallHeight-ToptoBottom', 'OverallDepth-FronttoBack']], df['OverallWidth-SidetoSide']) 

    return clf_x 



df = pd.read_excel('t.xlsx',skiprows=[1]) 
print(df) 
buildit(df) 
0

Modifier votre identifiant de valeur manquante de « np.nan » à autre chose (peut-être 0 ou un très grand nombre). J'ai eu le même problème et cela a fonctionné pour moi.