Sklearn中的PCA -valueerror:数组不得包含infs或nans



我正在尝试使用网格搜索来选择数据的主组件数量,然后再将数据拟合到线性回归中。我很困惑如何制作我想要的主要组件数量的字典。我将列表放入param_grid参数中的字典格式中,但我认为我做错了。到目前为止,我已经警告包含infs或nans的数组。

我正在按照管道线性回归到PCA的说明:http://scikit-learn.org/stable/auto_examples/plot_digits_pipe.html

valueerror:数组不得包含infs或nans

我能够在可重复的示例上遇到相同的错误,我的真实数据集更大:

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

编辑:我为Fit语句放入Y,但它仍然给了我同样的错误。但是,这是我的数据集而不是可重复的示例。

i在 scikit-learn 0.18.1.

中实现PCA可能有问题

请参阅错误报告https://github.com/scikit-learn/scikit-learn/issues/7568

描述的解决方法是将PCA与svd_solver='full'一起使用。因此,尝试此代码:

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

这是我写的一些代码。似乎对我有用。请注意,当您调用fit时,您需要为其提供培训数据(即Y 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_)

打印语句将向您展示最好的n_components。没有y,您将无法计算RSS,也无法分辨出什么是"最好的"。

相关内容

  • 没有找到相关文章

最新更新