我已经使用PCA计算了我的df中所有列的分数,该df有312列和650行,代码如下:

all_pca=PCA(random_state=4)
all_pca.fit(tt)
all_pca2=all_pca.transform(tt)
plt.plot(np.cumsum(all_pca.explained_variance_ratio_) * 100)  
plt.xlabel('Number of components')
plt.grid(which='both', linestyle='--', linewidth=0.5)
plt.xticks(np.arange(0, 330, step=25))
plt.yticks(np.arange(0, 110, step=10))
plt.ylabel('Explained variance (%)')  
plt.savefig('elbow_plot.png', dpi=1000)

结果如下图所示.

enter image description here

我的主要目标是在100中只使用重要的功能.如您所见,Random forest regression, Gradient boosting, OLS regression and LASSO列描述了My Dataframe中95.2%的差异.

我可以使用这个阈值(100列)进行反向特征 Select 吗?

推荐答案

正如您所看到的,100列描述了我的Dataframe中95.2%的方差.

该图告诉您,componentsPCA components捕获了95%的方差.这components个组件并不对应于components个单独的特征.每个PCA分量都是通过将all个特征组合在一起而形成的,这就是一个分量.

当100个PCA组件捕获95%的差异时,这意味着您的原始312列可以被线性合并到更少的(100)个新列中,并且在此过程中您只丢失了5%的信息.它是对特征集的内在维度的度量.

我可以使用这个阈值(100列)进行反向特征 Select 吗?

解释95%的features个主成分并不能真正告诉你哪些单独的特征(或其中有多少)是重要的,因 for each 主成分都是所有特征的混合.此外,95%指的是features的可变性-这并不意味着features个主成分分析将对目标有用.

也许您可以使用这100个组件来指导您在使用向前和向后特征 Select 之间的 Select .在这种情况下,数据集的内在维度更接近100,而不是312,因此我 Select 向前 Select ,因为似乎有用的特征的数量可能少于原始大小.

如果你在特征 Select 之前运行PCA,它会从原始特征中创建new个特征(PCA分量),在这个过程中,你可能会失go 可解释性,因为新特征可能是原始特征的杂乱线性组合.

识别有用特征的一种方法是使用原始特征在随机林中向前(或向后) Select ,并在达到95%验证准确率之类的得分阈值时停止.然后,您可以将这些选定的功能用于其他模型.

特征 Select 相对耗时,因为它需要大量重复的模型拟合.Permutation importance是识别关键特征的另一种方式.

Python相关问答推荐

Pythind 11无法弄清楚如何访问tuple元素

大Pandas 胚胎中产生组合

Python daskValue错误:无法识别的区块管理器dask -必须是以下之一:[]

从收件箱中的列中删除html格式

无法通过python-jira访问jira工作日志(log)中的 comments

我想一列Panadas的Rashrame,这是一个URL,我保存为CSV,可以直接点击

用渐近模计算含符号的矩阵乘法

Python全局变量递归得到不同的结果

基于行条件计算(pandas)

OpenCV轮廓.很难找到给定图像的所需轮廓

比Pandas 更好的 Select

如何将一组组合框重置回无 Select tkinter?

BeautifulSoup-Screper有时运行得很好,很健壮--但有时它失败了::可能这里需要一些更多的异常处理?

语法错误:文档. evaluate:表达式不是合法表达式

Polars表达式无法访问中间列创建表达式

如何从数据框列中提取特定部分并将该值填充到其他列中?

修改.pdb文件中的值并另存为新的

文本溢出了Kivy的视区

将相应的值从第2列合并到第1列(Pandas )

使用xlsxWriter在EXCEL中为数据帧的各行上色