Keras 神经网络的部分依赖图
Posted
技术标签:
【中文标题】Keras 神经网络的部分依赖图【英文标题】:Partial Dependence Plot for a Keras Neural Network 【发布时间】:2020-11-19 17:01:05 【问题描述】:我有一个使用Keras Sequential API
构建的密集连接的神经网络。我正在尝试创建一些部分依赖图(PDP)以用于敏感性分析。我正在尝试使用scikit-learn plot_partial_dependence
函数来执行此操作。我收到以下错误:ValueError: 'estimator' must be a fitted regressor or classifier.
。当它第一次发生时,我添加了KerasClassifier
的使用。我过去曾成功使用它在scikit-learn GridSearchCV
中使用我的 Keras 模型。我仍然遇到同样的错误。我也试过KerasRegressor
。
谁能告诉我出了什么问题以及我该如何解决?我是否绝对需要使用 scikit-learn 的基于决策树的函数才能使用 PDP 函数?如果是,Keras 神经网络和决策树之间最大的实现区别是什么? (我从未使用过决策树。我的机器学习经验仅限于 Keras。)
我的相关代码如下,我在 google colab 的 GPU 上运行 python。我确定最后一行有几个问题,但我无法通过这个来解决它们。
from sklearn.inspection import plot_partial_dependence
from keras.wrappers.scikit_learn import KerasClassifier
from keras.wrappers.scikit_learn import KerasRegressor
def create_model():
def swish(x):
return (x*sigmoid(x))
from keras.utils.generic_utils import get_custom_objects
from keras.layers import Activation
get_custom_objects().update('swish':(swish))
model=Sequential()
model.add(Dense(1024,activation='swish',input_shape=(6,)))
model.add(Dropout(.1))
model.add(Dense(512,activation='swish'))
model.add(Dense(256,activation='swish'))
model.add(Dropout(.1))
model.add(Dense(128,activation='swish'))
model.add(Dense(64,activation='swish'))
model.add(Dropout(.1))
model.add(Dense(32,activation='swish'))
model.add(Dense(16,activation='swish'))
model.add(Dropout(.1))
model.add(Dense(12, activation='softmax'))
opt=optimizers.Adam(lr=0.05)
model.compile(loss='categorical_crossentropy',optimizer='adam', metrics=['accuracy'])
return model
from keras.callbacks import LearningRateScheduler
from keras.callbacks import EarlyStopping
import math
def scheduler(epoch, lr):
if epoch < 20:
return lr
else:
return lr * math.exp(-0.1)
callback=LearningRateScheduler(scheduler, verbose=1)
weightsCallback=EarlyStopping(patience=30,monitor='accuracy',restore_best_weights=True, min_delta=1*10**-5, verbose=1)
modelClassified=KerasClassifier(build_fn=create_model)
modelClassified.fit(X_train, Y_train, batch_size=50, epochs=50, callbacks=[callback,weightsCallback], verbose=1)
disp=plot_partial_dependence(modelClassified, X_holdout,target=1, verbose =1, features=[0,1,2,3,4,5], feature_names=['aspect ratio','diel inner radius','diel outer radius','diel seperation','diel height','diel constant'])
【问题讨论】:
【参考方案1】:我发现这个错误实际上是一个错误。无论如何,我的程序应该工作得很好。 plot_partial_dependence函数源码有错误。
有关更多详细信息和我用来使其工作的解决方案,请参阅指向另一个 *** 问题的链接:https://***.com/a/61485502/13822019
【讨论】:
以上是关于Keras 神经网络的部分依赖图的主要内容,如果未能解决你的问题,请参考以下文章