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 \rho ||w||_1 +\frac{\alpha(1-\rho)}{2} ||w||_2 ^ 2}

ElasticNetCV 可以通過交叉驗證來用來設置參數 alpha (\alpha) 和 l1_ratio (\rho)

 

  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()


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM