R(day01)

R语言
下载地址

https://cran.r-project.org/

R介绍
R是一套完整的数据处理、计算和制图软件系统。其功能包括:
1)数据存储和处理系统
2)数组运算工具(其向量、矩阵运算方面功能尤其强大)
3 )完整连贯的统计分析工具
4)优秀的统计制图功能
5 )简便而强大的编程语言:可操纵数据的输入和输出,可实现分支、循环,用户可自定义功能。
R的思想是:它可以提供一些集成的统计工具,但更大量的是它提供各种数学计算、统计计算的函数,从而使使用者能灵活机动的进行数据分析,甚至创造出符合需要的新的统计计算方法。

为什么选择R
R是实验工具,教学工具,但不是生产工具。R不适合处理大数据,一般来讲,处理百万行数据时就已
经很吃力了,因为R处理的数据要放到内存里做运算。
使用R教学更有利于说明算法模型,利用R的绘图能够更直观了解算法模型。只要掌握算法模型的原理,后期只需要更换处理工具即可,比如由R转到Hadoop的Mathout,或转到Spark,就是一个简单的工具转换,而算法模型的原理都是一样的。

#数组
> x1<-c(1,2,3,4)
> x1
[1] 1 2 3 4
#
> x2<-seq(2,8)
> x2
[1] 2 3 4 5 6 7 8
#设定步长
> x2<-seq(2,8,by=2)
> x2
[1] 2 4 6 8
> x3<-seq(-5,5,length=20)
> x3
 [1] -5.0000000 -4.4736842 -3.9473684 -3.4210526 -2.8947368 -2.3684211 -1.8421053 -1.3157895
 [9] -0.7894737 -0.2631579  0.2631579  0.7894737  1.3157895  1.8421053  2.3684211  2.8947368
[17]  3.4210526  3.9473684  4.4736842  5.0000000
> x4<-1:10
> x4
 [1]  1  2  3  4  5  6  7  8  9 10
> x4[x4>4]
[1]  5  6  7  8  9 10
> x4[1:5]
[1] 1 2 3 4 5
#最大,最小,中位数,四分之一中位数,四分之三中位数
> summary(x4)
   Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
   1.00    3.25    5.50    5.50    7.75   10.00 
> 

在这里插入图片描述

> x5<-matrix(1:24,3,8)
> x5
     [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8]
[1,]    1    4    7   10   13   16   19   22
[2,]    2    5    8   11   14   17   20   23
[3,]    3    6    9   12   15   18   21   24
> 

合并矩阵

> x5<-matrix(1:24,3,8)
> x5
     [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8]
[1,]    1    4    7   10   13   16   19   22
[2,]    2    5    8   11   14   17   20   23
[3,]    3    6    9   12   15   18   21   24
> 

blood.txt

X1 X2 y
76 50 120
91.5 20 141
85.5 20 124
82.5 30 126
79 30 117
80.5 50 125
74.5 60 123
79 50 125
85 40 132
76.5 55 123
82 40 132
95 40 155
92.5 20 147

点击文件,选择改变文件目录,指定文件目录

> data1<-read.table("blood.txt")
> data1
     V1 V2  V3
1    X1 X2   y
2    76 50 120
3  91.5 20 141
4  85.5 20 124
5  82.5 30 126
6    79 30 117
7  80.5 50 125
8  74.5 60 123
9    79 50 125
10   85 40 132
11 76.5 55 123
12   82 40 132
13   95 40 155
14 92.5 20 147

> data1$V1
 [1] X1   76   91.5 85.5 82.5 79   80.5 74.5 79   85   76.5 82   95   92.5
Levels: 74.5 76 76.5 79 80.5 82 82.5 85 85.5 91.5 92.5 95 X1

> data1<-read.table("blood.txt",header=T)
> data1
     X1 X2   y
1  76.0 50 120
2  91.5 20 141
3  85.5 20 124
4  82.5 30 126
5  79.0 30 117
6  80.5 50 125
7  74.5 60 123
8  79.0 50 125
9  85.0 40 132
10 76.5 55 123
11 82.0 40 132
12 95.0 40 155
13 92.5 20 147
> data1$X1
 [1] 76.0 91.5 85.5 82.5 79.0 80.5 74.5 79.0 85.0 76.5 82.0 95.0 92.5
> 

取多列

> data1[,1:2]
     X1 X2
1  76.0 50
2  91.5 20
3  85.5 20
4  82.5 30
5  79.0 30
6  80.5 50
7  74.5 60
8  79.0 50
9  85.0 40
10 76.5 55
11 82.0 40
12 95.0 40
13 92.5 20

> data1[1:6,]
    X1 X2   y
1 76.0 50 120
2 91.5 20 141
3 85.5 20 124
4 82.5 30 126
5 79.0 30 117
6 80.5 50 125

挂接

> attach(data1)
> X1
 [1] 76.0 91.5 85.5 82.5 79.0 80.5 74.5 79.0 85.0 76.5 82.0 95.0 92.5

解除挂接

> detach(data1)

构建函数。作图

> x1<-c(1,2,3,4)
> y<-c(3,6,5,8)
> plot(x1,y)

升高体重散点图
plot-w-h.txt

height:56.5, 65.3,64.3,56.3,59.8,66.5,51.3,62.5,62.8,69.0,63.5,67.0,57.3,62.5,59.0,72.0,64.8,57.5,66.5
weight:84.0,98.0,90.0,77.0,84.5,112.0,50.5,112.5,102.5,112.5,102.5,133.0,83.0,84.0,99.5,150.0,128.0,85.0,112.0

> height<-c(56.5, 65.3,64.3,56.3,59.8,66.5,51.3,62.5,62.8,69.0,63.5,67.0,57.3,62.5,59.0,72.0,64.8,57.5,66.5)
> weight<-c(84.0,98.0,90.0,77.0,84.5,112.0,50.5,112.5,102.5,112.5,102.5,133.0,83.0,84.0,99.5,150.0,128.0,85.0,112.0)
> plot(height,weight)

