-
Notifications
You must be signed in to change notification settings - Fork 40
/
MLUtilities.py
executable file
·38 lines (32 loc) · 1.37 KB
/
MLUtilities.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
import numpy as np
import pandas as pd
from scipy import stats
## Distancia eucilidiana:
def distEuclidiana(muestra, dataset):
distancias = np.zeros((dataset.shape[0],1))
for counter in range(0,dataset.shape[0]):
distancias[counter] = np.linalg.norm(muestra-dataset[counter])
return distancias
def centroideCercano(muestra, listaCentroides):
listaDistancias = distEuclidiana(muestra, listaCentroides)
centroideCercano = np.argmin(listaDistancias)
return centroideCercano
def clasificarPorCentroides(muestras, centroides):
resultado = np.zeros((muestras.shape[0],1))
for counter in range(0, muestras.shape[0]):
resultado[counter] = centroideCercano(muestras[counter], centroides)
return resultado
def separarDatos(muestras, valoresEsperados, valorAFiltrar):
indices = np.where(valoresEsperados == valorAFiltrar)
return muestras[indices], valoresEsperados[indices]
def obtenerModa(resultados):
moda = (stats.mode(resultados)[0]).reshape(-1)
return moda[0]
def obtenerAccuracy_kmedias(muestras, centroides):
numMuestras = muestras.shape[0]
resultados = clasificarPorCentroides(muestras, centroides)
moda = obtenerModa(resultados)
indicesErrores = np.where(resultados != moda)
cantidadErrores = len(resultados[indicesErrores])
accuracy = ((numMuestras - cantidadErrores) / numMuestras) *100
return accuracy