def preprocess(numerical , categorical):
imputer = SimpleImputer()
x_num = imputer.fit_transform(numerical)
scaler = StandardScaler()
x_num = scaler.fit_transform(x_num)
one_hot = OneHotEncoder()
x_cat = one_hot.fit_transform(categorical)
print('X_num Shape : ' , x_num.shape)
print('X_cat Shape : ' , x_cat.shape)
return np.concatenate((x_num,x_cat),axis = 1)
[Output] X_num Shape : (889, 2)
X_cat Shape : (889, 22)
最后显示的错误是ValueError: all the input arrays must have same number of dimensions, but the array at index 0 has 2 dimension(s) and the array at index 1 has 0 dimension(s)
我希望输出的形状为(889,24)
最后一句话(索引1的数组的维数为0)使我认为问题与形状为(n,)和(,n)的怪异的numpy数组有关,但这不应该是问题,因为维数是显示不是那样,但我认为我缺少某些东西
我也尝试使用许多不同的功能np.hstack , np.vstack , np.column_stack
,但它们要么不提供所需的输出,要么显示此错误消息ValueError: all the input array dimensions for the concatenation axis must match exactly, but along dimension 1, the array at index 0 has size 2 and the array at index 1 has size 1
答案 0 :(得分:0)
因此,如上面的hpaulj所述,问题是从OneHotEncoder出来后的x_cat
的类型为<class 'scipy.sparse.csr.csr_matrix'>
而不是不能与其他numpy数组连接的numpy数组,这导致它被转换连接时,将其转换为一个numpy数组,并且使用shape命令将其尺寸为()
。不知道这是否意味着它变平,但是当我尝试使用reshape时,它没有起作用并说ValueError: cannot reshape array of size 1 into shape (889,22)
我要解决的问题是将行one_hot = OneHotEncoder()
替换为one_hot = OneHotEncoder(sparse = False)
,这使输出矩阵的类型成为密集的numpy数组,可以使用np.concatenate((x_num,x_cat),axis = 1 )
对其进行串联