Matlab 分类前使用主成分分析

Matlab 分类前使用主成分分析,matlab,machine-learning,pca,random-forest,feature-selection,Matlab,Machine Learning,Pca,Random Forest,Feature Selection,在训练随机森林之前,我使用PCA来减少特征的数量。我首先使用了125个主成分中的70个,它们大约占能量的99%(根据本征值)。在使用新的变换特征训练随机森林之后,我得到了更糟糕的结果。在那之后,我使用了所有的主成分,得到了与使用70时相同的结果。这对我来说毫无意义,因为这是同一个要素空间,只有在不同的基础上(空间只有旋转,所以不应影响边界)。 有人知道这里可能有什么问题吗 这是我的密码 clc; clear all; close all; load patches_training_2

在训练随机森林之前,我使用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))

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

已经有一个matlab函数
princomp
,可以为您执行pca。我建议不要陷入数值误差循环。他们为我们做了……:)

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