2016-12-19 10 views
0

グリッド検索を使用して線形回帰に入る前にデータの主成分数を選択しようとしています。私が欲しい主成分の数の辞書を作る方法が混乱しています。 param_gridパラメータにリストを辞書形式で入れるが、間違っていると思う。これまでは、infsまたはNaNを含む配列について警告を受けました。SklearnのPCA - ValueError:配列にinfまたはNaNを含めることはできません

私はPCAへの線形回帰をパイプラインからの指示に従ってています:http://scikit-learn.org/stable/auto_examples/plot_digits_pipe.html

とValueError:私は再現性の例に同じエラーを取得することができた

、私の本当の

のINFまたはNaNを含んではならない配列

import pandas as pd 
import numpy as np 
from sklearn.decomposition import PCA 
from sklearn.linear_model import LinearRegression 
from sklearn.pipeline import Pipeline 
from sklearn.model_selection import GridSearchCV 

df2 = pd.DataFrame({ 'C' : pd.Series(1, index = list(range(8)),dtype = 'float32'), 
        'D' : np.array([3] * 8,dtype = 'int32'), 
        'E' : pd.Categorical(["test", "train", "test", "train", 
        "test", "train", "test", "train"])}) 

df3 = pd.get_dummies(df2) 

lm = LinearRegression() 

pipe = [('pca',PCA(whiten=True)), 
     ('clf' ,lm)] 

pipe = Pipeline(pipe) 


param_grid = { 
    'pca__n_components': np.arange(2,4)} 

X = df3.as_matrix() 

CLF = GridSearchCV(pipe, param_grid = param_grid, verbose = 1, cv = 3) 

y = np.random.normal(0,1,len(X)).reshape(-1,1) 

CLF.fit(X,y) 

ValueError: array must not contain infs or NaNs 

EDIT:データセットが大きくなって、私はフィットfor文のyに入れて、それはまだ私に同じエラーを与えました。しかし、これは私のデータセットの再現可能な例ではありませんでした。

+0

あなたは 'np.any(np.isnan(X_mat))を実行し'と私の戻り値を教えてくださいことはできますか? –

+0

私のデータセットでは、「False」が返されます –

答えて

1

ここに私が書いたコードがあります。それは私のために働くようです。 fitに電話するときは、トレーニングデータ(Yベクトル)を入力する必要があります。

import pandas as pd 
import numpy as np 
from sklearn.decomposition import PCA 
from sklearn.linear_model import LinearRegression 
from sklearn.pipeline import Pipeline 
from sklearn.model_selection import GridSearchCV 



df2 = pd.DataFrame({ 'C' : pd.Series(1, index = list(range(8)),dtype = 'float32'), 
        'D' : np.array([3] * 8,dtype = 'int32'), 
        'E' : pd.Categorical(["test", "train", "test", "train", 
        "test", "train", "test", "train"])}) 

df3 = pd.get_dummies(df2) 

lm = LinearRegression() 

pipe = [('pca',PCA(whiten=True)), 
     ('clf' ,lm)] 

pipe = Pipeline(pipe) 


param_grid = { 
    'pca__n_components': np.arange(2,4), 
} 

X = df3.as_matrix() 

CLF = GridSearchCV(pipe, param_grid = param_grid, verbose = 1, cv = 3) 

y = np.random.normal(0,1,len(X)).reshape(-1,1) 

CLF.fit(X,y) 

print(CLF.best_params_) 

printステートメントはあなたに最高のn_componentsを表示します。 yがなければ、RSSを計算することはできず、何が「最良」であるかを知ることはできません。

+0

ありがとうございました@Demetri P、そうです、私はGridsearchCVのyを含んでいません。私はGridsearchCVの代わりにPCAにfitパラメータを使用しようとしていました。しかし、私はデータセットにymatrixを収めようとしていましたが(再現可能な例では動作しますが)、同じエラーが発生しました。私は編集を –

+0

@ScottDavisHmmに入れます。それは厳しいです。私はこのアイデアから外れているのではないかと心配しています。 –

5

私は、バグレポートhttps://github.com/scikit-learn/scikit-learn/issues/7568

説明回避策はsvd_solver='full'でPCAを使用することです参照してくださいscikit-learn 0.18.1.

にPCAの実装に問題がある可能性があります。 ので、このコードを試してみてください。

pipe = [('pca',PCA(whiten=True,svd_solver='full')), 
     ('clf' ,lm)] 
関連する問題