我正在尝试将一些分类功能转换为一种热门编码,以用于Keras。但是,当我尝试映射这些特征时,最终会收到错误消息,指出形状不兼容。这是我的代码:
import numpy
import pandas
from keras.models import Sequential
from keras.layers import Dense
from sklearn.preprocessing import LabelEncoder
from keras.utils import np_utils
# load dataset
dataframe = pandas.read_csv("data/development.csv")
dataset = dataframe.values
X = dataset[:,0:7].astype(int)
encoder = LabelEncoder()
for i in [3,4,5,6]:
col = X[i]
encoder.fit(col)
encoded_col = encoder.transform(col)
X[i] = np_utils.to_categorical(encoded_col) # Error is here
Y = dataset[:,7].astype(int)
这是我收到的错误:
ValueError: could not broadcast input array from shape (7,5) into shape (7)
在这里有什么我应该做不同的事情吗?我正在使用Python 3.6和Keras 2.2.2。
答案 0 :(得分:0)
根据您在上述评论中的问题,我提出了一个可行的解决方案。但是,我仍然不确定您要实现的目标,因为我缺少您要在其中使用此操作的上下文。但是无论如何,让我a一下吧。
因此,迭代的每一行X
都有自己的标签矩阵,该矩阵由to_categorical
操作给出。因此,我将Y
(我认为是您想要的)设计为列表。然后在迭代过程中,我将新创建的矩阵分配给Y
列表的相应元素。
# load dataset
dataframe = pandas.read_csv("data/development.csv")
dataset = dataframe.values
X = dataset[:,0:7].astype(int)
num_classes = np.max(X)
# Y is a list of matrices, one matrix for each row of X iterated below
Y = [None for _ in range(X.shape[0])]
encoder = LabelEncoder()
for i in [3,4,5,6]:
col = X[i]
# Get the number of classes present in that vector
num_classes = np.max(X[i])
encoder.fit(col)
encoded_col = encoder.transform(col)
# Set Y[i] to the new one-hot-encoded matrix
Y[i] = np_utils.to_categorical(encoded_col) # Error is here
print([y.shape for y in Y if y is not None])