plot-box.txt

25,45,50,54,55,61,64,68,72,75,75,78,79,81,83,84,84,84,85,86,86,86,87,89,89,89,90,91,9l,92,100

 score<-c(25, 45, 50, 54, 55, 61, 64, 68, 72, 75, 75, 78, 79, 81, 83, 84, 84, 84, 85, 86, 86, 86, 87, 89, 89, 89, 90, 91, 91, 92, 100)
> boxplot(score)

展示
在这里插入图片描述

一元线性回归模型

carbon.txt

碳含量:
0.1,0.11,0.12,0.13,0.14,0.15,0.16,0.17,0.18,0.2,0.21,0.23
强度:42,43.5,45,45.5,45,47.5,49,53,50,55,55,60

> x<-c(0.1,0.11,0.12,0.13,0.14,0.15,0.16,0.17,0.18,0.2,0.21,0.23)
> y<-c(42,43.5,45,45.5,45,47.5,49,53,50,55,55,60)
> plot(x,y)
> model<-lm(y~x)

> summary(model)

Call:
lm(formula = y ~ x)

Residuals:
    Min      1Q  Median      3Q     Max 
-2.0431 -0.7056  0.1694  0.6633  2.2653 

Coefficients:
            Estimate Std. Error t value Pr(>|t|)    
(Intercept)   28.493      1.580   18.04 5.88e-09 ***
x            130.835      9.683   13.51 9.50e-08 ***
---
Signif. codes:  0***0.001**0.01*0.05.0.1 ‘ ’ 1

Residual standard error: 1.319 on 10 degrees of freedom
Multiple R-squared:  0.9481,    Adjusted R-squared:  0.9429 
F-statistic: 182.6 on 1 and 10 DF,  p-value: 9.505e-08

在这里插入图片描述

多元R方值,最大值=1越大中说明模型对于数据拟合越好
在这里插入图片描述

R底层对于系数会进行检验,检验是否通过,初学时就判断是否有*,有则系数通过检验。没有*就表示不通检验,则需要更换模型或调整模型。
这里是通过假设检验的思想来判定的。
原假设H0:当前系数不通过检验
备则假设H1:当前系数通过检验

上图中的Pr是一个概率值,它是基于原假设所得到的。可以用Pr值和显著性水平(0.05)比较,如果Pr<0.05,则表示这是一个小概率事件,几乎不可能发生。
即H0不发生,则H1发生(系数通过检验)

做检验的方式:①卡方检验②F检验③t检验
以上检验的概率值需要查询对应的分布表。有卡方分布表,F分布表,t分布表

多元线性回归模型

> data2<-read.table("blood.txt",header=T)
> data2
     X1 X2   y
1  76.0 50 120
2  91.5 20 141
3  85.5 20 124
4  82.5 30 126
5  79.0 30 117
6  80.5 50 125
7  74.5 60 123
8  79.0 50 125
9  85.0 40 132
10 76.5 55 123
11 82.0 40 132
12 95.0 40 155
13 92.5 20 147

> model<-lm(y~X1+X2,data=data2)
> summary(model)

Call:
lm(formula = y ~ X1 + X2, data = data2)

Residuals:
    Min      1Q  Median      3Q     Max 
-4.0404 -1.0183  0.4640  0.6908  4.3274 

Coefficients:
             Estimate Std. Error t value Pr(>|t|)    
(Intercept) -62.96336   16.99976  -3.704 0.004083 ** 
X1            2.13656    0.17534  12.185 2.53e-07 ***
X2            0.40022    0.08321   4.810 0.000713 ***
---
Signif. codes:  0***0.001**0.01*0.05.0.1 ‘ ’ 1

Residual standard error: 2.854 on 10 degrees of freedom
Multiple R-squared:  0.9461,    Adjusted R-squared:  0.9354 
F-statistic: 87.84 on 2 and 10 DF,  p-value: 4.531e-07

预测:

> predict(model,data.frame(X1=95,X2=30))
       1 
152.0161 

案例:

toothpaste.txt

X1 X2 X3 X4 Y
3.85 3.8 -0.05 5.5 7.38
3.75 4 0.25 6.75 8.51
3.7 4.3 0.6 7.25 9.52
3.7 3.7 0 5.5 7.5
3.6 3.85 0.25 7 9.33
3.6 3.8 0.2 6.5 8.28
3.6 3.75 0.15 6.75 8.75
3.8 3.85 0.05 5.25 7.87
3.8 3.65 -0.15 5.25 7.1
3.85 4 0.15 6 8
3.9 4.1 0.2 6.5 7.89
3.9 4 0.1 6.25 8.15
3.7 4.1 0.4 7 9.1
3.75 4.2 0.45 6.9 8.86
3.75 4.1 0.35 6.8 8.9
3.8 4.1 0.3 6.8 8.87
3.7 4.2 0.5 7.1 9.26
3.8 4.3 0.5 7 9
3.7 4.1 0.4 6.8 8.75
3.8 3.75 -0.05 6.5 7.95
3.8 3.75 -0.05 6.2 7.65
3.75 3.65 -0.1 6 7.27
3.7 3.9 0.2 6.5 8
3.55 3.65 0.1 7 8.5
3.6 4.1 0.5 6.8 8.75
3.65 4.25 0.6 6.8 9.21
3.7 3.65 -0.05 6.5 8.27

代码

> data3<-read.table("toothpaste.txt",header=T)
> data3
     X1   X2    X3   X4    Y
