How to gather data of same class, select N rows, calculate mean in CSV file
1 vue (au cours des 30 derniers jours)
Afficher commentaires plus anciens
Hello.
I have a data (90 x 2857), column 2857 is a label(class)
I want to gather data of the same class, select N rows, calculate mean.
I made the below code, but I want to reduce the code using for loop
Thank you.
clear all
close all
% read csv file
final = csvread('outfile.csv');
% split data and label
predictors = final(:, 1:end-1);
labels = final(:, end);
predictors = normalize(predictors, 2);
predictors_train = predictors(1:80, :); % rows 1 to 80
predictors_test = predictors(81:90, :); % rows 81 to 90
labels_train = labels(1:80, :); % rows 1 to 80
labels_test = labels(81:90, :); % rows 81 to 90
% gather data of same lable
wave2_support= [predictors_train(1,:); predictors_train(11,:); predictors_train(21,:);
predictors_train(31,:); predictors_train(41,:); predictors_train(51,:);
predictors_train(61,:); predictors_train(71,:)];
wave1_support= [predictors_train(2,:); predictors_train(12,:); predictors_train(22,:);
predictors_train(32,:); predictors_train(42,:); predictors_train(52,:);
predictors_train(62,:); predictors_train(72,:)];
walk_support= [predictors_train(3,:); predictors_train(13,:); predictors_train(23,:);
predictors_train(33,:); predictors_train(43,:); predictors_train(53,:);
predictors_train(63,:); predictors_train(73,:)];
skip_support= [predictors_train(4,:); predictors_train(14,:); predictors_train(24,:);
predictors_train(34,:); predictors_train(44,:); predictors_train(54,:);
predictors_train(64,:); predictors_train(74,:)];
side_support= [predictors_train(5,:); predictors_train(15,:); predictors_train(25,:);
predictors_train(35,:); predictors_train(45,:); predictors_train(55,:);
predictors_train(65,:); predictors_train(75,:)];
run_support= [predictors_train(6,:); predictors_train(16,:); predictors_train(26,:);
predictors_train(36,:); predictors_train(46,:); predictors_train(56,:);
predictors_train(66,:); predictors_train(76,:)];
pjump_support= [predictors_train(7,:); predictors_train(17,:); predictors_train(27,:);
predictors_train(37,:); predictors_train(47,:); predictors_train(57,:);
predictors_train(67,:); predictors_train(77,:)];
jump_support= [predictors_train(8,:); predictors_train(18,:); predictors_train(28,:);
predictors_train(38,:); predictors_train(48,:); predictors_train(58,:);
predictors_train(68,:); predictors_train(78,:)];
jack_support= [predictors_train(9,:); predictors_train(19,:); predictors_train(29,:);
predictors_train(39,:); predictors_train(49,:); predictors_train(59,:);
predictors_train(69,:); predictors_train(79,:)];
bend_support= [predictors_train(10,:); predictors_train(20,:); predictors_train(30,:);
predictors_train(40,:); predictors_train(50,:); predictors_train(60,:);
predictors_train(70,:); predictors_train(80,:)];
% randomly select 5 rows of 8 data in same label
N=5;
c = randperm(size(wave2_support,1)); c = c(1:N);
wave2=wave2_support(c,:); % wave2 matrix
c = randperm(size(wave1_support,1)); c = c(1:N);
wave1=wave1_support(c,:); % wave1 matrix
c = randperm(size(walk_support,1)); c = c(1:N);
walk=walk_support(c,:); % walk matrix
c = randperm(size(skip_support,1)); c = c(1:N);
skip=skip_support(c,:); % skip matrix
c = randperm(size(side_support,1)); c = c(1:N);
side=side_support(c,:); % side matrix
c = randperm(size(run_support,1)); c = c(1:N);
run=run_support(c,:); % run matrix
c = randperm(size(pjump_support,1)); c = c(1:N);
pjump=pjump_support(c,:); % pjump matrix
c = randperm(size(jump_support,1)); c = c(1:N);
jump=jump_support(c,:); % jump matrix
c = randperm(size(jack_support,1)); c = c(1:N);
jack=jack_support(c,:); % jack matrix
c = randperm(size(bend_support,1)); c = c(1:N);
bend=bend_support(c,:); % bend matrix
% calculate mean of each support data
wave2_mean = mean(wave2,1);
wave1_mean = mean(wave1,1);
walk_mean = mean(walk,1);
skip_mean = mean(skip,1);
side_mean = mean(side,1);
run_mean = mean(run,1);
pjump_mean = mean(pjump,1);
jump_mean = mean(jump,1);
jack_mean = mean(jack,1);
bend_mean = mean(bend,1);
% select query (1 row)
N=1; % 1 of row randomly selected
c = randperm(size(predictors_test,1)); c = c(1:N);
query=predictors_test(c,:); % output matrix
% calculate mean of each support
euclidean_bend = pdist2(bend_mean,query, 'euclidean');
euclidean_jack = pdist2(jack_mean,query, 'euclidean');
euclidean_jump = pdist2(jump_mean,query, 'euclidean');
euclidean_pjump = pdist2(pjump_mean,query, 'euclidean');
euclidean_run = pdist2(run_mean,query, 'euclidean');
euclidean_side = pdist2(side_mean,query, 'euclidean');
euclidean_skip = pdist2(skip_mean,query, 'euclidean');
euclidean_walk = pdist2(walk_mean,query, 'euclidean');
euclidean_wave1 = pdist2(wave1_mean,query, 'euclidean');
euclidean_wave2 = pdist2(wave2_mean,query, 'euclidean');
% softmax
n = [euclidean_bend; euclidean_jack; euclidean_jump; euclidean_pjump;
euclidean_run; euclidean_side; euclidean_skip;
euclidean_walk; euclidean_wave1; euclidean_wave2];
0 commentaires
Réponse acceptée
Hiro Yoshino
le 17 Mar 2020
Modifié(e) : Hiro Yoshino
le 17 Mar 2020
I would suggest you should use table for data analytics.
The following code may help you reduce the number of lines.
up to the end line, the data is sorted by the lable.
data = readtable("outfile.csv");
data.Properties.VariableNames{end} = 'label';
data{:,1:end-1} = normalize(data{:,1:end-1},1); % I belive this should be "1"
data = sortrows(data,'label'); % The data are sorted by the lables
wave2_support = data(:,1:9);
table:
if you want to split the data into TEST and TRAIN, then you should try cvpatition:
This function can maintain the ratio of the labels as it is after spliting the data into two.
0 commentaires
Plus de réponses (0)
Voir également
Catégories
En savoir plus sur Dimensionality Reduction and Feature Extraction dans Help Center et File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!