MLP回归比内核岭回归更糟糕

时间:2018-10-26 09:14:39

标签: python scikit-learn neural-network

我正在研究回归问题。我有一个数据集,我已经在该数据集上完成了特征工程(输入缺失值,Box Cox转换了偏斜的变量等)。

我使用cross_val_score对5个数据集进行训练和测试几个模型。首先,我尝试了诸如Kernel Ridge回归,Lasso,Elastic Net和Gradient Boosting之类的模型。然后我尝试从scikit学习MLPRegressor。 但是,使用均方根误差,“简单”模型的结果要好于MLP回归器(例如,Kernel Ridge的平均得分是0.1153,而MLPRegressor(hidden_​​layer_sizes =(256,)* 25)的平均得分是0.1461,这是最好是我发现它可以运行不同的体系结构。

示例代码:

KRR = KernelRidge(alpha=0.6, kernel='polynomial', degree=2, coef0=2.5)

mlpreg = MLPRegressor(hidden_layer_sizes=(256,)*25,activation='relu',solver='adam',
                      verbose=0)

还有我用于评分的功能:

def rmsle_crossval(model, train: pd.DataFrame, y_train: List[float]):
    kf = KFold(n_folds, shuffle=True, 
               random_state=42).get_n_splits(train.values)
    rmse= np.sqrt(-cross_val_score(model, train.values, y_train, 
                  scoring="neg_mean_squared_error", cv = kf))
    return(rmse)

即使我尝试使用单个隐藏层1和与KRR相同的参数的MLPRegressor尽可能接近KRR,我的得分也为0.4381。

您知道为什么会有这样的区别吗?

谢谢

编辑: 数据形状:(1460,81)

1 个答案:

答案 0 :(得分:1)

如果通过应用预期显示较高估计方差的方法(例如神经网络)而获得的结果不如以较高偏差(例如核岭回归)为特征的方法,则您可能会怀疑其中之一两个原因:

1)您的问题不适用于神经网络,并且如无免费午餐定理(http://no-free-lunch.org/)所述,它更适用于其他模型

2)在训练高方差估算器时您过拟合了

考虑到您正在使用的神经网络和较小的数据量(1460,81),我认为这是第二个原因。

实际上,如果您检查神经网络模型:

>>> mlpreg
MLPRegressor(activation='relu', alpha=0.0001, batch_size='auto', beta_1=0.9,
       beta_2=0.999, early_stopping=False, epsilon=1e-08,
       hidden_layer_sizes=(256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256
, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256),
       learning_rate='constant', learning_rate_init=0.001, max_iter=200,
       momentum=0.9, nesterovs_momentum=True, power_t=0.5,
       random_state=None, shuffle=True, solver='adam', tol=0.0001,
       validation_fraction=0.1, verbose=0, warm_start=False)

您似乎正在使用25个层,每个层有256个节点,这说明了如此大量的参数,据估计,成千上万个示例并不足够,不仅仅是可用的几个。

我建议您首先尝试使用较小的网络,例如:

mlpreg = MLPRegressor(hidden_layer_sizes=(8,), activation='relu', solver='adam',
                      verbose=0)

,然后尝试通过扩展第一层或添加第二层来构建更复杂的体系结构。