Como ploteo esto en python?

Sharktopus

Estoy tratando de plotear las celdas de una SOM (Self organizing map, un tipo de red neuronal).

Tengo un dataset de 3 clases, la SOM va a mapear cada muestra a una determinada celda, si hay muestras de varias clases que coinciden en la misma celda hay que plotear un diagrama de sectores como se ve en la imagen.

Se plotear los puntos de un color u otro, pero no el diagrama de sectores.

def mapa_clasificacion(clases_dominantes):
    for i,clase in enumerate(clases_dominantes):
    
if clase == 0.0: plt.scatter(celdas[i][0],celdas[i][1],color='red',s=250) elif clase == 1.0: plt.scatter(celdas[i][0],celdas[i][1],color='blue',s=250) elif clase == 2.0: plt.scatter(celdas[i][0],celdas[i][1],color='green',s=250) elif clase == 3.0: plt.scatter(celdas[i][0],celdas[i][1],color='yellow',s=250)

https://ibb.co/CBPxjDW

c0b4c

Mira a ver si con seaborn te apaña algún tipo de plot.

R

Has probado a crear un subplot de 4x16 y en cada subplot metes la figura que quieras?

1
Odercra

https://matplotlib.org/3.5.1/gallery/lines_bars_and_markers/scatter_piecharts.html

hda

Está chula la representación. Me quedo por aquí para ver cómo se saca.

1 respuesta
R

Por si te sirve de algo como dije quedaria asi

import matplotlib.pylab as plt
import numpy as np

A=np.random.random((64,4))

fig,ax=plt.subplots(4,16,figsize=(15,15))
nombre=['1','2','3','4']

k=0
for i in range(4):
    for j in range(16):
        ax[i,j].pie(A[k,:],labels=nombre)

    k=k+1
plt.show()
2 respuestas
hda

#6 pero es diferentes a la imagen que él propone, ¿no?

1 respuesta
R

#7 el en cada celda tiene un peso de las 4 clases. Lo único que va a tener que hacer es pasar esos datos a una forma en los que pie los pueda leer.
Si pasa sus datos se lo hago, no creo que sea muy complicao

1 respuesta
hda

#8 está muy chulo lo que compartes en #6, pero es diferente del arreglo de #1. El arreglo de #1 tiene que estar en sns o en algún otro paquete, seguro.

1 respuesta
R

#9 no entiendo que quieres decir. Te refieres a que hacer eso directamente debe de venir ya implementado en alguna librería?

1 respuesta
hda

#10 sí. Fíjate en la colocación de los discos. Es un conteo o algo así. Ha de estar en algún paquete.

Nota: sinceramente, yo solo me estoy fijando en la imagen y en cómo hacer algo similar a la imagen. No estoy atendiendo al problema que presenta #1, disculpa.

gonya707

En este cuaderno tienes el proceso de un SOM precisamente para el dataset de iris como el de tu imagen de ejemplo

https://www.kaggle.com/code/yairhadad1/self-organizing-map/notebook

from minisom import MiniSom    
from matplotlib.gridspec import GridSpec som = MiniSom(7, 7, 4, sigma=0.25,neighborhood_function='gaussian') som.train_random(cleanDataSet.to_numpy(), 30000) # trains the SOM with 100 iterations target = iris.Species.astype('category').cat.codes labels_map = som.labels_map(cleanDataSet.to_numpy(), target) label_names = np.unique(target) plt.figure(figsize=(7, 7)) the_grid = GridSpec(7, 7) for position in labels_map.keys(): label_fracs = [labels_map[position][l] for l in label_names] plt.subplot(the_grid[6-position[1], position[0]], aspect=1) patches, texts = plt.pie(label_fracs) plt.legend(patches, label_names, bbox_to_anchor=(0, 1.5), ncol=3) plt.show()

Por cierto, aprovecho para lanzar una pregunta al aire, alguien mas es activo en Kaggle? Pregunto para hacer algo de mini comunidad y compartir nuestros cuadernos, datasets, comentarnos cosas etc. Hasta ahora mi experiencia en Kaggle ha sido algo sosa y creo que podria ser más productiva haciendo piña

1 1 respuesta
Naith

Lo que hace #5 creo que es lo que pides, el unico cambio seria quitar las etiquetas en cada piechart y ponerlas una unica vez en el lateral. No se que hace exactamente un SOM ni el fin de la visualizacion pero, ¿no sería más adecuado usar una escala de color para representarlo? Al final el diagrama de # 5 aunque es lo que pides se me hace dificil de interpretar y en una visualizacion no es lo que quieres.

1
hda

#12 ¡genial!

Yo tengo perfil pero nunca me he puesto. Es algo más en la caja de pendientes.

1 respuesta
gonya707

#14 Algun dia abrire un tema para reunirnos frikis de ML, estaria guay participar en alguna de las competiciones con equipo mediavidero o hacer competiciones privadas

2 2 respuestas
hda

#15 pues según preguntaste antes lo pensé. Podría estar guay.

richmonde

En su día me planteé hacer cosillas ahí, pero mi pasión por esto no es tanta como para ello. De todos modos, quizá algún día contribuya un poco por aquí hahahah

Pero si que es cierto que me planteaba abrir una página en Medium para sacar cosillas (best practises, y demás) de lo que hago (o hacía, que ahora hago mas gestión que no picar código) en el curro, e incluso algunas propuestas de "tests en MV" para por un lado ver que se puede sacar de cosas colectivas, como a su vez ver si hay talento potente para hacer Hiring hahaha

#15 Si veo que puedo ayudar o contribuir, te aviso. Que con la información del curro sampleada, enmascarada, y transformada para evitar problemas y NDAs, se podrían hacer contests bien guapos :D

1
hda

Propuesta: ¿@gonya707 y si abres hilo con estos últimos comentarios para que se apunten personas?

1 respuesta
gonya707

#18 El café me ha empezado a hacer efecto y he superado la pereza, ya tenemos hilo https://www.mediavida.com/foro/dev/comunidad-machine-learning-deep-learning-685637

Si #1 sigue teniendo mas dudas de su problema puede seguir aqui, no problem

2

Usuarios habituales

  • gonya707
  • hda
  • Naith
  • refresco
  • Odercra
  • c0b4c
  • Sharktopus