[dd62f3]: / admins / utility / AlgorithmExecutions.py

Download this file

114 lines (88 with data), 4.9 kB

  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
import pandas as pd
from matplotlib import pyplot as plt
from sklearn import preprocessing
from sklearn.model_selection import train_test_split
from sklearn.naive_bayes import GaussianNB
from sklearn.neighbors import KNeighborsClassifier
from sklearn import metrics
from django.conf import settings
filepath = settings.MEDIA_ROOT + "\\" + 'stress_data.xlsx'
df = pd.read_excel(filepath, header=None)
df.columns=['Target', 'ECG(mV)', 'EMG(mV)','Foot GSR(mV)','Hand GSR(mV)', 'HR(bpm)','RESP(mV)']
X_train, X_test, y_train, y_test = train_test_split(df[['ECG(mV)', 'EMG(mV)','Foot GSR(mV)','Hand GSR(mV)', 'HR(bpm)','RESP(mV)']], df['Target'],
test_size=0.30, random_state=12345)
# Min-Max Scaling
minmax_scale = preprocessing.MinMaxScaler().fit(df[['ECG(mV)', 'EMG(mV)','Foot GSR(mV)','Hand GSR(mV)', 'HR(bpm)','RESP(mV)']])
df_minmax = minmax_scale.transform(df[['ECG(mV)', 'EMG(mV)','Foot GSR(mV)','Hand GSR(mV)', 'HR(bpm)','RESP(mV)']])
X_train_norm, X_test_norm, y_train_norm, y_test_norm = train_test_split(df_minmax, df['Target'],
test_size=0.30, random_state=12345)
def plot():
plt.figure(figsize=(8,6))
plt.scatter(df['Hand GSR(mV)'], df['HR(bpm)'],
color='green', label='input scale', alpha=0.5)
plt.scatter(df_minmax[:,0], df_minmax[:,1],
color='blue', label='min-max scaled [min=0, max=1]', alpha=0.3)
plt.title('Hand GSR and HR content of the physiological dataset')
plt.xlabel('Hand GSR')
plt.ylabel('HR')
plt.legend(loc='upper left')
plt.grid()
plt.tight_layout()
class KNNclassifier:
def getKnnResults(self):
# filepath = settings.MEDIA_ROOT + "\\" + 'stress_data.xlsx'
print("Started works")
knn = KNeighborsClassifier(n_neighbors=5)
fit = knn.fit(X_train, y_train)
# on normalized data
knn_norm = KNeighborsClassifier(n_neighbors=5)
fit_norm = knn_norm.fit(X_train_norm, y_train)
pred_train = knn.predict(X_train)
pred_test = knn.predict(X_test)
# Accuracy measure for datasets
print('Accuracy measure for dataset:- ', '{:.2%}\n'.format(metrics.accuracy_score(y_test, pred_test)))
pred_test_norm = knn_norm.predict(X_test_norm)
print('Accuracy measure for normalized dataset:- ',
'{:.2%}\n'.format(metrics.accuracy_score(y_test, pred_test_norm)))
# comparing the true and predicted responses
print('True target values: ', y_test.values[0:25])
print('Predicted target values: ', pred_test_norm[0:25])
# Confusion Matrix
print(metrics.confusion_matrix(y_test, pred_test_norm))
print('True target values: ', y_test.values[0:25])
print('Predicted target values: ', pred_test_norm[0:25])
print()
confusion = metrics.confusion_matrix(y_test, pred_test_norm)
TP = confusion[1, 1]
TN = confusion[0, 0]
FP = confusion[0, 1]
FN = confusion[1, 0]
# Metrics calclulation using confusion matrix
print()
# Classsification accuracy:- how often is the classifier correct
accuracy = metrics.accuracy_score(y_test, pred_test_norm)
print('Classification Accuracy:- ', accuracy)
# Classification error/Misclassification rate:- how often is the classifier is incorrect
classificationerror = 1 - metrics.accuracy_score(y_test, pred_test_norm)
print('Classification Error:- ',classificationerror )
# Sensitivity :- when the actual value is positive , how often is the prediction correct?
sensitivity = metrics.recall_score(y_test, pred_test_norm)
print('Sensitivity:- ',sensitivity )
# Specificity:- when the actual value is negative ,how often the prediction is the correct?
Specificity = TN / float(TN + FP)
print('Specificity:- ',Specificity )
# False positive rate:- when the actual value is negative ,how often the prediction is the incorrect?
fsp = FP / float(TN + FP)
print('False positive rate:- ', fsp)
# Precision:- when a positive value is predicted , how often is the prediction correct?
precision = metrics.precision_score(y_test, pred_test_norm)
print('Precision:- ', precision)
# Prediction of stress/no stress class on new dataset
print()
pred_data_norm = minmax_scale.transform([[-0.005, 0.49, 8.257, 5.853, 66.142, 45.998]])
pred = knn_norm.predict(pred_data_norm)
print('Predicted class for dataset [-0.005,0.49,8.257,5.853,66.142,45.998]:- ', pred)
pred_data_norm = minmax_scale.transform([[0.001, 0.931, 5.91, 19.773, 99.065, 35.59]])
pred = knn_norm.predict(pred_data_norm)
print('Predicted class for dataset [0.001,0.931,5.91,19.773,99.065,35.59]:- ', pred)
return df,accuracy,classificationerror,sensitivity,Specificity,fsp,precision