python实现主成分估计

什么是PCA

主成分分析的主要目的是希望用较少的变量去解释原来资料中的大部分变异,将我们手中许多相关性很高的变量转化成彼此相互独立或不相关的变量。通常是选出比原始变量个数少,能解释大部分资料中的变异的几个新变量,即所谓主成分,并用以解释资料的综合性指标。由此可见,主成分分析实际上是一种降维方法。

数据

python实现主成分估计_第1张图片

代码

import statsmodels.api as sm
from sklearn.decomposition import PCA
import pandas as pd
import numpy as np

查看相关系数阵

data = pd.read_excel("数据地址")
x = data.iloc[:,1:5]
cor = x.corr()
print(cor)

python实现主成分估计_第2张图片

cor = np.array(cor)
w,v = np.linalg.eig(cor)
print(w)  ###  相关系数阵的特征值
print(v)  ###  对应的特征向量

python实现主成分估计_第3张图片
可以看出最后一个特征值接近于零,前三个特征值之和所占比例(累积贡献率)达到0.999594。

对数据直接作线性回归得经验回归方程

X = sm.add_constant(x)
y = data.iloc[:,5]
est = sm.OLS(y,X).fit()
print(est.summary())

python实现主成分估计_第4张图片

相关参数解析在前面看查看前面博客
https://blog.csdn.net/chenlei456/article/details/123508900
所以我们得出来得回归方程为:
在这里插入图片描述

est.predict(X)

用所得方程对数据进行预测

对数据使用PCA

x = data.iloc[:,1:5]
pca = PCA(n_components=4) ### 依然保留4个成分,不降维
pca.fit(x) ### pca训练
x_train = pca.transform(x) ### 对预测数据转换

用转换的数据得出主成分回归方程

X_train = sm.add_constant(x_train)
y = data.iloc[:,5]
est2 = sm.OLS(y,X_train).fit()
print(est2.summary())

python实现主成分估计_第5张图片
所以我们得出来得回归方程为:
在这里插入图片描述

est2.predict(X)

用所得方程对数据进行预测

差异

两个方程的区别在于后者具有更小的均方误差,因而更稳定。通过P值可发现前者所有系数都无法通过显著性检验。

完整代码

import statsmodels.api as sm
from sklearn.decomposition import PCA
import pandas as pd
import numpy as np

data = pd.read_excel("数据地址")
x = data.iloc[:,1:5]
y = data.iloc[:,5]

cor = x.corr()
cor = np.array(cor)
w,v = np.linalg.eig(cor)

X = sm.add_constant(x)
est = sm.OLS(y,X).fit()


pca = PCA(n_components=4)
pca.fit(x)
x_train = pca.transform(x)
X_train = sm.add_constant(x_train)
est2 = sm.OLS(y,X_train).fit()

print(w)  ###  相关系数阵的特征值
print(v)  ###  对应的特征向量
print(est.summary())
print(est2.summary())

你可能感兴趣的:(python,数据分析,回归)