python - Sklearn StratifiedKFold : ValueError: Supported target types are: ('binary' , 'multiclass' )。取而代之的是 'multilabel-indicator'

标签 python machine-learning keras scikit-learn cross-validation

使用 Sklearn 分层 kfold 拆分,当我尝试使用多类拆分时,我收到错误消息(见下文)。当我尝试使用二进制进行拆分时,它没有问题。

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.

最佳答案

keras.utils.to_categorical产生一个单热编码的类向量,即 multilabel-indicator错误信息中提到。 StratifiedKFold不适用于此类输入;来自 split方法 docs :

split(X, y, groups=None)

[...]

y : array-like, shape (n_samples,)

The target variable for supervised learning problems. Stratification is done based on the y labels.

即你的y必须是您的类标签的一维数组。

本质上,您要做的只是颠倒操作顺序:首先拆分(使用您的初始 y_train ),然后转换 to_categorical之后。

关于python - Sklearn StratifiedKFold : ValueError: Supported target types are: ('binary' , 'multiclass' )。取而代之的是 'multilabel-indicator',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48508036/

相关文章:

machine-learning - 如何使用 HDF5 层根据迭代次数计算纪元?

python - 使用 Scikit-image 从图像中提取属性

tensorflow - 层密集需要 1 个输入,但它收到 2 个输入张量,我该如何更改它

python - 使用 Tensorflow 格式化具有可变时间步长的 LSTM 层的输入

python - 使用 TaskFlowAPI 在 Apache Airflow 中进行分支

python - 使用 scikit-learn 绘制接收器操作特性时出现问题?

python - 使用 python 的朴素贝叶斯分类器

python - 是否有 pandas 函数来转置数据框,为现有列的每个唯一值创建一个单独的列?

python - 使用 TukeyHSD 进行多重比较时出现类型错误

memory - 如何确定 Keras 模型所需的内存?