1  3.85 3.80 -0.05 5.50 7.38
2  3.75 4.00  0.25 6.75 8.51
3  3.70 4.30  0.60 7.25 9.52
4  3.70 3.70  0.00 5.50 7.50
5  3.60 3.85  0.25 7.00 9.33
6  3.60 3.80  0.20 6.50 8.28
7  3.60 3.75  0.15 6.75 8.75
8  3.80 3.85  0.05 5.25 7.87
9  3.80 3.65 -0.15 5.25 7.10
10 3.85 4.00  0.15 6.00 8.00
11 3.90 4.10  0.20 6.50 7.89
12 3.90 4.00  0.10 6.25 8.15
13 3.70 4.10  0.40 7.00 9.10
14 3.75 4.20  0.45 6.90 8.86
15 3.75 4.10  0.35 6.80 8.90
16 3.80 4.10  0.30 6.80 8.87
17 3.70 4.20  0.50 7.10 9.26
18 3.80 4.30  0.50 7.00 9.00
19 3.70 4.10  0.40 6.80 8.75
20 3.80 3.75 -0.05 6.50 7.95
21 3.80 3.75 -0.05 6.20 7.65
22 3.75 3.65 -0.10 6.00 7.27
23 3.70 3.90  0.20 6.50 8.00
24 3.55 3.65  0.10 7.00 8.50
25 3.60 4.10  0.50 6.80 8.75
26 3.65 4.25  0.60 6.80 9.21
27 3.70 3.65 -0.05 6.50 8.27
> model<-lm(Y~X1+X2+X3+X4,data=data3)
> summary(model)

Call:
lm(formula = Y ~ X1 + X2 + X3 + X4, data = data3)

Residuals:
     Min       1Q   Median       3Q      Max 
-0.40111 -0.12224 -0.00053  0.13499  0.51076 

Coefficients: (1 not defined because of singularities)
            Estimate Std. Error t value Pr(>|t|)    
(Intercept)   7.3242     2.5789   2.840 0.009274 ** 
X1           -2.2635     0.6779  -3.339 0.002847 ** 
X2            1.5294     0.3233   4.730 9.12e-05 ***
X3                NA         NA      NA       NA    
X4            0.5365     0.1369   3.919 0.000687 ***
---
Signif. codes:  0***0.001**0.01*0.05.0.1 ‘ ’ 1

Residual standard error: 0.2435 on 23 degrees of freedom
Multiple R-squared:  0.8861,    Adjusted R-squared:  0.8712 
F-statistic: 59.64 on 3 and 23 DF,  p-value: 5.278e-11

在这里插入图片描述
上表格中,x3列和x1,x2存在了精确的函数关系,则此时数据集存在完全共线性。
当存在完全共线性时,会导致建模时某一项的系数为NA。解决办法:
剔除出现共线性相应的列,比如上表数据,可以剔除X3,或者剔除X1和X2。

> model<-lm(Y~X1+X2+X4,data=data3)
> summary(model)

Call:
lm(formula = Y ~ X1 + X2 + X4, data = data3)

Residuals:
     Min       1Q   Median       3Q      Max 
-0.40111 -0.12224 -0.00053  0.13499  0.51076 

Coefficients:
            Estimate Std. Error t value Pr(>|t|)    
(Intercept)   7.3242     2.5789   2.840 0.009274 ** 
X1           -2.2635     0.6779  -3.339 0.002847 ** 
X2            1.5294     0.3233   4.730 9.12e-05 ***
X4            0.5365     0.1369   3.919 0.000687 ***
---
Signif. codes:  0***0.001**0.01*0.05.0.1 ‘ ’ 1

Residual standard error: 0.2435 on 23 degrees of freedom
Multiple R-squared:  0.8861,    Adjusted R-squared:  0.8712 
F-statistic: 59.64 on 3 and 23 DF,  p-value: 5.278e-11

生产环境下,出现完全共线性并不多见,而最常见的是出现近似共线性。会导致模型精度下降,失去使用价值

在这里插入图片描述

解决方法
1.手动剔除共线性相关的自变量。这种方法不适合在生产环境使用,因为当自变量很多时,尝试次数过多

案例

X1 X2 X3 X4 Y
7 26 6 60 78.5
1 29 15 52 74.3
11 56 8 20 104.3
11 31 8 47 87.6
7 52 6 33 95.9
11 55 9 22 109.2
3 71 17 6 102.7
1 31 22 44 72.5
2 54 18 22 93.1
21 47 4 26 115.9
1 40 23 34 83.8
11 66 9 12 113.3
10 68 8 12 109.4

代码

> data4<-read.table("cement.txt",header=T)
> data4
   X1 X2 X3 X4     Y
1   7 26  6 60  78.5
2   1 29 15 52  74.3
3  11 56  8 20 104.3
4  11 31  8 47  87.6
5   7 52  6 33  95.9
6  11 55  9 22 109.2
7   3 71 17  6 102.7
8   1 31 22 44  72.5
9   2 54 18 22  93.1
10 21 47  4 26 115.9
11  1 40 23 34  83.8
12 11 66  9 12 113.3
13 10 68  8 12 109.4
> summary(model)

Call:
lm(formula = Y ~ X1 + X2 + X3 + X4, data = data4)

Residuals:
    Min      1Q  Median      3Q     Max 
-3.1750 -1.6709  0.2508  1.3783  3.9254 

Coefficients:
            Estimate Std. Error t value Pr(>|t|)  
(Intercept)  62.4054    70.0710   0.891   0.3991  
X1            1.5511     0.7448   2.083   0.0708 .
X2            0.5102     0.7238   0.705   0.5009  
X3            0.1019     0.7547   0.135   0.8959  
X4           -0.1441     0.7091  -0.203   0.8441  
---
Signif. codes:  0***0.001**0.01*0.05.0.1 ‘ ’ 1

Residual standard error: 2.446 on 8 degrees of freedom
Multiple R-squared:  0.9824,    Adjusted R-squared:  0.9736 
F-statistic: 111.5 on 4 and 8 DF,  p-value: 4.756e-07

拟合不好,去掉X4或者X3

> data4<-read.table("cement.txt",header=T)
> model<-lm(Y~X1+X2,data=data4)
> summary(model)

