Menu
CoddyTech

Dos tipos de células

Parte de la sección Aprendizaje no supervisado del Journey de Machine Learning de Coddy. Lección 51 de 51.

Un laboratorio midió 569 muestras de tejido, con 30 mediciones celulares cada una. Son demasiadas para graficarlas, y ningún ojo puede clasificarlas:

Una cuadrícula de 24 muestras por 30 mediciones, cada celda coloreada de azul para valores bajos a rojo para valores altos, un mosaico sin un patrón claro

El diagnóstico de cada muestra, benigno o maligno, está dentro de un sobre sellado. ¿Pueden las células clasificarse en dos tipos sin esa información?

Reduce las 30 mediciones con PCA, agrupa lo que queda y solo después abre el sobre para ver qué tan cerca quedaron las células.

challenge icon

Desafío

Difícil

El programa lee la proporción de varianza que se debe conservar, 0.7 o más; el código inicial prepara un gráfico.

  1. Escala y después conserva el menor número de componentes que alcance esa proporción. Imprime cuántos son y qué proporción conservan.
  2. Agrupa esos componentes con k-means: k = 2, n_init=10, random_state=0.
  3. Abre el sobre: por clúster, empezando por el más grande, imprime sus diagnósticos y la categoría mayoritaria. Después, el grado de concordancia: la proporción que coincide con la categoría mayoritaria de su clúster.
  4. Representa en un diagrama de dispersión los dos primeros componentes de cada clúster, con las etiquetas mostly benign o mostly malignant; añade la leyenda y muestra el gráfico.

Para las primeras 300 muestras y 0.8:

Components for 80% of the variance: 5 (they keep 0.844)
Cluster of 175: 146 benign, 29 malignant, so mostly benign
Cluster of 125: 8 benign, 117 malignant, so mostly malignant
Agreement with the diagnosis: 0.877

y su gráfico:

Las primeras 300 muestras en los dos primeros componentes: un clúster mayoritariamente benigno a la izquierda y un clúster mayoritariamente maligno que se extiende hacia la derecha, con una leyenda

Después, Coddy describe el tuyo.

Pruébalo tú mismo

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from sklearn.datasets import load_breast_cancer
from sklearn.preprocessing import StandardScaler
from sklearn.decomposition import PCA
from sklearn.cluster import KMeans

# 569 muestras de tejido, con 30 mediciones celulares cada una
cancer = load_breast_cancer(as_frame=True)
cells = cancer.data
# El sobre sellado: benigno o maligno para cada muestra. Ábrelo solo al final.
diagnosis = pd.Series(cancer.target_names[cancer.target])

# La proporción de la varianza que se debe conservar, 0.7 o más
share = float(input())

fig, ax = plt.subplots()
ax.set_title("Cells on Two Components")
ax.set_xlabel("Component 1")
ax.set_ylabel("Component 2")

# Escribe tu código a continuación
quiz iconPonte a prueba

Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.

Todas las lecciones de Aprendizaje no supervisado

Practica por tu cuenta: Compilador de Python online