85 lines
2.5 KiB
Python
85 lines
2.5 KiB
Python
import init_utils
|
|
import common
|
|
|
|
# Initialize the environment and get the name
|
|
name = init_utils.initialize_environment(__file__)
|
|
args = init_utils.get_args()
|
|
|
|
# Set arguments from command line
|
|
max_acc_drop = args.max_acc_drop
|
|
device = args.device
|
|
|
|
import pandas as pd
|
|
import numpy as np
|
|
import torch.nn as nn
|
|
import torch.nn.functional as F
|
|
from sklearn.model_selection import train_test_split
|
|
|
|
# Load our Dataset
|
|
|
|
pelvis_acc = pd.read_excel('elderly_fall/Posterior Pelvis Accelerometer Measures.xlsx',
|
|
sheet_name = 'ST')
|
|
|
|
y_data = pelvis_acc['Faller (1), Non-Faller (0)'].to_numpy()
|
|
|
|
pelvis_acc = pelvis_acc.drop(columns = [pelvis_acc.columns[0], 'Faller (1), Non-Faller (0)'])
|
|
|
|
head_acc = pd.read_excel('elderly_fall/Head Accelerometer Measures.xlsx',
|
|
sheet_name = 'ST')
|
|
|
|
head_acc = head_acc.drop(columns = [head_acc.columns[0], 'Faller (1), Non-Faller (0)'])
|
|
|
|
|
|
pressure_sen = pd.read_excel('elderly_fall/Pressure-Sensing Insole Measures.xlsx',
|
|
sheet_name = 'ST')
|
|
|
|
pressure_sen = pressure_sen.drop(columns = [pressure_sen.columns[0], 'Faller (1), Non-Faller (0)'])
|
|
|
|
|
|
left_shank = pd.read_excel('elderly_fall/Left Shank Accelerometer Measures.xlsx',
|
|
sheet_name = 'ST')
|
|
|
|
left_shank = left_shank.drop(columns = [left_shank.columns[0], 'Faller (1), Non-Faller (0)'])
|
|
|
|
|
|
X_data = pd.concat([head_acc, pressure_sen, pelvis_acc, left_shank], axis = 1)
|
|
|
|
# Preprocess the Data
|
|
|
|
def normalize_column(column):
|
|
old_min = column.min()
|
|
old_max = column.max()
|
|
new_min = 0
|
|
new_max = 255
|
|
normalized_column = ((column - old_min) / (old_max - old_min)) * (new_max - new_min) + new_min
|
|
return normalized_column.astype(int)
|
|
|
|
X_data = X_data.apply(normalize_column)
|
|
X_d = X_data/255.0
|
|
X_train, X_test, y_train, y_test = train_test_split(X_d, y_data,
|
|
test_size = 0.15, random_state = 42)
|
|
|
|
X_train = X_train.to_numpy()
|
|
X_test = X_test.to_numpy()
|
|
|
|
BATCH_SIZE = 1
|
|
epochs = 5
|
|
lr = 0.0001
|
|
|
|
class EF_MLP(nn.Module):
|
|
def __init__(self):
|
|
super(EF_MLP, self).__init__()
|
|
self.linear1 = nn.Linear(117, 20)
|
|
self.relu1 = nn.ReLU()
|
|
self.linear2 = nn.Linear(20, 2)
|
|
|
|
def forward(self,X):
|
|
X = self.relu1(self.linear1(X))
|
|
X = self.linear2(X)
|
|
return F.log_softmax(X, dim = 1)
|
|
|
|
net = EF_MLP()
|
|
|
|
common.create_ibex_qnn(net, name, device, X_train, y_train, X_test, y_test, BATCH_SIZE = BATCH_SIZE,
|
|
epochs = epochs, lr = lr, max_acc_drop = max_acc_drop)
|