Python sklearn Inputer()返回的特征不适合fit函数

Python sklearn Inputer()返回的特征不适合fit函数,python,machine-learning,scikit-learn,Python,Machine Learning,Scikit Learn,我有一个缺少值NaN的特征矩阵,所以我需要首先初始化那些缺少的值。但是,最后一行抱怨并抛出以下错误行: 预期的序列或类似数组,得到了插补器(axis=0,copy=True,缺少_值='NaN',strategy='mean',verbose=0)。 我检查过了,原因似乎是输入的序列不是np.array格式,而是sklearn.preprocessing.imputation.imputation形式。我应该如何解决这个问题? 顺便说一句,如果我使用train\u fea\u imputed=i

我有一个缺少值NaN的特征矩阵,所以我需要首先初始化那些缺少的值。但是,最后一行抱怨并抛出以下错误行:
预期的序列或类似数组,得到了插补器(axis=0,copy=True,缺少_值='NaN',strategy='mean',verbose=0)
。 我检查过了,原因似乎是输入的序列不是np.array格式,而是sklearn.preprocessing.imputation.imputation形式。我应该如何解决这个问题?
顺便说一句,如果我使用train\u fea\u imputed=imp.fit\u transform(train\u fea),代码可以正常工作,但是train\u fea\u imputed返回的数组比train\u fea小1维

    import pandas as pd
    import numpy as np
    from sklearn.ensemble import RandomForestClassifier
    from sklearn.preprocessing import Imputer

    imp = Imputer(missing_values='NaN', strategy='mean', axis=0)
    train_fea_imputed = imp.fit(train_fea)

    # train_fea_imputed = imp.fit_transform(train_fea)
    rf = RandomForestClassifier(n_estimators=5000,n_jobs=1, min_samples_leaf = 3)
    rf.fit(train_fea_imputed, train_label)
更新:我改为

imp = Imputer(missing_values='NaN', strategy='mean', axis=1)

现在维度问题没有发生。我认为插补函数中存在一些固有的问题。当我完成项目时,我会回来。

使用scikit学习,初始化模型,训练模型和获得预测是分开的步骤。就您而言,您有:

train_fea = np.array([[1,1,0],[0,0,1],[1,np.nan,0]])
train_fea
array([[  1.,   1.,   0.],
       [  0.,   0.,   1.],
       [  1.,  nan,   0.]])

#initialise the model
imp = Imputer(missing_values='NaN', strategy='mean', axis=0)

#train the model
imp.fit(train_fea)

#get the predictions
train_fea_imputed = imp.transform(train_fea)
train_fea_imputed
array([[ 1. ,  1. ,  0. ],
       [ 0. ,  0. ,  1. ],
       [ 1. ,  0.5,  0. ]])

使用
scikit学习
,初始化模型、训练模型和获得预测是不同的步骤。就您而言,您有:

train_fea = np.array([[1,1,0],[0,0,1],[1,np.nan,0]])
train_fea
array([[  1.,   1.,   0.],
       [  0.,   0.,   1.],
       [  1.,  nan,   0.]])

#initialise the model
imp = Imputer(missing_values='NaN', strategy='mean', axis=0)

#train the model
imp.fit(train_fea)

#get the predictions
train_fea_imputed = imp.transform(train_fea)
train_fea_imputed
array([[ 1. ,  1. ,  0. ],
       [ 0. ,  0. ,  1. ],
       [ 1. ,  0.5,  0. ]])

我认为axis=1在这种情况下是不正确的,因为您希望对特征向量/列(axis=0)的值取平均值,而不是行(axis=1)。

我认为axis=1在这种情况下是不正确的,因为您希望对特征向量/列(axis=0)的值取平均值,而不是行(axis=1).

你能用虚拟值制作一个样本
train\u fea
train\u标签
,这样我就可以在我的计算机上运行它了吗?e、 g.像@bakkal这样,我想你可以使用numpy生成随机矩阵,并用NaN屏蔽它们。你能用伪值制作一个样本
train\u fea
train\u标签
,这样我就可以在我的计算机上运行它了吗?e、 g.如@bakkal所示,我认为您可以使用numpy生成随机矩阵,并使用NaN对其进行屏蔽,以进行尝试。您的解决方案确实返回了使用比我的原始train_fea更低维度输入的train_fea_。我认为这相当于直接应用fit_变换。我的问题是,我需要稍后在随机林中应用特性_分数。如果我的维度较少,我就无法将分数与特征名称关联。我在答案中添加了一个示例矩阵,我似乎没有维度方面的问题?我更改了输入参数axis=1,现在问题已经解决。我认为我的train_fea有一些挥舞柱。我们的解决方案确实返回了以低于我的原始train_fea的尺寸输入的train_fea。我认为这相当于直接应用fit_变换。我的问题是,我需要稍后在随机林中应用特性_分数。如果我的维度较少,我就无法将分数与特征名称关联。我在答案中添加了一个示例矩阵,我似乎没有维度方面的问题?我更改了输入参数axis=1,现在问题已经解决。我想我的火车有一些挥舞的柱子