我输入了一个数组列表。这个清单的尺寸是(88,903)。我想在此列表/矩阵上应用一个热编码。我想到了一种方法,但似乎是错误的。我想通过遍历整个矩阵来获得唯一值。这些唯一值用于拟合标签编码器。之后,我迭代我的初始矩阵的每一行,并根据'拟合'标签编码器然后一个热编码器进行变换。问题是在转换每一行之后,我得到了2 D数组,我无法在最后一个热编码矩阵中追加/连接。
def oneHotEncoding(values):
# integer encode
label_encoder = LabelEncoder()
valuesArray = np.asarray(values).transpose()
print('valuesArray shape', valuesArray.shape)
label_encoder.fit(valuesArray.reshape(valuesArray.shape[0]*valuesArray.shape[1], 1))
onehot_encoded_array = np.zeros(shape=valuesArray.shape)
#print('length onehot_encoded_array', onehot_encoded_array.shape)
for i in range(len(valuesArray[:,])):
integer_encoded = label_encoder.transform(valuesArray[i,:])
print(len(integer_encoded))
# binary encode
onehot_encoder = OneHotEncoder(sparse=False)
integer_encoded = integer_encoded.reshape(len(integer_encoded), 1)
onehot_encoded = onehot_encoder.fit_transform(integer_encoded)
print('shape', onehot_encoded.shape)
onehot_encoded_array[i,:] = onehot_encoded.reshape(1, onehot_encoded.shape[0]*onehot_encoded.shape[1])
return onehot_encoded_array
错误是:
ValueError: could not broadcast input array from shape (176) into shape (88)
顺便说一下,矩阵有字符串值,这就是我使用标签编码器然后使用一个热编码器的原因。