Python SKLearn拟合值错误输入

Python SKLearn拟合值错误输入,python,machine-learning,scikit-learn,jupyter-notebook,valueerror,Python,Machine Learning,Scikit Learn,Jupyter Notebook,Valueerror,我试图拟合和转换一些数据,以便稍后在模型中使用到分类器,但它总是给我一个错误,我不明白为什么。 拜托,有人能帮我吗 ##stores the function Pipeline with parameters decided above inputPipe = getPreProcPipe(normIn=normIn, pca=pca, pcaN=pcaN, whiten=whiten) print inputPipe print #print devData[classTrainFe

我试图拟合和转换一些数据,以便稍后在模型中使用到分类器,但它总是给我一个错误,我不明白为什么。 拜托,有人能帮我吗

##stores the function Pipeline with parameters decided above    
inputPipe = getPreProcPipe(normIn=normIn, pca=pca, pcaN=pcaN, whiten=whiten)
print inputPipe
print

#print devData[classTrainFeatures].values.astype('float32')

print devData[classTrainFeatures].shape
print type(devData[classTrainFeatures].values)

##fit pipeline to inputs features and types
inputPipe.fit(devData[classTrainFeatures].values.astype('float32'))

##transform inputs X
X_class = inputPipe.transform(devData[classTrainFeatures].values.astype(double))
## Output Y, i.e, 0 or 1 as it is the target
Y_class = devData['gen_target'].values.astype('int')
#print Y_class
输出:

Pipeline(memory=None,
 steps=[('pca', PCA(copy=True, iterated_power='auto', n_components=None, random_state=None,
svd_solver='auto', tol=0.0, whiten=False)), ('normPCA', StandardScaler(copy=True, with_mean=True, with_std=True))])

(32583, 2)
<type 'numpy.ndarray'>


我认为这类错误有三种可能:

  • 您的数据中可能有INF。在这种情况下,您可能需要删除这些样本。要查找INF,请尝试<代码>测向索引[np.isinf(测向).any(1)]
  • 您的数据中可能有NAN。使用
    df.index[np.isnan(df.any(1)]
    检查它。在这种情况下,可以用doing
    df.fillna(df.mean()).dropna(axis=1,how='all')
    列的平均值替换NAN
  • 最后,但最有可能的是,你有一个常量或几乎常量的特征,一旦它被标准化并除以标准偏差,就会得到NaN或InF。在这种情况下,您应该使用

  • 如果数据包含NaN(不是数字值),则必须检查所使用的数据(不是代码),在numpy中有函数
    .isnan()
    ()

    还可以使用
    .isinf()

    在这个kaggle内核中,有一个示例代码,用于在数据集中填充NAN和INF,然后用于分类器,另请参见
    interpolate()

    删除包含NAN和INF的行由

    indx = devData[classTrainFeatures].index[devData[classTrainFeatures].apply(np.isnan)]
    devData=devData.drop(devData.index[indx]).copy()
    devData=devData.reset_index(drop=True)
    

    (获取NaN的索引,使用索引删除包含NaN的所有行,重置dataframe的索引)

    请以明文形式添加代码和错误,以便于帮助您。另请参阅:您能提供一个包含错误的最小可执行示例吗?我添加了thoseI的输出bellow,我添加了thoseI的输出bellow
    indx = devData[classTrainFeatures].index[devData[classTrainFeatures].apply(np.isnan)]
    devData=devData.drop(devData.index[indx]).copy()
    devData=devData.reset_index(drop=True)