zoukankan      html  css  js  c++  java
  • 拓端数据tecdat|R语言自适应LASSO 多项式回归、二元逻辑回归和岭回归应用分析

    原文链接:http://tecdat.cn/?p=21602 

    正则化(regularization)

    正则化路径是在正则化参数lambda的值网格上计算套索LASSO或弹性网路惩罚的正则化路径。该算法速度快,可以利用输入矩阵x中的稀疏性,拟合线性、logistic和多项式、poisson和Cox回归模型。可以通过拟合模型进行各种预测。它还可以拟合多元线性回归。”

    例子

    加载数据

    这里加载了一个高斯(连续Y)的例子。

    as_data_frame(y)
    1.  
      ## # A tibble: 100 x 1
    2.  
      ## V1
    3.  
      ## <dbl>
    4.  
      ## 1 -1.2748860
    5.  
      ## 2 1.8434251
    6.  
      ## 3 0.4592363
    7.  
      ## 4 0.5640407
    8.  
      ## 5 1.8729633
    9.  
      ## 6 0.5275317
    10.  
      ## 7 2.4346589
    11.  
      ## 8 -0.8945961
    12.  
      ## 9 -0.2059384
    13.  
      ## 10 3.1101188
    14.  
      ## # ... with 90 more rows

    初始岭回归

    cv.glmnet执行k-折交叉验证 .

    1.  
      ## 执行岭回归
    2.  
      glmnet(x , y
    3.  
      ## “alpha=1”是套索惩罚, “alpha=0”是岭惩罚。
    4.  
      alpha = 0)

    1.  
      ## 用10折CV进行岭回归
    2.  
      cv.glmnet(
    3.  
      ## 类型.测量:用于交叉验证的丢失。
    4.  
      type.measure = "mse",
    5.  
      ## K = 10 是默认值。
    6.  
      nfold = 10,
    7.  
      ##“alpha=1”是套索惩罚,“alpha=0”是岭惩罚。
    8.  
      alpha = 0)
    9.  
      ## 惩罚vs CV MSE图

    1.  
      ## 在误差最小λ处提取系数
    2.  
      cv$lambda.min
    ## [1] 0.1789759
    1.  
      ## s:需要进行预测的惩罚参数“lambda”的值。默认值是用于创建模型的整个序列。
    2.  
      coef( s = lambda.min)
    1.  
      ## 21 x 1 sparse Matrix of class "dgCMatrix"
    2.  
      ## 1
    3.  
      ## (Intercept) 0.149041059
    4.  
      ## V1 1.302684272
    5.  
      ## V2 0.035835380
    6.  
      ## V3 0.719936146
    7.  
      ## V4 0.036473087
    8.  
      ## V5 -0.863490158
    9.  
      ## V6 0.605750873
    10.  
      ## V7 0.123446432
    11.  
      ## V8 0.376890626
    12.  
      ## V9 -0.040012847
    13.  
      ## V10 0.105999328
    14.  
      ## V11 0.240967604
    15.  
      ## V12 -0.066363634
    16.  
      ## V13 -0.042048935
    17.  
      ## V14 -1.092107794
    18.  
      ## V15 -0.119566353
    19.  
      ## V16 -0.035859663
    20.  
      ## V17 -0.038827463
    21.  
      ## V18 0.061785988
    22.  
      ## V19 -0.001409608
    23.  
      ## V20 -1.079879797
    1.  
      ## 截距估计应该剔除。
    2.  
      (coef(cv, s = lambda.min))[-1]

    这个初始过程给出了基于10折交叉验证选择的最佳岭回归模型的一组系数,使用平方误差度量作为模型性能度量。
    KNNL和Hadi中提到的另一种选择lambda的方法是选择最小的lambda,这样系数的轨迹是稳定的,VIF变得足够小。在这种情况下,VIF的定义必须包括惩罚因子lambda,这在Hadi的p295和knll的p436中有说明。

    是标准化的协变量矩阵. 是原始非标准化协变量的相关矩阵 . 该计算可定义如下。

    1.  
      vif <- function(x, lambda) {
    2.  
      ZtZ <- cor(x)
    3.  
      diag(solve(ZtZ + lambdaI %*% ZtZ %*% solve(ZtZ + lambdaI)
    4.  
       
    5.  
      ##
    6.  
       
    7.  
      ggplot(mapping = aes(x = lambda, y = value, group = key, color = key)) +
    8.  
      geom_line() +
    9.  
       
    10.  
       

    自适应LASSO

    1.  
      ## 执行自适应LASSO
    2.  
      glmnet(x = y =
    3.  
      ## 类型。度量:用于交叉验证的损失。
    4.  
      ##“alpha=1”是套索惩罚,“alpha=0”是岭惩罚。
    5.  
      alpha = 1,
    6.  
      ##
    7.  
      ## 惩罚系数:可以对每个系数应用单独的惩罚因子。这是一个乘以“lambda”以允许差异收缩的数字。对于某些变量可以是0, 这意味着没有收缩,而且这个变量总是包含在模型中。对于所有变量,默认值为1(对于“exclude”中列出的变量,默认值为无限大)。注意:惩罚因子在内部被重新调整为与nvars相加,lambda序列将反映这种变化。

    1.  
      ## 使用10折CV执行自适应套索
    2.  
       
    3.  
      ## 类型。度量:用于交叉验证的损失。
    4.  
      类型。测量= " mse ",
    5.  
      ## K = 10 是默认值。
    6.  
      nfold = 10,
    7.  
      ## ‘alpha = 1’ 是套索惩罚,'alpha=0'是岭惩罚。
    8.  
      ##
    9.  
      ## 惩罚系数:可以对每个系数应用单独的惩罚因子。这是一个乘以“lambda”以允许差异收缩的数字。对于某些变量可以为0,这意味着没有收缩,并且该变量始终包含在模型中。对于所有变量,默认值为1(对于“exclude”中列出的变量,默认值为无限大)。注意:惩罚因子在内部被重新调整为与nvars相加,lambda序列将反映这种变化。
    10.  
      ## 惩罚vs CV MSE图
    11.  
       

    1.  
      ## 在误差最小λ处提取系数
    2.  
      lambda.min
    ## [1] 0.7193664
    1.  
      ## s:需要进行预测的惩罚参数“lambda”的值。默认值是用于创建模型的整个序列。
    2.  
      best_alasso_coef1
    1.  
      ## 21 x 1 sparse Matrix of class "dgCMatrix"
    2.  
      ## 1
    3.  
      ## (Intercept) 0.1269539
    4.  
      ## V1 1.3863728
    5.  
      ## V2 .
    6.  
      ## V3 0.7573538
    7.  
      ## V4 .
    8.  
      ## V5 -0.8937983
    9.  
      ## V6 0.5718800
    10.  
      ## V7 .
    11.  
      ## V8 0.3654255
    12.  
      ## V9 .
    13.  
      ## V10 .
    14.  
      ## V11 0.1824140
    15.  
      ## V12 .
    16.  
      ## V13 .
    17.  
      ## V14 -1.1150736
    18.  
      ## V15 .
    19.  
      ## V16 .
    20.  
      ## V17 .
    21.  
      ## V18 .
    22.  
      ## V19 .
    23.  
      ## V20 -1.1268794

    那个惩罚系数参数允许指定系数特定的惩罚级别。这里我们使用自适应LASSO惩罚,即最佳岭系数绝对值的逆。

    最终模型Rsquare

    1.  
      ## R^2函数
    2.  
      ## https://en.wikipedia.org/wiki/Coefficient_of_determination
    3.  
      ## 总SS
    4.  
      ss_tot <- sum((y - ybar)^2)
    5.  
      ## 剩余 SS
    6.  
      ss_res <- sum((y - yhat)^2)
    7.  
      ## R^2 = 1 - ss_res/ ss_tot
    8.  
       
    9.  
      ## 调整R^2函数
    10.  
      ## n个样本,p个参数
    11.  
       
    12.  
      ## 获取 R^2
    13.  
      r_sq(as.vector(y_cont), as.vector(predict(alasso1, newx =
    ## [1] 0.906806
    1.  
      ##获得调整R ^ 2
    2.  
      adj_r_sq(r_squared_alasso1, n = nrow(y_cont),
    ## [1] 0.9007934
    1.  
      ## 交叉验证测试集R^2
    2.  
      ## alasso1_cv$cvm[1] 是截距模型的交叉验证测试集均方误差。
    3.  
      1 - cvm[lambda == lambda.min] / cvm[1]
    ## [1] 0.8854662

    交叉验证测试集Rsquare

    1.  
      lapply(unique( foldid), function(id) {
    2.  
      ## 拟合排除测试集 (foldid == id)
    3.  
      glmnet(x = x_cont[alasso1_cv$foldid != id,],
    4.  
      y = y_cont[alasso1_cv$foldid != id],
    5.  
      ## 使用模型拟合最佳lambda测试集Yïhat
    6.  
      predict(fit, newx = x_cont[alasso1_cv$foldid == id,],
    7.  
      ## 测试组 R^2
    8.  
      1 - sum((y - y_pred)^2) / sum((y - mean(y))^2)
    9.  
      }) %>%
    1.  
      ## [1] 0.8197796 0.9090972 0.9499495 0.8019303 0.8637534 0.7184797 0.8579943 0.9250376 0.8300891
    2.  
      ## [10] 0.9188004
    ## [1] 0.8594911

    多项式例子

    1.  
      ## # A tibble: 500 x 30
    2.  
      ## V1 V2 V3 V4 V5 V6 V7 V8
    3.  
      ## <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
    4.  
      ## 1 0.8212500 1.2155090 -0.64860899 -0.7001262 -1.9640742 1.1692107 0.28598652 -0.1664266
    5.  
      ## 2 0.9264925 -1.1855031 -1.18297879 0.9828354 1.0693610 -0.2302219 0.57772625 -0.8738714
    6.  
      ## 3 -1.5719712 0.8568961 -0.02208733 1.7445962 -0.4148403 -2.0289054 -1.31228181 -1.2441528
    7.  
      ## 4 0.7419447 -0.9452052 -1.61821790 1.0015587 -0.4589488 0.5154490 0.29189973 0.1114092
    8.  
      ## 5 -0.1333660 0.5085678 0.04739909 -0.4486953 -0.2616950 -0.1554108 -1.24834832 -1.0498054
    9.  
      ## 6 -0.5672062 0.6020396 -2.10300909 0.3119233 0.3272173 -0.8671885 0.97512759 -0.7216256
    10.  
      ## 7 1.9683411 2.5162198 1.61109738 1.0047913 -0.5194647 1.0738680 -0.16176095 -0.4267418
    11.  
      ## 8 0.2857727 -1.7017703 1.41062569 -0.5823727 -1.3330908 1.7929250 0.06396841 -0.6818909
    12.  
      ## 9 -0.5339434 0.1725089 0.93504676 -1.9956942 -0.9021089 -0.2624043 0.97406411 0.5166823
    13.  
      ## 10 0.8081052 -0.9662501 0.54666915 -0.8388913 0.9665053 1.4039598 0.63502500 0.3429640
    14.  
      ## # ... with 490 more rows, and 22 more variables: V9 <dbl>, V10 <dbl>, V11 <dbl>, V12 <dbl>,
    15.  
      ## # V13 <dbl>, V14 <dbl>, V15 <dbl>, V16 <dbl>, V17 <dbl>, V18 <dbl>, V19 <dbl>, V20 <dbl>,
    16.  
      ## # V21 <dbl>, V22 <dbl>, V23 <dbl>, V24 <dbl>, V25 <dbl>, V26 <dbl>, V27 <dbl>, V28 <dbl>,
    17.  
      ## # V29 <dbl>, V30 <dbl>
    as_data_frame(y)
    1.  
      ## # A tibble: 500 x 1
    2.  
      ## value
    3.  
      ## <dbl>
    4.  
      ## 1 3
    5.  
      ## 2 2
    6.  
      ## 3 2
    7.  
      ## 4 2
    8.  
      ## 5 3
    9.  
      ## 6 3
    10.  
      ## 7 3
    11.  
      ## 8 1
    12.  
      ## 9 1
    13.  
      ## 10 1
    14.  
      ## # ... with 490 more rows
    1.  
       
    2.  
      plot(ridge2, xvar = "lambda")

    1.  
      ## 用10折交叉验证CV进行岭回归
    2.  
      ## 类型.测量:用于交叉验证的损失。
    3.  
      类型.测量=“偏差”,
    4.  
       
    5.  
      ## 多项式回归
    6.  
      ## ‘alpha = 1’ 是套索惩罚,'alpha=0'是岭惩罚。
    7.  
      ## 惩罚vs CV MSE图
    8.  
      plot(ridge2_cv)

    1.  
      ## 在误差最小λ处提取系数
    2.  
      lambda.min
    ## [1] 0.02540802
    1.  
      ## s:需要进行预测的惩罚参数“lambda”的值。默认值是用于创建模型的整个序列。
    2.  
      do.call(cbind, coef( cv, s = lambda.min))
    1.  
      ## 31 x 3 sparse Matrix of class "dgCMatrix"
    2.  
      ## 1 1 1
    3.  
      ## (Intercept) -0.030926870 -0.012579891 0.043506761
    4.  
      ## V1 0.056754184 -0.332936704 0.276182520
    5.  
      ## V2 -0.330771038 -0.135465951 0.466236989
    6.  
      ## V3 0.417313228 -0.166953973 -0.250359256
    7.  
      ## V4 -0.275107590 -0.075937714 0.351045304
    8.  
      ## V5 -0.359310997 0.447318724 -0.088007727
    9.  
      ## V6 0.318490592 -0.042273343 -0.276217249
    10.  
      ## V7 -0.069203544 0.103874053 -0.034670509
    11.  
      ## V8 0.398432356 0.056457793 -0.454890149
    12.  
      ## V9 -0.100873703 -0.831473315 0.932347018
    13.  
      ## V10 -0.079409535 0.550465763 -0.471056227
    14.  
      ## V11 0.015539259 0.022872091 -0.038411350
    15.  
      ## V12 -0.023384035 -0.037367749 0.060751784
    16.  
      ## V13 -0.162456798 0.271096200 -0.108639401
    17.  
      ## V14 0.173128811 -0.127758267 -0.045370544
    18.  
      ## V15 -0.029448593 0.035626357 -0.006177764
    19.  
      ## V16 -0.078135662 0.066353666 0.011781996
    20.  
      ## V17 0.144753874 -0.137960413 -0.006793461
    21.  
      ## V18 0.032929352 0.071275386 -0.104204738
    22.  
      ## V19 0.090783173 -0.147044947 0.056261774
    23.  
      ## V20 -0.010749594 0.146821172 -0.136071578
    24.  
      ## V21 0.059468598 -0.008259112 -0.051209485
    25.  
      ## V22 0.133514075 -0.030352819 -0.103161256
    26.  
      ## V23 0.070174614 -0.054781769 -0.015392844
    27.  
      ## V24 0.027344225 0.164797661 -0.192141886
    28.  
      ## V25 0.010677968 0.014023080 -0.024701049
    29.  
      ## V26 0.010490474 -0.034644559 0.024154085
    30.  
      ## V27 -0.008201249 0.114562955 -0.106361705
    31.  
      ## V28 -0.115249536 -0.067581191 0.182830727
    32.  
      ## V29 0.027760120 0.056857406 -0.084617526
    33.  
      ## V30 -0.062642211 -0.007339614 0.069981825
    1.  
      ## 转换为矩阵
    2.  
      ## 截距估计应该取消。
    3.  
      1 / abs(as.matrix(best_ridge_coef2)[-1,])
    1.  
      ## 1 1 1
    2.  
      ## V1 17.619846 3.003574 3.620794
    3.  
      ## V2 3.023239 7.381929 2.144832
    4.  
      ## V3 2.396282 5.989675 3.994260
    5.  
      ## V4 3.634942 13.168687 2.848635
    6.  
      ## V5 2.783104 2.235542 11.362639
    7.  
      ## V6 3.139810 23.655569 3.620339
    8.  
      ## V7 14.450127 9.627043 28.842957
    9.  
      ## V8 2.509836 17.712347 2.198333
    10.  
      ## V9 9.913386 1.202684 1.072562
    11.  
      ## V10 12.592946 1.816643 2.122889
    12.  
      ## V11 64.353133 43.721407 26.033972
    13.  
      ## V12 42.764219 26.761045 16.460422
    14.  
      ## V13 6.155483 3.688727 9.204764
    15.  
      ## V14 5.776046 7.827282 22.040732
    16.  
      ## V15 33.957479 28.069106 161.870875
    17.  
      ## V16 12.798253 15.070757 84.875262
    18.  
      ## V17 6.908278 7.248456 147.200381
    19.  
      ## V18 30.368044 14.030089 9.596493
    20.  
      ## V19 11.015257 6.800642 17.774057
    21.  
      ## V20 93.026766 6.811007 7.349073
    22.  
      ## V21 16.815597 121.078385 19.527632
    23.  
      ## V22 7.489847 32.945869 9.693562
    24.  
      ## V23 14.250167 18.254248 64.965251
    25.  
      ## V24 36.570794 6.068047 5.204487
    26.  
      ## V25 93.650773 71.311008 40.484111
    27.  
      ## V26 95.324582 28.864561 41.400864
    28.  
      ## V27 121.932644 8.728825 9.401880
    29.  
      ## V28 8.676825 14.797016 5.469540
    30.  
      ## V29 36.022899 17.587858 11.817883
    31.  
      ## V30 15.963677 136.246945 14.289424
    1.  
      ## 执行自适应套索
    2.  
      ## 多项式回归
    3.  
      family = "multinomial",
    4.  
      ## ‘alpha = 1’ 是套索惩罚,'alpha=0'是岭惩罚。
    5.  
      alpha = 1,
    6.  
      ##
    7.  
      ## 惩罚系数:可以对每个系数应用单独的惩罚因子。这是一个乘以“lambda”以允许差异收缩的数字。对于某些变量可以为0,这意味着没有收缩,并且该变量始终包含在模型中。对于所有变量,默认值为1(对于“exclude”中列出的变量,默认值为无限大)。注意:惩罚因子在内部被重新调整为与nvars相加,lambda序列将反映这种变化。

     

    1.  
      ## 使用10折CV执行自适应套索
    2.  
      ## 类型。度量:用于交叉验证的损失。
    3.  
      type.measure = "偏差",
    4.  
       
    5.  
      ## 惩罚vs CV MSE图
    6.  
      plot(alasso2_cv)

    1.  
      ## 在误差最小λ处提取系数
    2.  
      lambda.min
    ## [1] 0.023834
    1.  
      ## s:需要进行预测的惩罚参数“lambda”的值。默认值是用于创建模型的整个序列。
    2.  
      do.call(cbind, coef(alasso2_cv, s = lambda.min))
    1.  
      ## 31 x 3 sparse Matrix of class "dgCMatrix"
    2.  
      ## 1 1 1
    3.  
      ## (Intercept) 0.001070916 0.029687114 -0.030758030
    4.  
      ## V1 0.051853991 -0.329785101 0.277931110
    5.  
      ## V2 -0.414609162 -0.166765504 0.581374666
    6.  
      ## V3 0.498638681 -0.172468859 -0.326169822
    7.  
      ## V4 -0.336005338 -0.079578260 0.415583598
    8.  
      ## V5 -0.424216967 0.532071434 -0.107854467
    9.  
      ## V6 0.364828074 -0.035326316 -0.329501758
    10.  
      ## V7 -0.058746523 0.080343071 -0.021596548
    11.  
      ## V8 0.483592031 0.111422669 -0.595014699
    12.  
      ## V9 -0.155745580 -1.016502806 1.172248386
    13.  
      ## V10 -0.060698812 0.625050169 -0.564351357
    14.  
      ## V11 . . .
    15.  
      ## V12 . . .
    16.  
      ## V13 -0.175719655 0.283930678 -0.108211023
    17.  
      ## V14 0.196421536 -0.139576235 -0.056845300
    18.  
      ## V15 . . .
    19.  
      ## V16 -0.037414770 0.040300172 -0.002885402
    20.  
      ## V17 0.149438019 -0.129742710 -0.019695308
    21.  
      ## V18 . . .
    22.  
      ## V19 0.088822086 -0.130605368 0.041783282
    23.  
      ## V20 . . .
    24.  
      ## V21 0.007141749 -0.002869644 -0.004272105
    25.  
      ## V22 0.125997952 -0.016924514 -0.109073438
    26.  
      ## V23 0.043024971 -0.026879150 -0.016145821
    27.  
      ## V24 0.016862193 0.083686360 -0.100548554
    28.  
      ## V25 . . .
    29.  
      ## V26 . . .
    30.  
      ## V27 . . .
    31.  
      ## V28 -0.111429811 -0.069842376 0.181272187
    32.  
      ## V29 . . .
    33.  
      ## V30 -0.032032333 -0.006590025 0.038622358

    最终模型正确分类率

    xtabs(~ y_multi_pred_class + y_multi)
    1.  
      ## y_multi
    2.  
      ## y_multi_pred_class 1 2 3
    3.  
      ## 1 84 20 16
    4.  
      ## 2 30 136 19
    5.  
      ## 3 28 18 149
    mean(y_multi == y_multi_pred_class)
    ## [1] 0.738

    交叉验证测试集正确分类率

    1.  
      lapply(unique(foldid), function(id) {
    2.  
      ## 拟合排除测试集(foldid==id)
    3.  
       
    4.  
      ## 使用模型拟合最佳lambda测试集Yïhat
    5.  
      y_pred <- (predict(fit, newx = x_multi[foldid == id,], type = "class",
    6.  
      s = lambda.min))
    7.  
      ## 测试集Y
    8.  
      y <- y_multi[foldid == id]
    9.  
      ## 测试集CCR
    10.  
      mean(y == y_pred)
    11.  
      }) %>%
    ##  [1] 0.68 0.64 0.76 0.72 0.70 0.66 0.60 0.72 0.62 0.76
    ## [1] 0.686

    二元逻辑回归示例

    1.  
      ## # A tibble: 100 x 30
    2.  
      ## V1 V2 V3 V4 V5 V6 V7 V8
    3.  
      ## <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
    4.  
      ## 1 -0.61926135 0.01624409 -0.62606831 0.41268461 0.4944374 -0.4493269 0.6760053 -0.06771419
    5.  
      ## 2 1.09427278 0.47257285 -1.33714704 -0.64058126 0.2823199 -0.6093321 0.3547232 -0.62686515
    6.  
      ## 3 -0.35670402 0.30121334 0.19056192 0.23402677 0.1698086 1.2291427 1.1628095 0.88024242
    7.  
      ## 4 -2.46907012 2.84771447 1.66024352 1.56881297 -0.8330570 -0.5620088 -0.6142455 -1.76529838
    8.  
      ## 5 0.56728852 0.88888747 -0.01158671 0.57627526 -0.8689453 -0.3132571 0.6902907 -1.29961200
    9.  
      ## 6 0.91292543 0.77350086 0.55836355 -0.53509922 0.3507093 -0.5763021 -0.3882672 0.55518663
    10.  
      ## 7 0.09567305 0.14027229 -0.76043921 -0.04935541 1.5740992 -0.1240903 -1.1106276 1.72895452
    11.  
      ## 8 1.93420667 -0.71114983 -0.27387147 1.00113828 1.0439012 0.8028893 -0.6035769 -0.51136380
    12.  
      ## 9 0.28275701 1.05940570 -0.03944966 0.30277367 -0.9161762 0.6914934 0.6087553 0.30921594
    13.  
      ## 10 0.80143492 1.53674274 -1.01230763 -0.38480878 -2.0319100 0.2236314 -1.1628847 -0.52739792
    14.  
      ## # ... with 90 more rows, and 22 more variables: V9 <dbl>, V10 <dbl>, V11 <dbl>, V12 <dbl>,
    15.  
      ## # V13 <dbl>, V14 <dbl>, V15 <dbl>, V16 <dbl>, V17 <dbl>, V18 <dbl>, V19 <dbl>, V20 <dbl>,
    16.  
      ## # V21 <dbl>, V22 <dbl>, V23 <dbl>, V24 <dbl>, V25 <dbl>, V26 <dbl>, V27 <dbl>, V28 <dbl>,
    17.  
      ## # V29 <dbl>, V30 <dbl>
    as_data_frame(y)
    1.  
      ## # A tibble: 100 x 1
    2.  
      ## value
    3.  
      ## <int>
    4.  
      ## 1 0
    5.  
      ## 2 1
    6.  
      ## 3 1
    7.  
      ## 4 0
    8.  
      ## 5 1
    9.  
      ## 6 0
    10.  
      ## 7 0
    11.  
      ## 8 0
    12.  
      ## 9 1
    13.  
      ## 10 1
    14.  
      ## # ... with 90 more rows
    1.  
       
    2.  
      ## 执行岭回归
    3.  
      ## 二元逻辑回归
    4.  
      family = "binomial",
    5.  
      ## “alpha=1”是套索惩罚,“alpha=0”是岭惩罚。

    1.  
      ##用10折CV进行岭回归
    2.  
      ##类型。度量:用于交叉验证的损失。
    3.  
      type.measure = "deviance",
    4.  
      ## K = 10 是默认值。
    5.  
      nfold = 10,
    6.  
      ## 多项式回归
    7.  
      ## ‘alpha = 1’ 是套索惩罚,'alpha=0'是岭惩罚。
    8.  
      alpha = 0)
    9.  
      ## 惩罚vs CV MSE图

    ## 在误差最小λ处lambda.min
    ## [1] 0.03488898
    1.  
      ## s:需要进行预测的惩罚参数“lambda”的值。默认值是用于创建模型的整个序列。
    2.  
      coef(ridge3_cv, s = lambda.min))
    1.  
      ## 31 x 1 sparse Matrix of class "dgCMatrix"
    2.  
      ## 1
    3.  
      ## (Intercept) 0.1718290283
    4.  
      ## V1 0.1148574142
    5.  
      ## V2 0.5068431000
    6.  
      ## V3 -0.3384649794
    7.  
      ## V4 -0.8634050979
    8.  
      ## V5 -0.3141436782
    9.  
      ## V6 -0.6956355852
    10.  
      ## V7 0.0798900376
    11.  
      ## V8 -0.5167458568
    12.  
      ## V9 0.5193890584
    13.  
      ## V10 -1.0182682093
    14.  
      ## V11 -0.2077506627
    15.  
      ## V12 -0.2218540968
    16.  
      ## V13 -0.1638673635
    17.  
      ## V14 0.1370473811
    18.  
      ## V15 0.0388320169
    19.  
      ## V16 0.3621440665
    20.  
      ## V17 -0.1226309533
    21.  
      ## V18 -0.1492504287
    22.  
      ## V19 -0.0497939458
    23.  
      ## V20 -0.2024006258
    24.  
      ## V21 0.0006531455
    25.  
      ## V22 0.2456970018
    26.  
      ## V23 0.4333057414
    27.  
      ## V24 -0.1769632495
    28.  
      ## V25 0.5320062623
    29.  
      ## V26 -0.3875044960
    30.  
      ## V27 -0.2157079430
    31.  
      ## V28 0.3337625633
    32.  
      ## V29 -0.2659968175
    33.  
      ## V30 0.1601149964
    1.  
      ## 截距估计应该取消。
    2.  
      (best_ridge_coef3)[-1]
    3.  
      ##执行自适应套索
    4.  
       
    5.  
      ## 多项式回归
    6.  
      family = "binomial",
    7.  
      ## “alpha=1”是套索惩罚,“alpha=0”是岭惩罚。
    8.  
      alpha = 1,

    1.  
      ## 使用10折CV执行自适应套索
    2.  
      ## 类型。度量:用于交叉验证的损失。
    3.  
       
    4.  
      ##惩罚vs CV MSE图
    5.  
      plot(alasso3_cv)

    1.  
      ## 在误差最小λ处提取系数
    2.  
      lambda.min
    ## [1] 0.5438827
    1.  
      ## s:需要进行预测的惩罚参数“lambda”的值。默认值是用于创建模型的整个序列。
    2.  
      coef(cv, s = lambda.min)
    1.  
      ## 31 x 1 sparse Matrix of class "dgCMatrix"
    2.  
      ## 1
    3.  
      ## (Intercept) 0.19932789
    4.  
      ## V1 .
    5.  
      ## V2 0.69081709
    6.  
      ## V3 -0.48062268
    7.  
      ## V4 -1.21628612
    8.  
      ## V5 .
    9.  
      ## V6 -1.01918155
    10.  
      ## V7 .
    11.  
      ## V8 -0.48394892
    12.  
      ## V9 0.79804285
    13.  
      ## V10 -1.49657785
    14.  
      ## V11 .
    15.  
      ## V12 .
    16.  
      ## V13 .
    17.  
      ## V14 .
    18.  
      ## V15 .
    19.  
      ## V16 0.19759191
    20.  
      ## V17 .
    21.  
      ## V18 .
    22.  
      ## V19 .
    23.  
      ## V20 .
    24.  
      ## V21 .
    25.  
      ## V22 0.04668665
    26.  
      ## V23 0.24445410
    27.  
      ## V24 .
    28.  
      ## V25 0.57951934
    29.  
      ## V26 -0.21844124
    30.  
      ## V27 .
    31.  
      ## V28 0.07144777
    32.  
      ## V29 -0.04682770
    33.  
      ## V30 .

     绘制ROC曲线 

    1.  
      ## 提取预测概率和观察结果。
    2.  
      pY <- as.(predict(alasso3, newx = x_bin, s = lambda.min, type = "response"))
    3.  
      ##
    4.  
      ## 用AUC和阈值绘制ROC曲线
    5.  
      plot(roc1)

    交叉验证测试集AUC

    1.  
      lapply(unique(foldid), function(id)
    2.  
      ## 拟合排除测试集 (foldid == id)
    3.  
       
    4.  
      ## 使用模型拟合最佳lambda测试集Yïhat
    5.  
      y_pred <- (predict(fit, newx = x_bin[foldid == id], s = lambda.min)
    6.  
      ## 测试组 Y
    7.  
      y <- y_bin[alasso3_cv$foldid == id]
    8.  
      ## 测试组 AUC
    9.  
      roc(y ~ y_pred)$auc
    1.  
      ## [1] 1.0000000 1.0000000 1.0000000 0.9200000 1.0000000 1.0000000 0.7619048 0.7916667 0.7200000
    2.  
      ## [10] 0.9375000
    ## [1] 0.9131071

    最受欢迎的见解

    1.R语言多元Logistic逻辑回归 应用案例

    2.面板平滑转移回归(PSTR)分析案例实现

    3.matlab中的偏最小二乘回归(PLSR)和主成分回归(PCR)

    4.R语言泊松Poisson回归模型分析案例

    5.R语言回归中的Hosmer-Lemeshow拟合优度检验

    6.r语言中对LASSO回归,Ridge岭回归和Elastic Net模型实现

    7.在R语言中实现Logistic逻辑回归

    8.python用线性回归预测股票价格

    9.R语言如何在生存分析与Cox回归中计算IDI,NRI指标

    ▍关注我们 【大数据部落】第三方数据服务提供商,提供全面的统计分析与数据挖掘咨询服务,为客户定制个性化的数据解决方案与行业报告等。 ▍咨询链接:http://y0.cn/teradat ▍联系邮箱:3025393450@qq.com
  • 相关阅读:
    解决 Windows 下的 :所选择的任务“{0}”不再存在。若要查看当前任务,请单击“刷新”。
    学习编译更好的 DAO 的技巧
    宇宙的起源演讲全文(斯蒂芬·霍金)
    java對象序列化的兩種使用方法
    Ubuntu硬盘安装与配置(3D效果)
    java異常處理
    [zt]JDBC对数据库的事务操作
    [zt]spring本地事务与JTA事务实现解析
    Debian溫習
    在oracle中增大session數量
  • 原文地址:https://www.cnblogs.com/tecdat/p/14757865.html
Copyright © 2011-2022 走看看