[回归分析][12]--主成分分析

[回归分析][12]--主成分分析


这一篇文章会讲一下关于主成分的内容,这里就是处理数据间有相关性的。

我会用一个例子来说明:
data = {{49.`, 15.9`, 149.3`, 4.2`, 108.1`}, {50.`, 16.4`, 161.2`, 
    4.1`, 114.8`}, {51.`, 19.`, 171.5`, 3.1`, 123.2`}, {52.`, 19.1`, 
    175.5`, 3.1`, 126.9`}, {53.`, 18.8`, 180.8`, 1.1`, 132.1`}, {54.`,
     20.4`, 190.7`, 2.2`, 137.7`}, {55.`, 22.7`, 202.1`, 2.1`, 
    146.`}, {56.`, 26.5`, 212.4`, 5.6`, 154.1`}, {57.`, 28.1`, 226.1`,
     5.`, 162.3`}, {58.`, 27.6`, 231.9`, 5.1`, 164.3`}, {59.`, 26.3`, 
    239.`, 0.7`, 167.6`}};
上面是这次会用到的数据

(*1.对原始数据进行回归*)
lm1 = LinearModelFit[data, {x1, x2, x3}, {x1, x2, x3}]
Grid[{{"方差分析表", lm1["ANOVATable"]}, {"参数信息表", 
   lm1["ParameterTable"]}, {"AdjustedRSquared", 
   lm1["AdjustedRSquared"]}}, Spacings -> {3, 3}, Frame -> All]


(*2.对标准化后的数据进行回归*)
datastand = Standardize[data];
lm2 = LinearModelFit[datastand, {x1, x2, x3}, {x1, x2, x3}];
Grid[{{"方差分析表", lm2["ANOVATable"]}, {"参数信息表", 
   lm2["ParameterTable"]}, {"AdjustedRSquared", 
   lm2["AdjustedRSquared"]}}, Spacings -> {3, 3}, Frame -> All]

(*3.计算相关矩阵的特征值  特征向量  条件数=Sqrt[最大特征跟/最小特征跟]*)
mat = Correlation[data[[All, {1, 2, 3}]]];
eig = Eigenvectors[mat]
相关系数矩阵:

条件数:

(*4.构建新的变量 主成分c = x.v'*)
c = datastand[[All, {1, 2, 3}]].Transpose[eig]


(*5.对c进行回归,回归的时候去掉特征值小的对应的c---切记要用标准化的数据*)
我们考虑--留两个主成分
c2 = c[[All, {1, 2}]];
c2 = Transpose[c2];
data52 = Transpose[AppendTo[c2, datastand[[All, -1]]]];
lm52 = LinearModelFit[data52, {x1, x2}, {x1, x2}]
Grid[{{"方差分析表", lm52["ANOVATable"]}, {"参数信息表", 
   lm52["ParameterTable"]}, {"AdjustedRSquared", 
   lm52["AdjustedRSquared"]}}, Spacings -> {3, 3}, Frame -> All]
再计算标准化情况下的参数和原始数据的参数
stdxs = Transpose[eig].{-0.689, -0.191, 0};
{b1, b2, b3} = (StandardDeviation[data[[All, -1]]]/
      StandardDeviation[data[[All, #]]])*stdxs[[#]] & /@ {1, 2, 3}
Mean[data[[All, -1]]] - b1*Mean[data[[All, 1]]] - 
 b2*Mean[data[[All, 2]]] - b3*Mean[data[[All, 3]]]

再看一下条件数:


可以看到条件数变成了1,说明变好了。

更加详细的可以看代码,代码已经上传了,下载链接如下:
代码下载链接
以上,所有
2016/12/9



转载于:https://www.cnblogs.com/wmn7q/p/7265533.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值