PCA降维可视化举例


前言

横看成岭侧成峰,远近高低各不同。PCA降维的作用是降低数据的维度,同时让最小的维度得到最大原数据的信息,也就是降维后的点方差最大。本文通过一群点从二维降到一维可视化PCA的效果

1、生成一群二维点并画在坐标轴上

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

#先生成一群点 然后画出来
datax=np.random.randint(30,40, size=(1, 100)).flatten()
datay=-2*datax+100+np.random.randint(-3,3, size=(1, 100)).flatten()
dataxy=pd.DataFrame(data={'x':datax,'y':datay})

plt.figure(figsize=(8,8))
plt.xlim((0, 50))
plt.ylim((0, 50))
plt.scatter(dataxy['x'],dataxy['y'])
plt.show()

在这里插入图片描述

2、PCA降维

from sklearn.decomposition import PCA
transfer=PCA(n_components=1)#n_components=1表示降成一维
data_new=transfer.fit_transform(dataxy)#调用fit_transform
print("经过降维之后的数据的类型和维度:",type(data_new),data_new.shape)

x_pca=np.dot(data_new,transfer.components_)
plt.figure(figsize=(8,8))
plt.grid(True)
plt.title("PCA降维之后的情况")
plt.xlim(-15,15)
plt.ylim(-15,15)
plt.scatter(x_pca[:,0],x_pca[:,1])
plt.show()#PCA降维自动给数据规范化了一下  均值为0 方差为1    从下图可以看出来

在这里插入图片描述

3、平移回去PCA和原来点共同显示

mean_x = np.mean(dataxy.values[:, 0])#得到原来那批数据的x的中点
mean_y = np.mean(dataxy.values[:, 1])#得到y的终点    得到原来那群点的中点  目的是把PCA降维成一条直线了点平移回去

w2 = np.ones(dataxy.shape)
w2[:, 0] = w2[:, 0] * mean_x
w2[:, 1] = w2[:, 1] * mean_y
x_pca_transBack = x_pca + w2#平移回去了

plt.figure(figsize=(8,8))
plt.scatter(dataxy['x'], dataxy['y'], alpha=0.3, c='blue', label='原数据')  # ,c='black'
plt.scatter(x_pca_transBack[:, 0], x_pca_transBack[:, 1], c='red', label='PCA降维之后的数据',s=5)
plt.legend(prop={"size": 15, "weight": "black"})  # 这句代码是控制图例的字体大小
plt.xlim(0,50)
plt.ylim(0,50)
plt.grid(True)
plt.show()

在这里插入图片描述

总结

(如果您发现我哪里写的有错误,欢迎在评论区批评指正)

<think>嗯,用户问的是PCA中n_components参数的含义。首先,我得回忆一下PCA的基本原理。PCA,主成分分析,主要用于,通过找到数据中方差最大的方向,将数据投影到这些方向上,减少度同时保留主要信息。那n_components就是决定到多少的参数吧。 可能需要先解释什么是主成分。主成分是原始特征的线性组合,按照方差大小排序。第一个主成分方差最大,第二个次之,以此类推。所以n_components应该是指保留多少个这样的主成分。 但具体来说,n_components可以取不同的值类型,比如整数、浮点数或者某些字符串选项,比如'mle'。这时候需要分别说明不同情况下的含义。例如,当设置为整数时,直接指定保留的主成分数量。如果是0到1之间的浮点数,可能是指保留的方差比例,这时候PCA会自动选择足够的主成分,使得累积方差贡献率达到这个阈值。 另外,用户可能想知道如何选择合适的n_components值,这时候可能需要提到常用的方法,比如选择累积方差贡献率超过某个阈值(如95%),或者利用碎石图(Scree Plot)观察特征值的拐点。还可以提到交叉验证或者基于模型性能来选择,不过实际应用中可能更常用前两种方法。 需要注意的是,不同的库可能有不同的实现,比如scikit-learn中的PCA允许n_components为整数、浮点数或'mle'(使用Minka的MLE估计)。这时候需要明确说明这些选项的具体作用,避免用户混淆。 还要确保回答结构清晰,分点解释不同情况,可能还要举例说明,比如设置n_components=2时保留前两个主成分,或者设置0.95时保留累计方差95%的成分。同时,提醒用户后的度不会超过原始特征数,或者当n_components为小数时可能得到不同的结果。 总结下来,回答应该覆盖以下几点: 1. n_components的基本定义:选择主成分的数量。 2. 不同参数类型的含义:整数、小数、'mle'等。 3. 如何选择合适的值:方差贡献率、碎石图等方法。 4. 实际应用中的注意事项,比如scikit-learn中的具体用法。 需要确保语言通俗易懂,避免过多数学公式,但如果提到公式需要用正确的LaTeX格式,比如方差贡献率可能涉及特征值的计算。不过根据用户的问题,可能不需要深入数学细节,而是更注重参数的实际意义和选择方法。 另外,用户可能的应用场景包括数据压缩、可视化、去噪或预处理,可以简要提及这些场景中如何考虑n_components的选择,帮助用户理解实际应用。 最后,检查是否有遗漏的点,比如n_components设置过大或过小的影响,或者与其他方法的对比,但根据问题,可能不需要展开,保持回答聚焦在参数本身。</think>PCA(主成分分析)中的 `n_components` 参数用于指定后保留的主成分数量或方差比例。以下是逐步解释: --- ### 1. **基本定义** `n_components` 决定将原始数据映射到多少的低空间。 - **主成分**是数据中方差最大的方向(即数据变化最显著的方向)。 - 每个主成分对应一个特征值,特征值越大,该方向上的方差越大。 --- ### 2. **参数类型** `n_components` 可以是以下形式: #### **① 整数** - 直接指定保留的主成分数量。 **示例**:`n_components=2` 表示保留前两个主成分,将数据至二。 #### **② 0到1之间的浮点数** - 表示保留的**累积方差贡献率**。 **示例**:`n_components=0.95` 表示保留足够的主成分,使累积方差占总方差的95%。 #### **③ 特殊值** - `n_components='mle'`:基于信息论准则(MLE)自动选择度(需注意不同库的实现差异)。 --- ### 3. **如何选择合适值?** #### **方法1:方差贡献率** - 计算每个主成分的方差贡献率(即特征值占比),选择累积超过阈值(如95%)的成分。 **公式**: $$\text{累积方差} = \frac{\sum_{i=1}^k \lambda_i}{\sum_{i=1}^n \lambda_i}$$ 其中 $\lambda_i$ 是第 $i$ 个特征值,$k$ 是保留的主成分数。 #### **方法2:碎石图(Scree Plot)** - 绘制特征值随主成分变化的曲线,选择特征值下变缓的“拐点”对应的 $k$ 值。 --- ### 4. **注意事项** - **度上限**:后的度 ≤ 原始特征数。 - **浮点数参数**:若设置为 `0.95`,实际保留的主成分数可能与不同数据集不同。 - **应用场景**: - 可视化(通常设为2或3) - 去噪或压缩(通过保留高方差成分) --- ### 5. **代码示例(scikit-learn)** ```python from sklearn.decomposition import PCA # 保留2个主成分 pca = PCA(n_components=2) X_pca = pca.fit_transform(X) # 保留95%的方差 pca = PCA(n_components=0.95) X_pca = pca.fit_transform(X) ``` --- ### 总结 `n_components` 是控制后数据度和信息保留程度的关键参数,需根据实际需求(如可视化、计算效率、信息损失容忍度)合理选择。
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值