【问题标题】:Porting sklearn MLPClassifier to Keras with L2 regularization使用 L2 正则化将 sklearn MLPClassifier 移植到 Keras
【发布时间】:2025-12-03 11:35:01
【问题描述】:

我想将以下 sklearn 模型移植到 keras:

model = MLPClassifier(activation='tanh', hidden_layer_sizes=(60,50), alpha=0.001, random_state=42)

到目前为止,我所拥有的是:

from keras.models import Sequential
from keras.layers import Dense
from keras import regularizers
from tensorflow import set_random_seed

set_random_seed(42)

model = Sequential([
  Dense(60, activation='tanh'),
  Dense(50, activation='tanh'),
  Dense(1, kernel_initializer='normal', activation='sigmoid') 
])

model.compile(loss='binary_crossentropy', optimizer='adam', metrics=['accuracy', 'binary_accuracy'])

model.fit(
  x_train,
  y_train,
  epochs=200,
  batch_size=200,
  validation_data=(x_test, y_test)
)

但现在我正在为正则化术语而苦苦挣扎。 sklearn 文档对此并没有太多的表现力:

alpha : 浮点数,可选,默认 0.0001 L2 惩罚(正则化项)参数。

但在 keras 中,密集层有 3 个用于正则化的属性。

kernel_regularizer:应用于核权重矩阵的正则化函数(参见正则化)。 bias_regularizer:应用于偏置向量的正则化函数(参见正则化函数)。 activity_regularizer:应用于层输出的正则化函数(它的“激活”)。

哪一个实际上相当于sklearn正则化?

【问题讨论】:

    标签: keras scikit-learn


    【解决方案1】:

    根据sklearn doc,alpha参数用于正则化权重

    https://scikit-learn.org/stable/modules/neural_networks_supervised.html

    MLPRegressor 和 MLPClassifier 都使用参数 alpha 正则化(L2 正则化)术语,有助于避免 通过惩罚大量权重来过度拟合。

    Keras 允许您为权重、偏差和激活值指定不同的正则化。显然,您可以对所有三个使用相同的正则化器。

    正则化也适用于每层,例如:

    from keras import regularizers.l2
    reg1 = l2(0.0001)
    reg2 = l2(0.001)
    
    model = Sequential([
      Dense(60, activation='tanh', kernel_regularizer=reg1, bias_regularizer=reg1, activity_regularizer=reg1),
      Dense(50, activation='tanh', kernel_regularizer=reg2, bias_regularizer=reg2, activity_regularizer=reg2),
      ...
    

    【讨论】:

    • which helps in avoiding overfitting by penalizing weights 所以基本上你是说我需要使用偏差+内核正则化但没有活动正则化
    • 不,这只是 sklearn 文档的摘录 :) 正则化激活很重要,这里有一篇关于该主题的好帖子:machinelearningmastery.com/…
    • 但问题不在于如何使用正则化,而是如何在 keras 中实现与 sklearn 在 MLPClassifier 中完全相同的正则化行为。只需快速扫描您的链接部分“MLP Activity Regularization”,因此它实际上只是 activity_regularizer
    • 查看 sklearn 代码,似乎正则化应用于权重:github.com/scikit-learn/scikit-learn/blob/master/sklearn/…