ElasticNet 是一种使用L1和L2先验作为正则化矩阵的线性回归模型.这种组合用于只有很少的权重非零的稀疏模型,比如:class:Lasso, 但是又能保持:class:Ridge 的正则化属性.我们可以使用 l1_ratio 参数来调节L1和L2的凸组合(一类特殊的线性组合)。

当多个特征和另一个特征相关的时候弹性网络非常有用。Lasso 倾向于随机选择其中一个,而弹性网络更倾向于选择两个.

在实践中,Lasso 和 Ridge 之间权衡的一个优势是它允许在循环过程(Under rotate)中继承 Ridge 的稳定性.

弹性网络的目标函数是最小化:

ElasticNetCV 可以通过交叉验证来用来设置参数 ​​alpha​​​ () 和 ​​l1_ratio​​ ()

4.弹性网络( Elastic Net)_5e

4.弹性网络( Elastic Net)_elastic_02

4.弹性网络( Elastic Net)_5e_03

 

  1.  

    print(__doc__)
  2.  
     
  3.  

    import numpy as np
  4.  

    import matplotlib.pyplot as plt
  5.  
     
  6.  

    from sklearn.linear_model import lasso_path, enet_path
  7.  

    from sklearn import datasets
  8.  
     
  9.  

    diabetes = datasets.load_diabetes()
  10.  

    X = diabetes.data
  11.  

    y = diabetes.target
  12.  
     
  13.  

    X /= X.std(axis=0) # Standardize data (easier to set the l1_ratio parameter)
  14.  
     
  15.  

    # Compute paths
  16.  
     
  17.  

    eps = 5e-3 # the smaller it is the longer is the path
  18.  
     
  19.  

    print("Computing regularization path using the lasso...")
  20.  

    alphas_lasso, coefs_lasso, _ = lasso_path(X, y, eps, fit_intercept=False)
  21.  
     
  22.  

    print("Computing regularization path using the positive lasso...")
  23.  

    alphas_positive_lasso, coefs_positive_lasso, _ = lasso_path(
  24.  

    X, y, eps, positive=True, fit_intercept=False)
  25.  

    print("Computing regularization path using the elastic net...")
  26.  

    alphas_enet, coefs_enet, _ = enet_path(
  27.  

    X, y, eps=eps, l1_ratio=0.8, fit_intercept=False)
  28.  
     
  29.  

    print("Computing regularization path using the positve elastic net...")
  30.  

    alphas_positive_enet, coefs_positive_enet, _ = enet_path(
  31.  

    X, y, eps=eps, l1_ratio=0.8, positive=True, fit_intercept=False)
  32.  
     
  33.  

    # Display results
  34.  
     
  35.  

    plt.figure(1)
  36.  

    ax = plt.gca()
  37.  

    ax.set_color_cycle(2 * ['b', 'r', 'g', 'c', 'k'])
  38.  

    l1 = plt.plot(-np.log10(alphas_lasso), coefs_lasso.T)
  39.  

    l2 = plt.plot(-np.log10(alphas_enet), coefs_enet.T, linestyle='--')
  40.  
     
  41.  

    plt.xlabel('-Log(alpha)')
  42.  

    plt.ylabel('coefficients')
  43.  

    plt.title('Lasso and Elastic-Net Paths')
  44.  

    plt.legend((l1[-1], l2[-1]), ('Lasso', 'Elastic-Net'), loc='lower left')
  45.  

    plt.axis('tight')
  46.  
     
  47.  
     
  48.  

    plt.figure(2)
  49.  

    ax = plt.gca()
  50.  

    ax.set_color_cycle(2 * ['b', 'r', 'g', 'c', 'k'])
  51.  

    l1 = plt.plot(-np.log10(alphas_lasso), coefs_lasso.T)
  52.  

    l2 = plt.plot(-np.log10(alphas_positive_lasso), coefs_positive_lasso.T,
  53.  

    linestyle='--')
  54.  
     
  55.  

    plt.xlabel('-Log(alpha)')
  56.  

    plt.ylabel('coefficients')
  57.  

    plt.title('Lasso and positive Lasso')
  58.  

    plt.legend((l1[-1], l2[-1]), ('Lasso', 'positive Lasso'), loc='lower left')
  59.  

    plt.axis('tight')
  60.  
     
  61.  
     
  62.  

    plt.figure(3)
  63.  

    ax = plt.gca()
  64.  

    ax.set_color_cycle(2 * ['b', 'r', 'g', 'c', 'k'])
  65.  

    l1 = plt.plot(-np.log10(alphas_enet), coefs_enet.T)
  66.  

    l2 = plt.plot(-np.log10(alphas_positive_enet), coefs_positive_enet.T,
  67.  

    linestyle='--')
  68.  
     
  69.  

    plt.xlabel('-Log(alpha)')
  70.  

    plt.ylabel('coefficients')
  71.  

    plt.title('Elastic-Net and positive Elastic-Net')
  72.  

    plt.legend((l1[-1], l2[-1]), ('Elastic-Net', 'positive Elastic-Net'),
  73.  

    loc='lower left')
  74.  

    plt.axis('tight')
  75.  

    plt.show()