Sklearn PCA 主成分分析

目前理解的主成分分析作用:用于降维,方便后续的处理.

这次在尝试学习相关原理了,不过学的还是不是很通顺,还是很难理解线性代数的一些处理方法的直观意义.
(本篇博客原理部分是从其他博主博客糅合进来的)
Sklearn PCA 主成分分析_第1张图片

  1. 第一步就是每个样本都减去期望值(均值)的意思,这样每个样本的均值就都为0了.
    在这里插入图片描述
  2. 协方差矩阵涨这样,对角线是方差,其他都是协方差.我们比较熟悉的协方差计算公式是这样的.
    Sklearn PCA 主成分分析_第2张图片
    由于第一步处理的时候,E(Xi)都为0了,所以cov(X,Y)=E(XY).然后就变成了这个公式.
    在这里插入图片描述
    方差变成了这个公式
    在这里插入图片描述

3.第三步理解的不是很透彻,总的来说就是由于上面的矩阵是实对称矩阵,肯定能求出n个不线性相关的特征向量,以及对应得特征值,而特征值的大小就可以用于选取特征向量去组成特征矩阵.比如说有n个特征值.但是前k个(特征值由小到大排列)就占了99%,那就只选取k个特征向量组成特征矩阵就好.

在这里插入图片描述
这样,特征数就从n降到了k.实现了降维.

参考文章1
参考文章2

下面是代码实现部分

import pandas as pd
import numpy as np
from sklearn.decomposition import PCA
from sklearn.linear_model import LinearRegression
import matplotlib.pyplot as plt

excel = pd.read_excel('./新新完整.xlsx')
data = excel.loc[:,['距离中心点的距离','密集度','会员对于任务的密集度','会员综合能力']]
data = data.dropna()
print(data.head())

y_ = excel['任务标价']
y_ = y_.dropna()
#这里n_components是选择最终的主成分
#可以先为None,这样得到的就是所有的特征值
#再根据特征值决定要几个,我这里两个就占了99.9%
modle = PCA(n_components=2)
x = modle.fit_transform(data)


lin_model = LinearRegression()
lin_model.fit(x,y_)
y_predict = lin_model.predict(x)


print(modle.explained_variance_ratio_)
print(lin_model.intercept_)
print(lin_model.coef_)
print(lin_model.score(x,y_))


henzhou = [i for i in range(len(y_predict))]
plt.scatter(henzhou,y_,c='r')
plt.plot(henzhou,y_predict,c='b')
plt.show()


四特征值
在这里插入图片描述
降维后的拟合,r^2=0.23

Sklearn PCA 主成分分析_第3张图片
不降维的拟合,r^2=0.28
Sklearn PCA 主成分分析_第4张图片

可以看到降维对于拟合还是有影响的…不过这个例子下都很低…有机会试试拟合比较好的数据.

你可能感兴趣的:(数学建模)