-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathmediante maquinas de soporte vectorial SVM.py
94 lines (81 loc) · 2.97 KB
/
mediante maquinas de soporte vectorial SVM.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
# -*- coding: utf-8 -*-
"""
Created on Tue Jul 27 15:41:58 2021
@author: Fernando Caprile
"""
import numpy as np
import pandas as pd
from sklearn.svm import SVC
from sklearn.model_selection import KFold
from preprocessing_features import prep
import sklearn.metrics as metrics
import matplotlib.pyplot as plt
df=pd.read_csv('Processed_features.csv')
df.drop("Unnamed: 0",axis=1,inplace=True)
y=np.reshape(df['win1'].to_numpy(),(-1,1))
labels=[]
labels.append('elo_dif')
labels.append('tc_abs_distance')
# labels.append('oro0_dist_TC_0')
# labels.append('oro0_dist_TC_1')
# labels.append('dif_dist_oro_mas_cercano')
# df['dif_dist_oro_mas_cercano']=df['oro0_dist_TC_0']-df['oro0_dist_TC_1']
# labels.append('menor_ang_oro_0')
# df['menor_ang_oro_0']=df[['oro0_angle_TC_0','oro1_angle_TC_0','oro2_angle_TC_0']].min(axis=1)
# labels.append('menor_ang_oro_1')
# df['menor_ang_oro_1']=df[['oro0_angle_TC_1','oro1_angle_TC_1','oro2_angle_TC_1']].min(axis=1)
# labels.append('dif_menor_ang_oro')
# df['dif_menor_ang_oro']=df[['oro0_angle_TC_0','oro1_angle_TC_0','oro2_angle_TC_0']].min(axis=1)-df[['oro0_angle_TC_1','oro1_angle_TC_1','oro2_angle_TC_1']].min(axis=1)
for tc in range(2):
for nro in range(3):
labels.append('oro'+str(nro)+'_dist_TC_'+str(tc))
for tc in range(2):
for nro in range(3):
labels.append('oro'+str(nro)+'_angle_TC_'+str(tc))
for tc in range(2):
for nro in range(2):
labels.append('piedra'+str(nro)+'_dist_TC_'+str(tc))
for tc in range(2):
for nro in range(2):
labels.append('piedra'+str(nro)+'_angle_TC_'+str(tc))
for tc in range(2):
for nro in range(1):
labels.append('baya'+str(nro)+'_dist_TC_'+str(tc))
for tc in range(2):
for nro in range(1):
labels.append('baya'+str(nro)+'_angle_TC_'+str(tc))
for tc in range(2):
for nro in range(3):
labels.append('bosque'+str(nro)+'_dist_TC_'+str(tc))
for tc in range(2):
for nro in range(3):
labels.append('bosque'+str(nro)+'_angle_TC_'+str(tc))
# for i in range(12):
# labels.append('random'+str(i))
# aux=np.random.uniform(size=len(df['elo_dif']))
# df['random'+str(i)]=aux
model=SVC(gamma=2,C=1,probability=True)
X=df[labels].to_numpy()
kfold = KFold(n_splits=3, shuffle=True)
aucs=[]
plt.close('all')
for train_index, test_index in kfold.split(X,y):
X_train,y_train=X[train_index], y[train_index]
X_test,y_test=X[test_index], y[test_index]
prep(2,X_train,X_test)
model.fit(X_train, np.ravel(y_train))
probs = model.predict_proba(X_test)
fpr, tpr, threshold = metrics.roc_curve(y_test, probs[:,1])
auc = metrics.auc(fpr, tpr)
aucs.append(auc)
plt.plot(fpr, tpr, label = 'AUC = %0.2f' % auc)
plt.plot([0, 1], [0, 1],'r--',label='Random prediction')
plt.xlim([0, 1])
plt.ylim([0, 1])
plt.ylabel('True Positive Rate')
plt.xlabel('False Positive Rate')
plt.grid(True)
plt.legend(loc = 'lower right')
plt.tight_layout()
print('\007')
print(str(np.round(np.mean(aucs),3))+'+-'+str(np.round(np.std(aucs)/np.sqrt(3),3)))