【问题标题】:Using PCA before classification分类前使用 PCA
【发布时间】:2014-12-31 18:49:50
【问题描述】:

我在训练随机森林之前使用 PCA 来减少特征数量。我首先使用了 125 个主成分中的约 70 个,它们约占能量的 99%(根据特征值)。在使用新的转换特征训练随机森林后,我得到了更糟糕的结果。之后我使用了所有的主成分,得到的结果与使用 70 时的结果相同。这对我来说毫无意义,因为这只是在不同的基础上相同的特征空间(空间只被旋转了,所以不应该影响边界)。 有谁知道这可能是什么问题?

这是我的代码

    clc;
clear all;
close all;

load patches_training_256.txt
load patches_testing_256.txt

Xtr = patches_training_256(:,2:end);
Xtr = Xtr';
Ytr = patches_training_256(:,1);
Ytr = Ytr';

Xtest = patches_testing_256(:,2:end);
Xtest = Xtest';
Ytest = patches_testing_256(:,1);
Ytest = Ytest';

data_size = size(Xtr, 2);
feature_size = size(Xtr, 1);

mu = mean(Xtr,2);
sigma = std(Xtr,0,2);
mu_mat = repmat(mu,1,data_size);
sigma_mat = repmat(sigma,1,data_size);

cov = ((Xtr - mu_mat)./sigma_mat) * ((Xtr - mu_mat)./sigma_mat)' / data_size;

[v d] = eig(cov);

%[U S V] = svd(((Xtr - mu_mat)./sigma_mat)');

k = 124;
%Ureduce = U(:,1:k);

%XtrReduce = ((Xtr - mu_mat)./sigma_mat) * Ureduce;
XtrReduce = v'*((Xtr - mu_mat)./sigma_mat);

B = TreeBagger(300, XtrReduce', Ytr', 'Prior', 'Empirical', 'NPrint', 1);

data_size_test = size(Xtest, 2);
mu_test = repmat(mu,1,data_size_test);
sigma_test = repmat(sigma,1,data_size_test);

XtestReduce = v' * ((Xtest - mu_test) ./ sigma_test);

Ypredict = predict(B,XtestReduce');

error = sum(Ytest' ~= (double(cell2mat(Ypredict)) - 48))

【问题讨论】:

    标签: matlab machine-learning pca random-forest feature-selection


    【解决方案1】:

    随机森林很大程度上取决于基础的选择。它不是一个线性模型,它(直到归一化)旋转不变,一旦你“旋转空间”,RF 就会完全改变行为。其背后的原因在于它使用决策树作为基础分类器,完全独立地分析每个特征,因此无法找到任何特征的线性组合。一旦你旋转你的空间,你就会改变特征的“意义”。这并没有错,简单地基于树的分类器在这种转换之后应用是相当糟糕的选择。改用特征选择方法(在不创建任何线性组合的情况下选择哪些特征有价值的方法)。事实上,由于其内部的“特征重要性”计算,RF 本身可以用于此类任务,

    【讨论】:

    • 感谢您的回答,我怀疑同样的事情。我尝试了特征选择方法(向前和向后消除),但是由于它运行缓慢且不切实际的特征数量。我可以尝试使用 RF 中的特征重要性,因为我记得在 RF 中有几种特征重要性的衡量标准(选择频率百分比、平均分数改进等)您对如何使用它们以获得最佳结果有任何经验或建议吗?
    • 不幸的是,存在多个标准的原因是它们的适用性高度依赖于特定的数据/问题,因此您必须至少检查其中的几个。
    【解决方案2】:

    已经有一个 matlab 函数 princomp 可以为你做 pca。我建议不要陷入数字错误循环。他们已经为我们做到了..:)

    【讨论】:

      猜你喜欢
      • 2016-07-29
      • 2017-04-09
      • 2018-08-27
      • 2017-07-17
      • 2018-04-15
      • 2020-07-15
      • 2015-12-27
      • 2013-01-14
      • 1970-01-01
      相关资源
      最近更新 更多