Python数据建模--主成分分析

44 篇文章 4 订阅
8 篇文章 3 订阅


PCA主成分分析的python实现方法

介绍:最广泛无监督算法 + 基础的降维算法,通过线性变换将原始数据变换为一组各维度线性无关的表示,用于提取数据的主要特征分量 → 高维数据的降维

分类:二维数据降维 / 多维数据降维

二维数据降维

导入库

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
%matplotlib inline

数据创建

rng = np.random.RandomState(8)
data = np.dot(rng.rand(2,2),rng.randn(2,200)).T
df = pd.DataFrame({'X1':data[:,0],
                    'X2':data[:,1]})
print(df.head())
print(df.shape)

*


在这里插入图片描述

数据在图形中展示

plt.scatter(df['X1'],df['X2'], alpha = 0.8, marker = '.')
plt.axis('equal')
plt.grid()

*

在这里插入图片描述

构建模型

from sklearn.decomposition import PCA  
# 加载主成分分析模块PCA

pca = PCA(n_components = 1)  # n_components = 1 → 降为1维
pca.fit(df)  # 构建模型
# sklearn.decomposition.PCA(n_components=None, copy=True, whiten=False)  
# n_components:  PCA算法中所要保留的主成分个数n,也即保留下来的特征个数n
# copy: True或者False,默认为True → 表示是否在运行算法时,将原始训练数据复制一份
# fit(X,y=None) → 调用fit方法的对象本身。比如pca.fit(X),表示用X对pca这个对象进行训练

print("特征值", pca.explained_variance_)  # 输出特征值
print("特征向量",pca.components_)  # 输出特征向量
print("成分的个数", pca.n_components_)  # 输出成分的个数
print('-----')
# components_:返回具有最大方差的成分。
# explained_variance_ratio_:返回 所保留的n个成分各自的方差百分比。
# n_components_:返回所保留的成分个数n。

# 这里是shape(200,2)降为shape(200,1),只有1个特征值,对应2个特征向量
# 降维后主成分 A1 = 0.7788006 * X1 + 0.62727158 * X2

*

在这里插入图片描述

数据转换,生成新变量

x_pca = pca.transform(df)  # 数据转换
x_new = pca.inverse_transform(x_pca)  # 将降维后的数据转换成原始数据
print('original shape:',df.shape)
print('transformed shape:',x_pca.shape)
print('x_new shape:', x_new.shape)
print(x_pca[:5])
print('-----')
# 主成分分析,生成新的向量x_pca
# fit_transform(X) → 用X来训练PCA模型,同时返回降维后的数据,这里x_pca就是降维后的数据
# inverse_transform() → 将降维后的数据转换成原始数据

*

在这里插入图片描述

数据在图中展示

plt.scatter(df['X1'],df['X2'], alpha = 0.8, marker = '.')
plt.scatter(x_new[:,0],x_new[:,1], alpha = 0.8, marker = '*',color = 'r')
plt.axis('equal')
plt.grid()

*

在这里插入图片描述

多维数据降维

加载数据

from sklearn.datasets import load_digits
digits = load_digits()
print(digits .keys())
print('数据长度为:%i条' % len(digits['data']))
print('数据形状为:%i条',digits.data.shape)
print(digits.data[:2])

*

在这里插入图片描述

模型建立

pca = PCA(n_components = 2)  # 降为2纬
projected = pca.fit_transform(digits.data)
print('original shape:',digits.data.shape)
print('transformed shape:',projected.shape)
print("特征值",pca.explained_variance_)  # 输出特征值
print("特征向量形状",pca.components_.shape)  # 输出特征向量形状
# print(pca.components_)
print("解析后数据",projected)  # 输出解析后数据
# 降维后,得到2个成分,每个成分有64个特征向量

*

在这里插入图片描述

二维数据制图


plt.scatter(projected[:,0],projected[:,1],
           c = digits.target, edgecolor = 'none',alpha = 0.5,
           cmap = 'Reds',s = 5)
plt.axis('equal')
plt.grid()
plt.colorbar()

*

在这里插入图片描述

主成分筛选

pca = PCA(n_components = 10)  # 降为10纬
projected = pca.fit_transform(digits.data)
print('original shape:',digits.data.shape)
print('transformed shape:',projected.shape)
print(pca.explained_variance_)  # 输出特征值
print(pca.components_.shape)  # 输出特征向量形状
#print(projected)  # 输出解析后数据
# 降维后,得到10个成分,每个成分有64个特征向量

c_s = pd.DataFrame({'b':pca.explained_variance_,
                   'b_sum':pca.explained_variance_.cumsum()/pca.explained_variance_.sum()})
