机器学习--弹性网络(Elastic-Net Regression)

机器学习–Elastic-Net Regression

基本概念

弹性网络 是一种使用 L1, L2 范数作为先验正则项训练的线性回归模型。 这种组合允许拟合到一个只有少量参数是非零稀疏的模型,就像 Lasso 一样,但是它仍然保持了一些类似于 Ridge 的正则性质。

弹性网络在很多特征互相联系的情况下是非常有用的。Lasso 很可能只随机考虑这些特征中的一个,而弹性网络更倾向于选择两个。

最小化的目标函数是:
m i n   w 1 2 n s a m p l e s ∣ ∣ X w − y ∣ ∣ 2 2 + α ρ ∣ ∣ w ∣ ∣ 1 + α ( 1 − ρ ) 2 ∣ ∣ w ∣ ∣ 2 2 \underset{w}{min\,} { \frac{1}{2n_{samples}} ||X w - y||_2 ^ 2 + \alpha \rho ||w||_1 +\frac{\alpha(1-\rho)}{2} ||w||_2 ^ 2} wmin2nsamples1Xwy22+αρw1+2α(1ρ)w22

案例

# coding=utf-8
from sklearn import datasets
from sklearn.linear_model import ElasticNet
from pylab import *
from sklearn.model_selection import train_test_split
from sklearn.metrics import mean_squared_error, r2_score


if __name__ == '__main__':

    all_data = datasets.load_boston()

    x_train, x_test, y_train, y_test = train_test_split(all_data.data, all_data.target, test_size=0.3)

    # alpha 参数控制估计系数的稀疏度

    alphas = [0.0001, 0.001, 0.01, 0.1, 1, 10, 100, 1000]
    scores = []
    mses = []
    r2s = []
    for alpha in alphas:
        model = ElasticNet(alpha, l1_ratio=0.7)

        model.fit(x_train, y_train)

        prediction = model.predict(x_test)

        scores.append(model.score(x_test, y_test))
        mses.append(mean_squared_error(y_test, prediction))
        r2s.append(r2_score(y_test, prediction))

    plt.plot(alphas, mses, marker="v")
    plt.title('LassoRegression')
    plt.xscale('symlog')
    plt.xlabel(r'$\alpha$')
    plt.ylabel(r'mean squared error')
    plt.savefig("./elasticNet.png")
    plt.show()

机器学习--弹性网络(Elastic-Net Regression)_第1张图片

你可能感兴趣的:(机器学习,sklearn,sklearn,机器学习,linear,regression)