Call:
lm(formula = Y ~ X1 + X2, data = data4)

Residuals:
   Min     1Q Median     3Q    Max 
-2.893 -1.574 -1.302  1.363  4.048 

Coefficients:
            Estimate Std. Error t value Pr(>|t|)    
(Intercept) 52.57735    2.28617   23.00 5.46e-10 ***
X1           1.46831    0.12130   12.11 2.69e-07 ***
X2           0.66225    0.04585   14.44 5.03e-08 ***
---
Signif. codes:  0***0.001**0.01*0.05.0.1 ‘ ’ 1

Residual standard error: 2.406 on 10 degrees of freedom
Multiple R-squared:  0.9787,    Adjusted R-squared:  0.9744 
F-statistic: 229.5 on 2 and 10 DF,  p-value: 4.407e-09

2.通过逐步回归方法
底层会依次剔除每一个变量,然后评估剔除完之后的效果,评估的指标用AIC,AIC越小,效果越好

正常情况下

> model<-lm(Y~X1+X2+X3+X4,data=data4)
> summary(model)

Call:
lm(formula = Y ~ X1 + X2 + X3 + X4, data = data4)

Residuals:
    Min      1Q  Median      3Q     Max 
-3.1750 -1.6709  0.2508  1.3783  3.9254 

Coefficients:
            Estimate Std. Error t value Pr(>|t|)  
(Intercept)  62.4054    70.0710   0.891   0.3991  
X1            1.5511     0.7448   2.083   0.0708 .
X2            0.5102     0.7238   0.705   0.5009  
X3            0.1019     0.7547   0.135   0.8959  
X4           -0.1441     0.7091  -0.203   0.8441  
---
Signif. codes:  0***0.001**0.01*0.05.0.1 ‘ ’ 1

Residual standard error: 2.446 on 8 degrees of freedom
Multiple R-squared:  0.9824,    Adjusted R-squared:  0.9736 
F-statistic: 111.5 on 4 and 8 DF,  p-value: 4.756e-07

使用逐步回归方法处理,结果是需要去掉X3
> model.step<-step(model)
Start:  AIC=26.94
Y ~ X1 + X2 + X3 + X4

       Df Sum of Sq    RSS    AIC
- X3    1    0.1091 47.973 24.974
- X4    1    0.2470 48.111 25.011
- X2    1    2.9725 50.836 25.728
<none>              47.864 26.944
- X1    1   25.9509 73.815 30.576

Step:  AIC=24.97
Y ~ X1 + X2 + X4

       Df Sum of Sq    RSS    AIC
<none>               47.97 24.974
- X4    1      9.93  57.90 25.420
- X2    1     26.79  74.76 28.742
- X1    1    820.91 868.88 60.629
> summary(model.step)//去掉X3后,观察结果,效果不是很好,需要把X4也去掉

Call:
lm(formula = Y ~ X1 + X2 + X4, data = data4)

Residuals:
    Min      1Q  Median      3Q     Max 
-3.0919 -1.8016  0.2562  1.2818  3.8982 

Coefficients:
            Estimate Std. Error t value Pr(>|t|)    
(Intercept)  71.6483    14.1424   5.066 0.000675 ***
X1            1.4519     0.1170  12.410 5.78e-07 ***
X2            0.4161     0.1856   2.242 0.051687 .  
X4           -0.2365     0.1733  -1.365 0.205395    
---
Signif. codes:  0***0.001**0.01*0.05.0.1 ‘ ’ 1

Residual standard error: 2.309 on 9 degrees of freedom
Multiple R-squared:  0.9823,    Adjusted R-squared:  0.9764 
F-statistic: 166.8 on 3 and 9 DF,  p-value: 3.323e-08

最后的模型应该是去掉X3和X4,观察拟合很好

> model<-lm(Y~X1+X2,data=data4)
> summary(model)

Call:
lm(formula = Y ~ X1 + X2, data = data4)

Residuals:
   Min     1Q Median     3Q    Max 
-2.893 -1.574 -1.302  1.363  4.048 

Coefficients:
            Estimate Std. Error t value Pr(>|t|)    
(Intercept) 52.57735    2.28617   23.00 5.46e-10 ***
X1           1.46831    0.12130   12.11 2.69e-07 ***
X2           0.66225    0.04585   14.44 5.03e-08 ***
---
Signif. codes:  0***0.001**0.01*0.05.0.1 ‘ ’ 1

Residual standard error: 2.406 on 10 degrees of freedom
Multiple R-squared:  0.9787,    Adjusted R-squared:  0.9744 
F-statistic: 229.5 on 2 and 10 DF,  p-value: 4.407e-09

3.通过岭回归算法(基于最小二乘法做的改进)
使用最小二乘法的条件:样本矩阵必须是满秩序的

使用最小二乘法的条件:样本矩阵必须是满秩的,即数据集不能出现完全共线性

在这里插入图片描述

在这里插入图片描述
在用二乘法建立线性回归模型时,如果存在完全共线性,会导致样本矩阵不满秩,导致最后求解的系数有NA值

如果存在的近似共线性,而且程度很强,会导致XX的行列值不是0,但是是一个很小的值。会导致求解的逆矩阵中的值很大,会导致最后求解的系数变的很大。
从而导致系数失真,失去解释能力。

综上,当数据是病态数据(存在较严重的近似共线性),如果使用最小二乘法来求解,会导致模型失去解释能力。

==========================

岭回归算法
在这里插入图片描述

在这里插入图片描述

岭回归在最小二乘法的基础上,加入一个扰动(正则化参数),可以使得解变得更平稳。
其中:
①λ叫做岭参数,是一个>=0的值。如果λ=0,则是最小二乘回归,如果λ>0,则是岭回归。
②I是一个单位矩阵。目的是把λ变为矩阵,从而可以实现矩阵加法 X T X X^TX XTX

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
具体如何求解β1和β2?因为需要考虑引入约束方程,
可以用拉格朗日定理来求解(可以解决有约束的最优化问题)

