-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathtrain_model_features_SVM_SHUFFLEALL.py
118 lines (87 loc) · 4.24 KB
/
train_model_features_SVM_SHUFFLEALL.py
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
'''
The "SHUFFLEALL" files don't take into consideration that the test and train data should be from different users.
'''
import os
import pickle
from tqdm import tqdm
from sklearn.utils import shuffle
from sklearn.svm import SVC
from sklearn.metrics import classification_report, accuracy_score
import numpy as np
from sklearn.model_selection import KFold
####
# Combinatii consacrate
####
#feature_names_list = ['hjorthact', 'wl', 'isemg_var', 'zcr'] # doar parametrii in timp relevanti %TESTAT%
feature_names_list = ['mnf', 'mdf', 'cf', 'vcf'] # param de frecveta simpli
#feature_names_list = ['mfc0', 'mfc1', 'mfc2', 'mfc3', 'mfc4', 'mfc5', 'mfc6', 'mfc7', 'mfc8', 'mfc9','mfc10','mfc11', 'mfc12'] # MFCC doar
#feature_names_list = ['mfc0', 'mfc1', 'mfc2', 'mfc3', 'mfc4', 'mfc5', 'mfc6', 'mfc7', 'mfc8', 'mfc9','mfc10','mfc11', 'mfc12', 'mnf', 'mdf', 'cf', 'vcf'] # MFCC + siple freq params
#feature_names_list = [] # WAVELET. Urmeaza
#feature_names_list = ['mav', 'rms', 'zcr', 'ssc', 'isemg_var', 'wl', 'skew', 'hjorthact', 'mnf', 'mdf'] #TOTI parametrii de timp (iesise okish)
#feature_names_list = ['mav', 'rms', 'zcr', 'ssc', 'isemg_var', 'wl', 'skew', 'hjorthact', 'mnf', 'mdf', 'cf', 'vcf']
#feature_names_list = ['mav', 'rms', 'zcr', 'ssc', 'isemg_var', 'wl', 'skew', 'hjorthact', 'mnf', 'mdf', 'cf', 'vcf', 'mfc0', 'mfc1', 'mfc2', 'mfc3', 'mfc4', 'mfc5', 'mfc6', 'mfc7', 'mfc8', 'mfc9','mfc10','mfc11', 'mfc12', 'mnf', 'mdf', 'cf', 'vcf'] # toti param de timp + topti param freq + mfcc
#feature_names_list = ['mav', 'rms', 'zcr', 'ssc', 'isemg_var', 'wl', 'skew', 'hjorthact', 'mnf', 'mdf'] # ch 0, 1, 3 -> 0.75 si 0.6 sau 0, 1, 2, 3 -> 0.78 cu 0.64
#used_channels = [0, 1, 3] # integers. 0, 1, 3 e cel mai bine
used_channels = [0, 1, 2, 3] # sau
def load_features_from_file(file_path):
with open(file_path, 'rb') as file:
data = pickle.load(file)
feature_list = []
for ch in used_channels:
feature_ch = [
data.get(feature_name + '_ch' + str(ch))[0] if isinstance(data.get(feature_name + '_ch' + str(ch)), np.ndarray) else data.get(feature_name + '_ch' + str(ch))
for feature_name in feature_names_list
]
feature_list += feature_ch
# Extract the specific features
return feature_list
#data_directory = './dataset/dataset_labeled_divided_features' # no CF VCF and MFCC saved wrong
#data_directory = './dataset/dataset_labeled_divided_features_2' # added CF VCF and MFCC saved correctly
data_directory = r'.\dataset\NORMALIZED_DATASETS\dataset_normalized_labeled_divided_features' # added CF VCF and MFCC saved correctly
##################################################################################################
####
# De aici incolo se decide distributia train-cal
####
# se aleg cate 3 baieti si o fata pt fiecare fold
feature_vectors = []
labels = []
for filename in tqdm(os.listdir(data_directory)):
if filename.endswith('.pkl'):
flag = False
file_path = os.path.join(data_directory, filename)
features = load_features_from_file(file_path)
feature_vectors.append(features)
label = int(filename.split('_label=')[1].split('_')[0])
labels.append(label)
X, y = shuffle(feature_vectors, labels)
X = np.array(X)
y = np.array(y)
#print(X_train)
####
# Train
####
# 1. INSTANTIATE
svm_model = SVC(kernel='linear')
#svm_model = SVC(kernel='rbf', C=0.3)
#svm_model = SVC(kernel='rbf', tol=1e-5)
# 2. TRAIN
kf = KFold(n_splits=5)
train_scores = []
test_scores = []
for train_index, test_index in kf.split(X):
X_train, X_test = X[train_index], X[test_index]
y_train, y_test = y[train_index], y[test_index]
svm_model.fit(X_train, y_train)
# Evaluate on training set
y_train_pred = svm_model.predict(X_train)
train_accuracy = accuracy_score(y_train, y_train_pred)
train_scores.append(train_accuracy)
# Evaluate on testing set
y_test_pred = svm_model.predict(X_test)
test_accuracy = accuracy_score(y_test, y_test_pred)
test_scores.append(test_accuracy)
# 3. EVAL
print("Training scores from each fold: ", train_scores)
print("Average training score: ", sum(train_scores) / len(train_scores))
print("Test scores from each fold: ", test_scores)
print("Average test score: ", sum(test_scores) / len(test_scores))