如何在Scikit-learn的MLPClassifier中实现L1正则化?
在Scikit-learn的MLPClassifier中实现L1正则化
要把原代码中默认的L2正则化替换为L1正则化,只需调整MLPClassifier的penalty参数即可——默认penalty='l2'对应L2正则化,改为penalty='l1'就能启用L1正则化,alpha参数仍用于控制正则化强度。
修改后的完整代码
# 评估带ReLU激活和L1正则化的神经网络 from numpy import mean from numpy import std from sklearn.model_selection import KFold from sklearn.model_selection import cross_val_score from sklearn.neural_network import MLPClassifier # 准备10折交叉验证流程 cv = KFold(n_splits=10, random_state=1, shuffle=True) # 创建L1正则化模型:penalty设为'l1',alpha控制正则化强度 model = MLPClassifier( penalty='l1', alpha=0.0001, hidden_layer_sizes=(100,), activation='relu', solver='adam' ) # 评估模型 scores = cross_val_score(model, X, y, scoring='accuracy', cv=cv, n_jobs=-1) # 输出性能报告 print('Accuracy: %.3f (%.3f)' % (mean(scores), std(scores)))
关键注意点
- 求解器兼容性:L1正则化需要搭配支持它的求解器,
sgd(随机梯度下降)全版本支持,adam从Scikit-learn 0.24版本开始支持;若你的版本低于0.24,建议改用solver='sgd'。 - 正则化强度调优:
alpha值可根据模型过拟合程度调整,值越大正则化约束越强。
内容的提问来源于stack exchange,提问作者Adil_Sheraz
相关产品推荐
相关产品推荐