引入岭回归包ridge_2.2
选择程序包,install,引入包,执行

library(ridge)
model.ridge<-linearRidge (Y~X1+X2+X3+X4,data=data4)
> summary(model)
> summary(model)

Call:
lm(formula = Y ~ X1 + X2, data = data4)

Residuals:
   Min     1Q Median     3Q    Max 
-2.893 -1.574 -1.302  1.363  4.048 

Coefficients:
            Estimate Std. Error t value Pr(>|t|)    
(Intercept) 52.57735    2.28617   23.00 5.46e-10 ***
X1           1.46831    0.12130   12.11 2.69e-07 ***
X2           0.66225    0.04585   14.44 5.03e-08 ***
---
Signif. codes:  0***0.001**0.01*0.05.0.1 ‘ ’ 1

Residual standard error: 2.406 on 10 degrees of freedom
Multiple R-squared:  0.9787,    Adjusted R-squared:  0.9744 
F-statistic: 229.5 on 2 and 10 DF,  p-value: 4.407e-09

所以,对于病态数据的建模,用岭国归效果要好于最小二乘法

附录:

RGui安装程序包
方式一:
可以通过指定国内CRAN解决。
如选择清华大学镜像https://mirrors.tuna.tsinghua.edu.cn/CRAN/

options(repos=structure(c(CRAN="https://mirrors.tuna.tsinghua.edu.cn/CRAN/"))) 
install.packages("rjmcmc", dependencies = TRUE)  

下面列出国内的CRAN镜像:
1、http://mirrors.opencas.cn/cran/ 中国科学院大学(Chinese Academy of Sciences, Beijing)

2、https://mirrors.tuna.tsinghua.edu.cn/CRAN/ 清华大学(TUNA Team, Tsinghua University)

3、http://mirrors.tuna.tsinghua.edu.cn/CRAN/ 清华大学(TUNA Team, Tsinghua University)

方式二:
如果下载不可用的话,访问镜像网站,比如下载ridge.zip.可在此网站中找到

https://mirror.lzu.edu.cn/CRAN/

岭际图分析
当邻参数k变化时,A(k)也随之变化,如果在平面坐标系上把函数A(k)描画出来,画出的曲线称为岭迹。如下图所示:总结︰当岭际图是呈喇叭口形状,则可以认为数据存在多重共线性。喇叭口张的越大,程度越严重。

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

R实现绘制岭迹图的步骤:

> library(MASS)
> plot(lm.ridge(data4$Y~.,data4,lambda=seq(0,150,length=151)))

注: lambda表示岭参数的取值范围和步长,表示入取值为0~150,每次变化步长为1

在这里插入图片描述

岭回归的缺点:很难剔除出现共线性的自变量列,达到筛选变量的效果,原因:
由岭回归的约束方程条件决定的这个特性

在这里插入图片描述

============

LASSO回归
概念介绍
岭回归可以很好的解决多重共线性问题,但是对于变量的选择并不擅长,因为岭回归是一个连续的过程,由于其不断收缩系数,因此较平稳。但是岭回归并没有将任何系数收缩为o,即达不到变量筛选的效果。因而这个方法不能给出一个简单的可解释的模型。

这种算法既可以解决多重共线性,也擅长筛选变量

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
目前可以采用LAR(最小角回归)作为LASSO等效的高效解法

========================

最小角回归
LAR算法
Least Angel Regression最小角回归,类似于向前逐步回归的形式,是Lasso的一种高效解法。
LAR即可以解决多重共线性问题,也可以实现变量的筛选,所以Lasso的高效解法。
LAR和逐步回归的不同点在于,逐步回归每次都是根据选择的变量子集完全拟合出线性模型,再设计统计量(AIC)对较高的模型复杂度做出惩罚。所以逐步回归算法是一种迭代算法,在自变量数量多了之后,计算代价很大,所以性能不是很高。
逐步回归的性能比较低,尤其在自变量个数比较多的时候问题凸显。
而LAR是每次先找出和因变量相关度最高的那个自变量,然后再逐渐调整。代LAR算法的优势在于算法没有迭,性能要远远优于逐步回归算法。并且LAR算法还能很好的处理多重共线性问题,所以很受欢迎。

LAR算法既可以解决多重共线性,也可以解决变量筛序。类似于逐步回归,但是性能要比逐步回归更好

在这里插入图片描述

在这里插入图片描述

引入lars包

> library(lars)
Loaded lars 1.2

> x<-as.matrix(data4[,1:4])
> y<-as.matrix(data4[,5])
> x
      X1 X2 X3 X4
 [1,]  7 26  6 60
 [2,]  1 29 15 52
 [3,] 11 56  8 20
 [4,] 11 31  8 47
 [5,]  7 52  6 33
 [6,] 11 55  9 22
 [7,]  3 71 17  6
 [8,]  1 31 22 44
 [9,]  2 54 18 22
[10,] 21 47  4 26
[11,]  1 40 23 34
[12,] 11 66  9 12
[13,] 10 68  8 12
> y
       [,1]
 [1,]  78.5
 [2,]  74.3
 [3,] 104.3
 [4,]  87.6
 [5,]  95.9
 [6,] 109.2
 [7,] 102.7
 [8,]  72.5
 [9,]  93.1
[10,] 115.9
[11,]  83.8
[12,] 113.3
[13,] 109.4

> model.lar<-lars(x,y,type="lar")
> model.lar

Call:
lars(x = x, y = y, type = "lar")
R-squared: 0.982 
Sequence of LAR moves:
     X4 X1 X2 X3
Var   4  1  2  3
Step  1  2  3  4


在这里插入图片描述

> summary(model.lar)
LARS/LAR
Call: lars(x = x, y = y, type = "lar")
  Df     Rss       Cp
