Tensorflow 如何在sklearn'内使用Keras模型;阿达博斯特怎么样?

Tensorflow 如何在sklearn'内使用Keras模型;阿达博斯特怎么样?,tensorflow,keras,scikit-learn,adaboost,boosting,Tensorflow,Keras,Scikit Learn,Adaboost,Boosting,我有一个Keras模型,希望使用sklearn的AdaBootClassifier来增强它。不幸的是,我收到了下面的错误消息,不知道如何解决它。我会很高兴得到任何帮助 ValueError回溯(最近一次调用上次) 在() ---->1.u分类器。拟合(X,y) 3帧 /usr/local/lib/python3.6/dist-packages/sklearn/employee//u-weight\u-boosting.py in\u-boost\u离散(self、iboost、X、y、sampl

我有一个Keras模型,希望使用sklearn的AdaBootClassifier来增强它。不幸的是,我收到了下面的错误消息,不知道如何解决它。我会很高兴得到任何帮助

ValueError回溯(最近一次调用上次) 在() ---->1.u分类器。拟合(X,y)

3帧 /usr/local/lib/python3.6/dist-packages/sklearn/employee//u-weight\u-boosting.py in\u-boost\u离散(self、iboost、X、y、sample\u-weight、random\u-state) 602#仅增加正权重 603样本权重*=np.exp(估计器权重*不正确* -->604(样品重量>0)) 605 606返回样本权重、估计器权重、估计器误差

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

这是我的代码:

导入sklearn
从sklearn.employ导入AdaBoostClassifier
从sklearn.employ导入AdaboosTressor
从sklearn.model\u选择导入列车\u测试\u拆分
从sklearn.dataset导入make_分类
进口干酪
从keras.models导入顺序
从keras.layers导入稠密
从keras.layers导入退出
从keras.wrappers.scikit_学习导入KerasClassifier
从keras.wrappers.scikit_了解导入keras回归器
将matplotlib.pyplot作为plt导入
将numpy作为np导入
输入数学
X_all,y_all=进行分类(n_样本=1000,n_特征=50,
n_信息=20,n_冗余=0,
随机状态=0,随机播放=False,类sep=1)
十、 X_测试,y,y_测试=列车测试分割(X_全部,y_全部,测试尺寸=0.33,随机状态=42)
def simple_model():
#创建模型
模型=顺序()
添加(密集(25,输入尺寸=50,激活=relu'))
model.add(Dropout(0.2,input_shape=(50,))
model.add(密集(100,activation='relu'))
model.add(Dropout(0.2,input_shape=(100,))
model.add(稠密的(50,activation='relu'))
model.add(密集型(1,激活='sigmoid'))
#编译模型
compile(loss='mean_squared_error',optimizer='adam',metrics=['accurity'])
回归模型
类别MyKerasClassifier(KerasClassifier):
def配合(自身、x、y、样品重量=无,**千克):
y=np.数组(y)
如果len(y.shape)==2且y.shape[1]>1:
self.classes u=np.arange(y.shape[1])
elif(len(y.shape)==2和y.shape[1]==1)或len(y.shape)==1:
self.classes=np.unique(y)
y=np.searchsorted(self.classes,y)
其他:
raise VALUETERROR('y:'+str(y.shape)的形状无效))
self.n_类u=len(self.class_u)
如果样本重量不是无:
kwargs[‘样品重量’]=样品重量
打印(类型(样品重量))
返回超级(MyKerasClassifier,self).fit(x,y,**kwargs)
#返回超级(KerasClassifier,self).拟合(x,y,样本重量=样本重量)
boosted_分类器=AdaBoostClassifier(
基本估计量=MyKerasClassifier(构建fn=简单模型,历代=5,批量大小=32,详细度=0),
n_估计量=2,
随机_状态=0,
算法=“SAMME”)
增强型_分类器拟合(X,y)

我为自己找到了一个简单的解决方案。我刚刚在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()