zoukankan      html  css  js  c++  java
  • 4.弹性网络( Elastic Net)

     

    版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_21904665/article/details/52315642

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

    当多个特征和另一个特征相关的时候弹性网络非常有用。Lasso 倾向于随机选择其中一个,而弹性网络更倾向于选择两个.
    在实践中,Lasso 和 Ridge 之间权衡的一个优势是它允许在循环过程(Under rotate)中继承 Ridge 的稳定性.
    弹性网络的目标函数是最小化:

    underset{w}{min\,} { frac{1}{2n_{samples}} ||X w - y||_2 ^ 2 + alpha 
ho ||w||_1 +frac{alpha(1-
ho)}{2} ||w||_2 ^ 2}

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

    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()
  • 相关阅读:
    Unity Shader 之 渲染流水线
    C# 如何快速取到enum中的枚举数量
    Unity NGUI ScrollView 苹果式滑动
    多元线性回归~ML
    梯度下降~ML
    代价函数~ML
    ML~线性代数~python
    unity 大游戏使用什么框架
    C# Activator.CreateInstance()方法使用
    VSync Count 垂直同步
  • 原文地址:https://www.cnblogs.com/lvdongjie/p/11314743.html
Copyright © 2011-2022 走看看