0  1 2715.76 442.9167
1  2 2219.35 361.9455
2  3 1917.55 313.5020
3  4   47.97   3.0184
4  5   47.86   5.0000

在这里插入图片描述

选择CP值最小的那一步,即Y~X4+X1+X2把X3剃掉了

系数获取

> coef(model.lar)
            X1        X2        X3         X4
[1,] 0.0000000 0.0000000 0.0000000  0.0000000
[2,] 0.0000000 0.0000000 0.0000000 -0.1079008
[3,] 0.1051605 0.0000000 0.0000000 -0.1448580
[4,] 1.4508509 0.4157739 0.0000000 -0.2364662
[5,] 1.5511026 0.5101676 0.1019094 -0.1440610

在这里插入图片描述

LAR回归的几何意义解释

在这里插入图片描述

==============

聚类分析
概念介绍
聚类分析是一类将数据所研究对象进行分类的统计方法。这一类方法的共同特点是∶事先不知道类别的个数与结构﹔据以进行分析的数据是对象之间的相似性或相异性的数据。将这些相似或相异性数据看成是对象之间的"距离"远近的一种度量,将距离近的对象归入一类,不同类之间的对象距离较远。这就是聚类分析方法的共同思路。|

聚类的输入是一组未被标记的样本,聚类根据数据自身的距离或相似度将它们划分为若干组,划分的原则是组内距离最小化而组间(外部)距离最大化,如图所示∶

在这里插入图片描述

这种模型核心思想:通过距离度量,将数据进行聚类,达到类内距离最小化,类间距离最大化。
常用的距离度量:;
1.欧式距离
2.曼哈度距离
3.切比雪夫距离

欧氏距离模拟,距离计算

> x1<-c(1,2)
> x2<-c(4,9)
> rbind(x1,x2)
   [,1] [,2]
x1    1    2
x2    4    9
> dist(rbind(x1,x2))
         x1
x2 7.615773
> x3<-c(3,4)
> x4<-c(10,2)
> dist(rbind(x1,x2,x3,x4))
         x1       x2       x3
x2 7.615773                  
x3 2.828427 5.099020         
x4 9.000000 9.219544 7.280110

曼哈顿距离模拟,距离计算

> dist(rbind(x1,x2,x3,x4),method="manhattan")
   x1 x2 x3
x2 10      
x3  4  6   
x4  9 13  9

切比雪夫距离模拟

> dist(rbind(x1,x2,x3,x4),method="maximum")
   x1 x2 x3
x2  7      
x3  2  5   
x4  9  7  7

一组数据分组分类
在这里插入图片描述

在这里插入图片描述
特点,层数越靠上,类别越少。这种算法只适合样本量小的情况使用。因为样本量越多,层数越多,计算代价越大。

系统聚类法:

> x1<-c(1)
> x2<-c(2)
> x3<-c(3)
> x4<-c(6)
> x5<-c(8)
> x6<-c(11)
> model<-hclust(dist(rbind(x1,x2,x3,x4,x5,x6)))
> plot(model)

在这里插入图片描述

案例数据(城市指标数据)

x1 x2 x3 x4 x5 x6 x7 x8
2959.19 730.79 749.41 513.34 467.87 1141.82 478.42 457.64
2459.77 495.47 697.33 302.87 284.19 735.97 570.84 305.08
1495.63 515.90 362.37 285.32 272.95 540.58 364.91 188.63
1406.33 477.77 290.15 208.57 201.50 414.72 281.84 212.10
1303.97 524.29 254.83 192.17 249.81 463.09 287.87 192.96
1730.84 553.90 246.91 279.81 239.18 445.20 330.24 163.86
1561.86 492.42 200.49 218.36 220.69 459.62 360.48 147.76
1410.11 510.71 211.88 277.11 224.65 376.82 317.61 152.85
3712.31 550.74 893.37 346.93 527.00 1034.98 720.33 462.03
2207.58 449.37 572.40 211.92 302.09 585.23 429.77 252.54
2629.16 557.32 689.73 435.69 514.66 795.87 575.76 323.36
1844.78 430.29 271.28 126.33 250.56 513.18 314.00 151.39
2709.46 428.11 334.12 160.77 405.14 461.67 535.13 232.29
1563.78 303.65 233.81 107.90 209.70 393.99 509.39 160.12
1675.75 613.32 550.71 219.79 272.59 599.43 371.62 211.84
1427.65 431.79 288.55 208.14 217.00 337.76 421.31 165.32
1942.23 512.27 401.39 206.06 321.29 697.22 492.60 226.45
1783.43 511.88 282.84 201.01 237.60 617.74 523.52 182.52
3055.17 353.23 564.56 356.27 811.88 873.06 1082.82 420.81
2033.87 300.82 338.65 157.78 329.06 621.74 587.02 218.27
2057.86 186.44 202.72 171.79 329.65 477.17 312.93 279.19
2303.29 589.99 516.21 236.55 403.92 730.05 438.41 225.80
1974.28 507.76 344.79 203.21 240.24 575.10 430.36 223.46
1673.82 437.75 461.61 153.32 254.66 445.59 346.11 191.48
2194.25 537.01 369.07 249.54 290.84 561.91 407.70 330.95
2646.61 839.70 204.44 209.11 379.30 371.04 269.59 389.33
1472.95 390.89 447.95 259.51 230.61 490.90 469.10 191.34
1525.57 472.98 328.90 219.86 206.65 449.69 249.66 228.19
1654.69 437.77 258.78 303.00 244.93 479.53 288.56 236.51
1375.46 480.89 273.84 317.32 251.08 424.75 228.73 195.93
1608.82 536.05 432.46 235.82 250.28 541.30 344.85 214.40

代码

> city<-read.table("city.txt",header=T)
> > model<-hclust(dist(city))
> > plot(model)

将行序号更改为城市名

