NCA feature selection method
이전 댓글 표시
i tried to use NCA feature selection method to select the most relitive features from 16483 features, but i always got all features because the bestlambda and bestloss are always 0. how can work in this problem.
another question how can i set the lambdavals, is there a rule or something for linspace () parameter? as well how can i select the best value for 'tol' ?
cvx=cvpartition(size(Features,1),'kfold',5);
numvalidsets = cvx.NumTestSets;
n = cvx.TrainSize(1);
lambdavals=(linspace(0,20,20)./n;
lossvals = zeros(length(lambdavals),numvalidsets);
for w = 1:length(lambdavals)
for p =1:numvalidsets
train=1;
test=1;
indextrain=training(cvx,p);
for i=1:size(Features,1)
if indextrain(i)==1
XTrain(train,:)=Features(i,:);
YTrain(train)=label(i);
train=train+1;
else
XTest(test,:)=Features(i,:);
YTest(test)=label(i);
test=test+1;
end
end
TrainData= XTrain,YTrain;
TestData =XTest,YTest;
nca = fscnca(XTrain,YTrain,'FitMethod','exact', ...
'Solver','sgd','Lambda',lambdavals(w), ...
'IterationLimit',1,'Standardize',true);
lossvals(w,p) = loss(nca,XTest,YTest,'LossFunction','classiferror');
end
end
%%
meanloss = mean(lossvals,2);
[~,idx] = min(meanloss) % Find the index
bestlambda = lambdavals(idx) % Find the best lambda value
bestloss = meanloss(idx)
nca = fscnca(XTrain,YTrain,'FitMethod','exact','Solver','sgd',...
'Lambda',bestlambda,'Standardize',true,'Verbose',1);
tol = 0.55;
selidx = find(nca.FeatureWeights > tol*max(1,max(nca.FeatureWeights)))
Best_Features_train = XTrain(:,selidx);
댓글 수: 1
Alexis
2020년 9월 29일
I have this same problem. Without an error message or warning it's not clear to me where to start. I have 14 features and over 5,000 observations.
답변 (0개)
카테고리
도움말 센터 및 File Exchange에서 Get Started with Statistics and Machine Learning Toolbox에 대해 자세히 알아보기
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!