-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathobj.py
More file actions
86 lines (73 loc) · 2.74 KB
/
Copy pathobj.py
File metadata and controls
86 lines (73 loc) · 2.74 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
"""
Authors: Benjamin Mario Sainz-Tinajero, Andres Eduardo Gutierrez-Rodriguez,
Héctor Gibrán Ceballos-Cancino, and Francisco Javier Cantu-Ortiz.
Year: 2021.
https://github.com/benjaminsainz/ecac
"""
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import label_binarize
from sklearn.multiclass import OneVsRestClassifier
from sklearn.svm import LinearSVC
from sklearn.neighbors import KNeighborsClassifier
from sklearn.linear_model import LogisticRegression
from sklearn.metrics import roc_curve, auc
import math
import numpy as np
import warnings
def warn(*args, **kwargs):
pass
warnings.warn = warn
def support_vector_classifier(X_train, X_test, y_train, y_test, n_classes):
clf = OneVsRestClassifier(LinearSVC(max_iter=5000))
y_score = clf.fit(X_train, y_train).decision_function(X_test)
fpr = dict()
tpr = dict()
roc_auc = dict()
for i in range(n_classes):
fpr[i], tpr[i], _ = roc_curve(y_test[:, i], y_score[:, i])
roc_auc[i] = auc(fpr[i], tpr[i])
svc_auc = sum(roc_auc.values())/len(roc_auc)
return svc_auc
def knn_classifier(X_train, X_test, y_train, y_test, n_classes):
clf = OneVsRestClassifier(KNeighborsClassifier(n_neighbors=2))
y_score = clf.fit(X_train, y_train).predict_proba(X_test)
fpr = dict()
tpr = dict()
roc_auc = dict()
for i in range(n_classes):
fpr[i], tpr[i], _ = roc_curve(y_test[:, i], y_score[:, i])
roc_auc[i] = auc(fpr[i], tpr[i])
knn_auc = sum(roc_auc.values())/len(roc_auc)
return knn_auc
def logistic_regression(X_train, X_test, y_train, y_test, n_classes):
clf = OneVsRestClassifier(LogisticRegression())
y_score = clf.fit(X_train, y_train).predict_proba(X_test)
fpr = dict()
tpr = dict()
roc_auc = dict()
for i in range(n_classes):
fpr[i], tpr[i], _ = roc_curve(y_test[:, i], y_score[:, i])
roc_auc[i] = auc(fpr[i], tpr[i])
lr_auc = sum(roc_auc.values())/len(roc_auc)
return lr_auc
def fitness_value(X, ind, n_classes):
classes_lst = []
for i in range(n_classes):
classes_lst.append(i)
if n_classes == 2:
classes_lst = [0, 1, 2]
y_bin = label_binarize(ind, classes=classes_lst)
y_bin = np.delete(y_bin, 2, 1)
else:
y_bin = label_binarize(ind, classes=classes_lst)
X_train, X_test, y_train, y_test = train_test_split(X, y_bin, test_size=0.75)
svc = support_vector_classifier(X_train, X_test, y_train, y_test, n_classes)
knn = knn_classifier(X_train, X_test, y_train, y_test, n_classes)
lr = logistic_regression(X_train, X_test, y_train, y_test, n_classes)
if math.isnan(svc):
svc = 0
if math.isnan(knn):
knn = 0
if math.isnan(lr):
lr = 0
return (svc+knn+lr)/3