> rownames(city)<-c("北京","天津","河北","山西","内蒙古","辽宁","吉林","黑龙江","上海","江苏","浙江","安徽","福建","江西","山东","河南","湖南","湖北","广东","广西","海南","重庆","四川","贵州","云南","西藏","陕西","甘肃","青海","宁夏","新疆")
> city
            x1     x2     x3     x4     x5      x6      x7     x8
北京   2959.19 730.79 749.41 513.34 467.87 1141.82  478.42 457.64
天津   2459.77 495.47 697.33 302.87 284.19  735.97  570.84 305.08
河北   1495.63 515.90 362.37 285.32 272.95  540.58  364.91 188.63
山西   1406.33 477.77 290.15 208.57 201.50  414.72  281.84 212.10
内蒙古 1303.97 524.29 254.83 192.17 249.81  463.09  287.87 192.96
辽宁   1730.84 553.90 246.91 279.81 239.18  445.20  330.24 163.86
吉林   1561.86 492.42 200.49 218.36 220.69  459.62  360.48 147.76
黑龙江 1410.11 510.71 211.88 277.11 224.65  376.82  317.61 152.85
上海   3712.31 550.74 893.37 346.93 527.00 1034.98  720.33 462.03
江苏   2207.58 449.37 572.40 211.92 302.09  585.23  429.77 252.54
浙江   2629.16 557.32 689.73 435.69 514.66  795.87  575.76 323.36
安徽   1844.78 430.29 271.28 126.33 250.56  513.18  314.00 151.39
福建   2709.46 428.11 334.12 160.77 405.14  461.67  535.13 232.29
江西   1563.78 303.65 233.81 107.90 209.70  393.99  509.39 160.12
山东   1675.75 613.32 550.71 219.79 272.59  599.43  371.62 211.84
河南   1427.65 431.79 288.55 208.14 217.00  337.76  421.31 165.32
湖南   1942.23 512.27 401.39 206.06 321.29  697.22  492.60 226.45
湖北   1783.43 511.88 282.84 201.01 237.60  617.74  523.52 182.52
广东   3055.17 353.23 564.56 356.27 811.88  873.06 1082.82 420.81
广西   2033.87 300.82 338.65 157.78 329.06  621.74  587.02 218.27
海南   2057.86 186.44 202.72 171.79 329.65  477.17  312.93 279.19
重庆   2303.29 589.99 516.21 236.55 403.92  730.05  438.41 225.80
四川   1974.28 507.76 344.79 203.21 240.24  575.10  430.36 223.46
贵州   1673.82 437.75 461.61 153.32 254.66  445.59  346.11 191.48
云南   2194.25 537.01 369.07 249.54 290.84  561.91  407.70 330.95
西藏   2646.61 839.70 204.44 209.11 379.30  371.04  269.59 389.33
陕西   1472.95 390.89 447.95 259.51 230.61  490.90  469.10 191.34
甘肃   1525.57 472.98 328.90 219.86 206.65  449.69  249.66 228.19
青海   1654.69 437.77 258.78 303.00 244.93  479.53  288.56 236.51
宁夏   1375.46 480.89 273.84 317.32 251.08  424.75  228.73 195.93
新疆   1608.82 536.05 432.46 235.82 250.28  541.30  344.85 214.40

建模

> model<-hclust(dist(city))
> plot(model)

在这里插入图片描述

聚合成5类

> rect.hclust(model,5)

在这里插入图片描述

==============
K-Means算法

概念介绍
K-Means算法是典型的基于距离的非层次(动态)聚类算法,在最小化误差函数的基础上将数据划分为预定的类数K,采用距离作为相似性的评价指标,即认为两个对象的距离越近,其相似度就越大。
算法过程
1 )从N个样本数据中随机选取K个对象作为初始的聚类中心,(选几个对象就有几个类);
2)分别计算每个样本到各个聚类中心的距离,将对象分配到距离最近的聚类中;
3)所有对象分配完成后,重新计算K个聚类的中心;
4)与前一次计算得到的K个聚类中心比较,如果聚类中心发生变化,转2),否则转5);
5)迭代2~3步直至新的质心与原质心相等或小于指定阈值,算法结束

聚类的结果可能依赖于初始聚类中心的随机选择,可能使得结果严重偏离全局最优分类。实践中,为了得到较好的结果,通常以不同的初始聚类中心,多次运行K-Means算法。
在所有对象分配完成后,重新计算K个聚类的中心时,对于连续数据,聚类中心取该簇的均值,但是当样本的某些属性是分类变量时,均值可能无定义,可以使用K-众数方法。

K-Means聚类算法中,一般需要度量样本之间的距离、样本与簇之间的距离以及簇与簇之间的距离。度量样本之间的相似性最常用的是欧几里得距离、曼哈顿距离、闵可夫斯基距离、马氏距离等。

在这里插入图片描述

#5个中心,20个迭代
> model.km<-kmeans(city,5,nstart=20)
> model.km
K-means clustering with 5 clusters of sizes 2, 15, 5, 8, 1

Cluster means:
        x1      x2       x3      x4       x5        x6        x7       x8
1 3335.750 640.765 821.3900 430.135 497.4350 1088.4000  599.3750 459.8350
2 1525.815 478.672 322.8827 232.400 236.4187  457.5313  344.8187 190.2193
3 2549.658 582.118 488.3660 268.998 397.4420  618.9200  477.9460 295.1720
4 2004.785 429.480 347.8925 190.955 287.6662  581.1612  437.2375 233.0962
5 3055.170 353.230 564.5600 356.270 811.8800  873.0600 1082.8200 420.8100

Clustering vector:
  北京   天津   河北   山西 内蒙古   辽宁   吉林 黑龙江   上海   江苏   浙江   安徽   福建   江西   山东 
     1      3      2      2      2      2      2      2      1      4      3      4      3      2      2 
  河南   湖南   湖北   广东   广西   海南   重庆   四川   贵州   云南   西藏   陕西   甘肃   青海   宁夏 
     2      4      4      5      4      4      3      4      2      4      3      2      2      2      2 
  新疆 
     2 

