-
Notifications
You must be signed in to change notification settings - Fork 0
/
ML_Process_test.m
154 lines (109 loc) · 3.37 KB
/
ML_Process_test.m
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
% Organizing some ML stuff
% Author: Jonathan Weinrib
% Originated 01/21/2019
%% This file has some work starting with the ML process once I already have
% The dataset fully formed
clc, clear all, close all
%%
load('signal_list.mat')
sig_1_orig = load('est_enf_B_P1.mat');
sig_2_orig = load('est_enf_B_P2.mat');
sig_3_orig = load('est_enf_D_P1.mat');
sig_4_orig = load('est_enf_D_P2.mat');
%%
x1 = processed_ENF_cellArray{1}{4};
x1labels = [ones(length(x1),1) ones(length(x1),1)];
x2 = processed_ENF_cellArray{2}{4};
x2labels = [ones(length(x2),1) ones(length(x2),1)];
x3 = processed_ENF_cellArray{3}{4};
x3labels = [ones(length(x3),1) ones(length(x3),1)];
x4 = processed_ENF_cellArray{4}{4};
x4labels = [ones(length(x4),1) ones(length(x4),1)];
x5 = processed_noise_cellArray{1}{4};
x5labels = [zeros(length(x5),1) ones(length(x5),1)];
x6 = processed_noise_cellArray{2}{4};
x6labels = [zeros(length(x6),1) ones(length(x6),1)];
x7 = processed_noise_cellArray{3}{4};
x7labels = [zeros(length(x7),1) ones(length(x7),1)];
x8 = processed_noise_cellArray{4}{4};
x8labels = [zeros(length(x8),1) ones(length(x8),1)];
%Labels:: % first column is ENF, second column is noise
YtraiN = {categorical(x1labels(:,1)') categorical(x3labels(:,1)') categorical(x5labels(:,1)') categorical(x7labels(:,1)')};
YtesT = {categorical(x2labels(:,1)') categorical(x4labels(:,1)') categorical(x6labels(:,1)') categorical(x8labels(:,1)')};
xtrain = {x1 x3 x5 x7};
xtest = {x2 x4 x6 x8};
%% make training and testing data
% Time to make xtrain and ytrain
%% Logistic Regression Learner:
%y is a 4x2 matrix
x1labels = [1 1];
x2labels = [1 1];
x3labels = [1 1];
x4labels = [1 1];
x5labels = [0 1];
x6labels = [0 1];
x7labels = [0 1];
x8labels = [0 1];
ytrain = [x1labels;x3labels;x5labels;x7labels];
ytest = [x2labels;x4labels;x6labels;x8labels];
%%
% take global features from each of the estimated ENF's
% x should be a numrecordingsxnumfeatures matrix
xtrain = {x1 x3 x5 x7};
xtest = {x2 x4 x6 x8};
Xtrain = [];
Xtest = [];
for k = 1:length(xtrain)
Xtrain(k,1) = mean(xtrain{k});
Xtrain(k,2) = var(xtrain{k});
Xtest(k,1) = mean(xtest{k});
Xtest(k,2) = var(xtest{k});
end
%%
% Now that I have a basic feature matrix, let's plug into classifier:
% Logistic Regression
Log_Reg_Coeff = mnrfit(Xtrain,ytrain);
logReg_Preds = mnrval(Log_Reg_Coeff,Xtest);
%% Discrim Analysis:
%lda_0 = fitcdiscr(Xtrain,ytrain);
%%
%ar_model_0 = ar(
%% NNets
featureDim = 1;
numHiddenUnits = 100;
numClasses = 2;
layers = [ ...
sequenceInputLayer(featureDim)
lstmLayer(numHiddenUnits,'OutputMode','sequence')
fullyConnectedLayer(numClasses)
softmaxLayer
classificationLayer];
options = trainingOptions('adam', ...
'GradientThreshold',1, ...
'InitialLearnRate',0.01, ...
'LearnRateSchedule','piecewise', ...
'LearnRateDropPeriod',20, ...
'Verbose',0, ...
'Plots','training-progress');
%ytrain_nnet = ytrain(:,1);
%ytest_nnet = ytest(:,1);
net_0 = trainNetwork(xtrain,YtraiN,layers,options);
%% Plotting and viewing
% x = xtrain{1};
% %classes =
% X = XTrain{1}(1,:);
% classes = categories(YTrain{1});
%
% figure
% for j = 1:numel(classes)
% label = classes(j);
% idx = find(YTrain{1} == label);
% hold on
% plot(idx,X(idx))
% end
% hold off
%
% xlabel("Time Step")
% ylabel("Acceleration")
% title("Training Sequence 1, Feature 1")
% legend(classes,'Location','northwest')