使用Sklearn分层kfold split,当我尝试使用多个类进行拆分时,收到错误消息(见下文)。当我尝试使用二进制文件进行拆分时,它没有问题。
num_classes = len(np.unique(y_train))
y_train_categorical = keras.utils.to_categorical(y_train, num_classes)
kf=StratifiedKFold(n_splits=5, shuffle=True, random_state=999)
# splitting data into different folds
for i, (train_index, val_index) in enumerate(kf.split(x_train, y_train_categorical)):
x_train_kf, x_val_kf = x_train[train_index], x_train[val_index]
y_train_kf, y_val_kf = y_train[train_index], y_train[val_index]
ValueError: Supported target types are: ('binary', 'multiclass'). Got 'multilabel-indicator' instead.
像这样调用
split()
:keras.utils.to_categorical
生成一个热编码类向量,即错误消息中提到的multilabel-indicator
。StratifiedKFold
不是设计用来处理这种输入的;从split
方法docs:也就是说,你的
y
必须是你的类标签的一维数组。本质上,您所要做的只是反转操作的顺序:先拆分(使用初始的
y_train
),然后再转换to_categorical
。我遇到了同样的问题,发现您可以使用这个
util
函数检查目标的类型:从其docstring:
使用
LabelEncoder
可以将类转换为一维数字数组(假设目标标签位于一维类别/对象数组中):相关问题 更多 >
编程相关推荐