主成分分析(PCA)与超级决策树分类器在数据降维中的应用

我有一个包含13列的数据集,我希望使用PCA进行数据降维以去除不需要的列。我的问题是,PCA并不会显示列名,而是显示PC1、PC2等。我发现超级决策树分类器也能达到同样的效果,并且能显示每列的变异情况。我只是想确认它们是否有相同的目标,或者它们的效果是否不同。还有没有人能建议更好的数据降维方法?

我的最后一个问题是,我有一段超级决策树分类器的代码,想确认它是否正确?

import numpy as npimport pandas as pdimport matplotlib.pyplot as plt%matplotlib inlinefrom sklearn.ensemble import IsolationForestfrom sklearn.ensemble import ExtraTreesClassifier df = pd.read_csv('D:\\Project\\database\\5-FINAL2\\Final After Simple Filtering.csv')extra_tree_forest = ExtraTreesClassifier(n_estimators = 500,                                         criterion ='entropy', max_features = 'auto') extra_tree_forest.fit(df)feature_importance = extra_tree_forest.feature_importances_ feature_importance_normalized = np.std([tree.feature_importances_ for tree in                                         extra_tree_forest.estimators_],                                         axis = 0) plt.bar(df.columns, feature_importance_normalized) plt.xlabel('Feature Labels') plt.ylabel('Feature Importances') plt.title('Comparison of different Feature Importances') plt.show()

谢谢你。


回答:

这两种方法非常不同。

PCA不显示特征名称,因为PCA的降维与特征的相对重要性无关。PCA将原始数据转换到一个新的空间中,每个新的“特征”(主成分)都彼此独立,你可以通过其对应的特征值判断每个主成分对准确表示数据的重要性。移除最不重要的主成分可以在主成分空间中减少维度,但在原始特征空间中却不能——因此,你需要对所有未来的数据也进行PCA,然后在(缩短的)主成分向量上进行所有分类操作。

超级决策树分类器在你的数据上训练了一个完整的分类器,因此比单纯的降维更强大。然而,它似乎更接近你所寻找的,因为特征重要性可以直接告诉你每个特征在进行分类时有多相关。

请注意,在PCA中,特征值最高的主成分对准确重构数据贡献最大。这与对准确分类数据的贡献不同。超级决策树分类器则相反:它告诉你哪些特征在分类数据时最重要,而不是在重构数据时最重要。

基本上,如果你认为你现在有一个代表性的数据集,并且只存储与你已有数据分类相关的变量是可以接受的,那么使用超级决策树进行降维是一个不错的选择。如果你只是想在不过于关注对分类的影响的情况下,用较少的空间忠实地表示数据,那么PCA是更好的选择。使用PCA进行降维通常也能帮助从原始数据中移除不相关的特征,但这并不是它的优化目标。

Related Posts

神经网络反向传播代码不工作

我需要编写一个简单的由1个输出节点、1个包含3个节点的…

值错误:y 包含先前未见过的标签:

我使用了 决策树分类器,我想将我的 输入 作为 字符串…

使用不平衡数据集进行特征选择时遇到的问题

我正在使用不平衡数据集(54:38:7%)进行特征选择…

广义随机森林/因果森林在Python上的应用

我在寻找Python上的广义随机森林/因果森林算法,但…

如何用PyTorch仅用标量损失来训练神经网络?

假设我们有一个神经网络,我们希望它能根据输入预测三个值…

什么是RNN中间隐藏状态的良好用途?

我已经以三种不同的方式使用了RNN/LSTM: 多对多…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注