最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

machine learning - VotingClassifier only supports binary or multiclass classification. Multilabel and multi-output classificatio

programmeradmin0浏览0评论

I got an error about KerasClassifer and VotingClassifer. At the first, I used MNIST dataset and split it then fit xtrain and ytrain by Voting classifer. If I put their estimator type into Classifier from different models, I got

'super' object has no attribute '__sklearn_tags__'
# Recreate the models to ensure compatibility
model1 = KerasClassifier(build_fn=mlp_model, epochs=100, verbose=0)
model2 = KerasClassifier(build_fn=mlp_model, epochs=100, verbose=0)
model3 = KerasClassifier(build_fn=mlp_model, epochs=100, verbose=0)

model1._estimator_type = "classifier"
model2._estimator_type = "classifier"
model3._estimator_type = "classifier"

ensemble_clf = VotingClassifier(estimators=[('model1', model1), ('model2', model2), ('model3', model3)], voting='soft')

# Fit the ensemble classifier
ensemble_clf.fit(X_train, y_train)

But When I commented _estimator_type, I got ** VotingClassifier only supports binary or multiclass classification. Multilabel and multi-output classification are not supported. **

# Recreate the models to ensure compatibility
model1 = KerasClassifier(build_fn=mlp_model, epochs=100, verbose=0)
model2 = KerasClassifier(build_fn=mlp_model, epochs=100, verbose=0)
model3 = KerasClassifier(build_fn=mlp_model, epochs=100, verbose=0)

# model1._estimator_type = "classifier"
# model2._estimator_type = "classifier"
# model3._estimator_type = "classifier"

ensemble_clf = VotingClassifier(estimators=[('model1', model1), ('model2', model2), ('model3', model3)], voting='soft')

# Fit the ensemble classifier
ensemble_clf.fit(X_train, y_train)

I also tried on Pipeline and skl2onnx but I got the same thing.

this is all of my code

import numpy as np
import pandas as pd

from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense, Activation
from tensorflow.keras import optimizers
from scikeras.wrappers import KerasClassifier
from sklearn.ensemble import VotingClassifier
from sklearn.model_selection import train_test_split
from sklearn.datasets import load_digits, load_iris, fetch_openml
from sklearn.preprocessing import StandardScaler
from sklearn.pipeline import Pipeline
from sklearn.metrics import accuracy_score

import requests
from tensorflow.keras.utils import to_categorical

# Load MNIST dataset using tensorflow.keras.datasets
from tensorflow.keras.datasets import mnist

# Download the MNIST dataset
url = '.npz'
response = requests.get(url)
with open('mnist.npz', 'wb') as f:
    f.write(response.content)

# Load the dataset
with np.load('mnist.npz') as data:
    X_train, y_train = data['x_train'], data['y_train']
    X_test, y_test = data['x_test'], data['y_test']

# Normalize the data
X_train = X_train.reshape((X_train.shape[0], -1)) / 255.0
X_test = X_test.reshape((X_test.shape[0], -1)) / 255.0

# Convert labels to categorical (one-hot encoding)
y_train = to_categorical(y_train)
y_test = to_categorical(y_test)

def mlp_model():
    model = Sequential()

    model.add(Dense(50, input_shape = (784, )))
    model.add(Activation('sigmoid'))
    model.add(Dense(50))
    model.add(Activation('sigmoid'))
    model.add(Dense(50))
    model.add(Activation('sigmoid'))
    model.add(Dense(50))
    model.add(Activation('sigmoid'))
    model.add(Dense(10))
    model.add(Activation('softmax'))

    sgd = optimizers.SGD(learning_rate = 0.001, momentum=0.0)
    modelpile(optimizer = sgd, loss = 'categorical_crossentropy', metrics = ['accuracy'])

    return model

from scikeras.wrappers import KerasClassifier
from sklearn.ensemble import VotingClassifier

# Recreate the models to ensure compatibility
model1 = KerasClassifier(build_fn=mlp_model, epochs=100, verbose=0)
model2 = KerasClassifier(build_fn=mlp_model, epochs=100, verbose=0)
model3 = KerasClassifier(build_fn=mlp_model, epochs=100, verbose=0)

# model1._estimator_type = "classifier"
# model2._estimator_type = "classifier"
# model3._estimator_type = "classifier"

ensemble_clf = VotingClassifier(estimators=[('model1', model1), ('model2', model2), ('model3', model3)], voting='soft')

# Fit the ensemble classifier
ensemble_clf.fit(X_train, y_train)

y_pred = ensemble_clf.predict(X_test)

与本文相关的文章

发布评论

评论列表(0)

  1. 暂无评论