Within cluster sum of squares by cluster:
[1] 360737.7 666295.1 698464.2 491962.4      0.0
 (between_SS / total_SS =  84.8 %)

Available components:

[1] "cluster"      "centers"      "totss"        "withinss"     "tot.withinss" "betweenss"    "size"        
[8] "iter"         "ifault"      
> 

案例

> data5<-read.table("rfm.txt",header=T)
> data5
   R  F    M
1 15  3  800
2  4 16 2000
3 13  4  700
4 12  3  500
5  3 15 1500
6  5 14 2200
7  4  5 1800

> model<-hclust(dist(data5))
> plot(model)


> model.km<-kmeans(data5,5,nstart=20)
> model.km
K-means clustering with 5 clusters of sizes 2, 1, 1, 1, 2

Cluster means:
     R    F    M
1  4.5 15.0 2100
2 12.0  3.0  500
3  3.0 15.0 1500
4  4.0  5.0 1800
5 14.0  3.5  750

Clustering vector:
[1] 5 1 5 2 3 1 4

Within cluster sum of squares by cluster:
[1] 20002.5     0.0     0.0     0.0  5002.5
 (between_SS / total_SS =  99.1 %)

Available components:

[1] "cluster"      "centers"      "totss"        "withinss"     "tot.withinss" "betweenss"    "size"         "iter"         "ifault"   

聚类模型的应用
用于客户的价值识别。
客户价值识别的思路:
1.用聚类模型判断哪些用是一类
2.具体分析每一类群体特点

客户价值识别经典的业务模型:RFM
R-消费间隔
F-消费频率
M-消费金额

遇到缺失数据如何处理:
1.如果缺失数据的属性并不重要,可以做丢弃处理
2.如果不允许丢弃,可以用业务手册中规则的默认值替代。
3.均值插补法
4.回归插补法

==============
SVM算法

1.线性分类器
2.有约束优化模型(比如岭回归)
3.特征空间构造
4.核函数
5.拉格朗日定理

聚类模型和分类模型是两种不同的模型
在这里插入图片描述

在这里插入图片描述
综上,可以根据样本即来判断。
如果样本集没有因变量(类标号),就是聚类
如果样本集有因变量,就是分类

线性分类器的基本思想

线性分类器的基本思想

在这里插入图片描述

案例

X1 X2 Y
-1.9 3.2 1
-6.9 0.4 1
5.2 2 1
5 2.5 1
7.3 0 1
6.8 12.7 1
0.9 -5.4 1
-12.5 -2.5 1
1.5 1.3 1
3.8 6.8 1
0.2 6.2 2
-0.1 7.5 2
0.4 14.6 2
2.7 8.3 2
2.1 0.8 2
-4.6 4.3 2
-1.7 10.9 2
-2.6 13.1 2
2.6 12.8 2
-2.8 10 2

代码

> data6<-read.table("fisher.txt",header=T)
> data6
      X1   X2 Y
1   -1.9  3.2 1
2   -6.9  0.4 1
3    5.2  2.0 1
4    5.0  2.5 1
5    7.3  0.0 1
6    6.8 12.7 1
7    0.9 -5.4 1
8  -12.5 -2.5 1
9    1.5  1.3 1
10   3.8  6.8 1
11   0.2  6.2 2
12  -0.1  7.5 2
13   0.4 14.6 2
14   2.7  8.3 2
15   2.1  0.8 2
16  -4.6  4.3 2
17  -1.7 10.9 2
18  -2.6 13.1 2
19   2.6 12.8 2
20  -2.8 10.0 2
> plot(data6$X1,data6$X2)
> text(data6$X1,data6$X2,data6$Y,adj=-0.5)
> 

展示
在这里插入图片描述

建模

> model<-lda(Y~X1+X2,data=data6)

===============

特征空间构造
为什么要做特征空间构造?
因为在原空间直接求解,直接求解可能很复杂甚至无法求解。所以可以映射到某一个特征空间来求解,就会使得问题变得简单

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

综上,在解决分类问题时,如果在低维空是非线性可分的,可以采用升维的特征空间构造手段,在高维的特征空间里,找到合适的线性分类器。从而解决线性可分。
即总是会一个高维的特征空间,解决线性可分问题。之所以追求线性可分,是因为非线性分类器难以求得

==============================

核函数
一般的算法不采用升维的方式解决分类,因为维度越高,计算代价越大,可能会带来位数灾难问题。
但是SVM算法用的是升维手段,因为底层还用到的核函数机制。
核函数机制的思想:在某一个低维空间中找到一个核函数,然后用这个低维的核函数去计算高维的特征空间数据

在这里插入图片描述

拉格朗日定理
符合如下条件:
1.求解最优化问题
2.有一个目标函数f(β)
3.有一个约束函数h(β)

在这里插入图片描述

转变为求拉格朗日函数的极值
对β和α求偏导=0(极值点),然后通过方程组解出系数

拉格朗日理论的举例
(给定表面积的最大体积盒)考虑计算一个盒子的三个边长w,u,v。它们使得盒子的体积最大而表面积等于一个定值c。该问题可以写为︰
在这里插入图片描述
这个问题的拉格朗日形式是︰

在这里插入图片描述

根据之前的定理,要想求得w,u,v以及B,求偏导后可得:

在这里插入图片描述

拉格朗日定理用于求解有约束的最优化问题

================

SVM Support Vector Machine

支持向量机,用于解决高维数据的分类,比如图片分类等场景

在这里插入图片描述

二维的特征空间里
目的:在当前的特征空间里找到一个最优的线性分类器
1.明确SVM最优的条件定义:分类器和两类之间的分类间隔最宽。
2.求解一组系数w,使得分类间隔d最宽

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值