print(c_s)
# 做贡献率累计求和
# 可以看到第7个成分时候,贡献率超过85% → 选取前7个成分作为主成分

*

在这里插入图片描述

绘制结果图

c_s['b_sum'].plot(style = '--ko', figsize = (10,4))
plt.axhline(0.85,color='r',linestyle="--",alpha=0.8)  
plt.text(6,c_s['b_sum'].iloc[6]-0.08,'第7个成分累计贡献率超过85%',color = 'r')
plt.grid()

*

在这里插入图片描述

Python 数据建模:

- Python数据建模–回归
- Python数据建模–分类
- Python数据建模–主成分分析
- Python数据建模–K-means聚类
- Python数据建模–蒙特卡洛模拟

### 回答1: PCA(主成分分析)是一种统计学分析技术,用于从原始数据中提取最重要的信息,从而减少数据的复杂性。它可以通过分析数据的特征和相关性,来减少维度数量,从而提高数据处理的效率。使用Python代码,可以将原始数据转换为一组有意义的变量,这些变量可以帮助我们更好地理解数据的结构和内在规律。此外,PCA还可以帮助我们找出数据中最重要的信息,从而提高分析的准确性和可信度。 ### 回答2: PCA(Principal Component Analysis)主成分分析是一种常用的降维算法,可以将高维数据集转换为低维表示,在保留数据信息的同时,减少了数据的维度。 在Python中,我们可以使用scikit-learn库来进行PCA主成分分析。首先,我们需要导入PCA模块: ``` from sklearn.decomposition import PCA ``` 然后,创建一个PCA对象,并设置需要保留的主成分数量: ``` pca = PCA(n_components=k) ``` 其中,k代表希望保留的主成分的个数。 接下来,我们需要将原始数据集X传递给PCA对象进行拟合和转换: ``` pca.fit(X) X_pca = pca.transform(X) ``` 这里,fit()方法用于拟合PCA模型,transform()方法用于将原始数据集转换为低维表示的数据集。 完成PCA转换后,我们可以通过explained_variance_ratio_属性来查看每个主成分所占的方差比例: ``` explained_variance_ratio = pca.explained_variance_ratio_ ``` 这个属性返回一个数组,表示每个主成分所解释的方差占比。 另外,我们还可以通过components_属性来获取每个主成分的系数向量: ``` components = pca.components_ ``` 这里,components_属性返回一个矩阵,每一行代表一个主成分的系数向量。 通过PCA主成分分析,我们可以更好地理解和可视化高维数据集。主成分分析通过减少数据的维度,并保留了大部分的信息,使得我们能够更好地进行数据分析和模型建立。 ### 回答3: PCA(Principal Component Analysis)主成分分析是一种常用的降维方法,可以用于数据可视化、数据压缩和去噪等任务中。在Python中,我们可以使用sklearn库中的PCA模块来进行主成分分析。 首先,我们需要导入相应的库和数据。假设我们有一个具有m行n列的数据集X,其中m为样本数,n为特征数。 ```python import numpy as np from sklearn.decomposition import PCA # 导入数据 X = np.array([[x1, x2, x3, ... , xn], [x1, x2, x3, ... , xn], ... [x1, x2, x3, ... , xn]]) ``` 接下来,我们可以使用PCA类来进行主成分分析。 ```python # 创建PCA类对象 pca = PCA(n_components=k) # 这里k是我们要保留的主成分数量 # 执行主成分分析 pca.fit(X) # 获得降维后的数据集 X_pca = pca.transform(X) # 获得降维后的特征向量(主成分) components = pca.components_ # 获得方差的解释比例 explained_variance_ratio = pca.explained_variance_ratio_ ``` 在上述代码中,我们创建了一个PCA对象,并指定了要保留的主成分数量k。然后,我们使用fit方法对数据进行主成分分析,并使用transform方法将数据转化为降维后的结果X_pca。 接下来,我们可以通过components属性获得降维后的特征向量(主成分),通过explained_variance_ratio属性获得每个主成分所能解释的方差比例。这些信息可以帮助我们了解数据的特征,并决定保留多少个主成分。 最后,我们可以使用降维后的数据集X_pca进行后续的分析,如可视化或建模等。 总结一下,PCA主成分分析是一种常用的降维方法,可以使用sklearn库中的PCA模块进行实现。它的核心思想是通过线性变换将高维数据映射到低维空间,保留最具有代表性的特征。在使用时,我们可以指定要保留的主成分数量,并通过解释比例和特征向量等信息来评估降维效果。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值