如何在sklearn的AdaBoost中使用Keras模型?

我有一个Keras模型,想使用sklearn的AdaBootClassifier增强它。不幸的是,我收到以下错误消息,却不知道如何解决。如果有任何帮助,我将非常高兴!

ValueError跟踪(最近一次通话最近) 在()中 ----> 1个boosted_classifier.fit(X,y)

3帧 _boost_discrete中的/usr/local/lib/python3.6/dist-packages/sklearn/ensemble/_weight_boosting.py(self,iboost,X,y,sample_weight,random_state) 602#仅增加正重 (603)第603章 -> 604(sample_weight> 0)) 605 606返回sample_weight,estimator_weight,estimator_error

ValueError:形状为(670,)的不可广播的输出操作数与广播形状(670,670)不匹配

这是我的代码:

import sklearn
from sklearn.ensemble import AdaBoostClassifier
from sklearn.ensemble import AdaBoostRegressor
from sklearn.model_selection import train_test_split
from sklearn.datasets import make_classification

import keras
from keras.models import Sequential
from keras.layers import Dense
from keras.layers import Dropout
from keras.wrappers.scikit_learn import KerasClassifier
from keras.wrappers.scikit_learn import KerasRegressor


import matplotlib.pyplot as plt
import numpy as np
import math

X_all,y_all = make_classification(n_samples=1000,n_features=50,n_informative=20,n_redundant=0,random_state=0,shuffle=False,class_sep=1)

X,X_test,y,y_test = train_test_split(X_all,y_all,test_size=0.33,random_state=42)

def simple_model():                                           
    # create model
    model = Sequential()
    model.add(Dense(25,input_dim=50,activation='relu'))
    model.add(Dropout(0.2,input_shape=(50,)))
    model.add(Dense(100,input_shape=(100,)))
    model.add(Dense(50,activation='relu'))
    model.add(Dense(1,activation='sigmoid'))
    # Compile model
    model.compile(loss='mean_squared_error',optimizer='adam',metrics=['accuracy'])
    return model

class MyKerasClassifier(KerasClassifier):
  def fit(self,x,sample_weight=None,**kwargs):
    y = np.array(y)
    if len(y.shape) == 2 and y.shape[1] > 1:
        self.classes_ = np.arange(y.shape[1])
    elif (len(y.shape) == 2 and y.shape[1] == 1) or len(y.shape) == 1:
        self.classes_ = np.unique(y)
        y = np.searchsorted(self.classes_,y)
    else:
        raise ValueError('Invalid shape for y: ' + str(y.shape))
    self.n_classes_ = len(self.classes_)
    if sample_weight is not None:
        kwargs['sample_weight'] = sample_weight
        print(type(sample_weight))
    return super(MyKerasClassifier,self).fit(x,**kwargs)
    #return super(KerasClassifier,sample_weight=sample_weight)

boosted_classifier = AdaBoostClassifier(
    base_estimator=MyKerasClassifier(build_fn=simple_model,epochs=5,batch_size=32,verbose=0),n_estimators=2,algorithm="SAMME")

boosted_classifier.fit(X,y)
s1y2f3x4 回答:如何在sklearn的AdaBoost中使用Keras模型?

我为自己找到了一个简单的解决方案。我刚刚将以下预测函数添加到MyKerasClassifier类中,并且可以使用:)

  def predict(self,x,**kwargs):
    kwargs = self.filter_sk_params(Sequential.predict_classes,kwargs)
    classes = self.model.predict_classes(x,**kwargs)
    return self.classes_[classes].flatten()
本文链接:https://www.f2er.com/1323679.html

大家都在问