Python sklearn Inputer()返回的特征不适合fit函数
我有一个缺少值NaN的特征矩阵,所以我需要首先初始化那些缺少的值。但是,最后一行抱怨并抛出以下错误行: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
预期的序列或类似数组,得到了插补器(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,现在问题已经解决。我想我的火车有一些挥舞的柱子