from sklearn.datasets import load_breast_cancer,\
\
load_diabetes,\
load_digits, load_iris,
load_winefrom sklearn.preprocessing import StandardScaler
from sklearn import decomposition
from scipy.stats import multivariate_normal
import umap
from matplotlib import pylab as plt
import matplotlib as mpl
import numpy as np
import pandas as pd
import seaborn as sns
Apéndice C — Conjunto de Datos
El objetivo de este apéndice es listar los conjuntos de datos utilizados en el curso.
Paquetes usados
C.1 Problemas Sintéticos
En esta sección se presentan los problemas sintéticos que corresponden aquellos problemas en los que se conocen todos los parámetros y se usan para mostrar algunas características de los algoritmos.
C.2 Mezcla de Clases
= multivariate_normal(mean=[5, 5],
p1 =[[4, 0], [0, 2]])
cov= p1.rvs(size=1000)
X_1 = multivariate_normal(mean=[1.5, -1.5],
p2 =[[2, 1], [1, 3]])
cov= p2.rvs(size=1000)
X_2 = multivariate_normal(mean=[12.5, -3.5],
p3 =[[2, 3], [3, 7]])
cov= p3.rvs(size=1000) X_3
Figura C.1 muestra estas tres distribuciones.
Código
= np.concatenate((X_1, X_2, X_3))
D = [1] * 1000 + [2] * 1000 + [3] * 1000
clase = np.concatenate((D, np.atleast_2d(clase).T), axis=1)
D = pd.DataFrame(D, columns=['x', 'y', 'clase'])
df = sns.relplot(data=df, kind='scatter', x='x',
_ =PALETTE,
palette='y', hue='clase') y
C.2.1 Clases Separadas
= multivariate_normal(mean=[5, 5],
X_1 =[[4, 0], [0, 2]]).rvs(1000)
cov= multivariate_normal(mean=[-5, -10],
X_2 =[[2, 1], [1, 3]]).rvs(1000)
cov= multivariate_normal(mean=[15, -6],
X_3 =[[2, 3], [3, 7]]).rvs(1000) cov
Este problema se muestra en la Figura C.2.
Código
= np.concatenate((X_1, X_2, X_3))
D = [1] * 1000 + [2] * 1000 + [3] * 1000
clase = np.concatenate((D, np.atleast_2d(clase).T), axis=1)
D = pd.DataFrame(D, columns=['x', 'y', 'clase'])
df = sns.relplot(data=df, kind='scatter', x='x',
_ =PALETTE,
palette='y', hue='clase') y
C.3 Problemas de Clasificación
En esta sección se listan los problemas de clasificación utilizados durante el curso. La Tabla C.1 resume las principales características de los problemas utilizados. Se incluye la entropía como una media que está relacionada al desbalance de clases, la entropía está normalizada para que su rango se encuentre entre \([0, 1].\)
Nombre | Tamaño (\(N\)) | Dimensión (\(d\)) | Número de clases (\(K\)) | Entropía |
---|---|---|---|---|
Breast Cancer | \(569\) | \(30\) | \(2\) | 0.95 |
Iris | \(150\) | \(4\) | \(3\) | 1.00 |
Dígitos | \(1797\) | \(64\) | \(10\) | 1.00 |
Vino | \(178\) | \(13\) | \(3\) | 0.99 |
C.3.1 Breast Cancer Wisconsin
El conjunto de datos de Breast Cancer Wisconsin (ver Street, Wolberg, y Mangasarian (1993)) se obtiene con el siguiente código. La Figura C.3 muestra una proyección utilizando PCA de este conjunto de datos.
= load_breast_cancer(return_X_y=True) D, y
Código
= StandardScaler().fit_transform(D)
D = decomposition.PCA(n_components=2).fit(D)
pca = pca.transform(D)
low_dim # reducer = umap.UMAP(n_neighbors=5)
# low_dim = reducer.fit_transform(D)
= pd.DataFrame(low_dim, columns=['x', 'y'])
df 'Clase'] = y
df[= sns.relplot(df, kind='scatter',
fig ='full', # palette=pal,
legend='x', y='y', hue='Clase')
x=False, top=False,
fig.tick_params(bottom=False, right=False,
left=False, labelleft=False)
labelbottom= fig.set(xlabel=None, ylabel=None) _
C.3.2 Iris
Un conjunto clásico en problemas de clasificación es el problema del Iris descrito por Fisher (1936); este problema se descarga con la siguiente instrucción. La Figura C.4 muestra una visualización de estos datos mediante PCA.
= load_iris(return_X_y=True) D, y
Código
= StandardScaler().fit_transform(D)
D = decomposition.PCA(n_components=2).fit(D)
pca = pca.transform(D)
low_dim # reducer = umap.UMAP(n_neighbors=5)
# low_dim = reducer.fit_transform(D)
= pd.DataFrame(low_dim, columns=['x', 'y'])
df 'Clase'] = y
df[= sns.relplot(df, kind='scatter',
fig ='full', palette=PALETTE,
legend='x', y='y', hue='Clase')
x=False, top=False,
fig.tick_params(bottom=False, right=False,
left=False, labelleft=False)
labelbottom= fig.set(xlabel=None, ylabel=None) _
C.3.3 Dígitos
El conjunto de Dígitos (ver Xu, Krzyzak, y Suen (1992)) es un conjunto de clasificación donde se trata de identificar el número escrito en una imagen; este conjunto de datos se descarga utilizando la siguiente instrucción. La Figura C.5 muestra una proyección de estos datos utilizando UMAP con ocho vecinos.
= load_digits(return_X_y=True) D, y
Código
= mpl.cm.Paired
pal = umap.UMAP(n_neighbors=8)
reducer = StandardScaler().fit_transform(D)
D = reducer.fit_transform(D)
low_dim = pd.DataFrame(low_dim, columns=['x', 'y'])
df 'Clase'] = y
df[= sns.relplot(df, kind='scatter',
fig ='full', palette=PALETTE,
legend='x', y='y', hue='Clase')
x=False, top=False,
fig.tick_params(bottom=False, right=False,
left=False, labelleft=False)
labelbottom= fig.set(xlabel=None, ylabel=None) _
/usr/share/miniconda/envs/test/lib/python3.10/site-packages/sklearn/utils/deprecation.py:151: FutureWarning: 'force_all_finite' was renamed to 'ensure_all_finite' in 1.6 and will be removed in 1.8.
warnings.warn(
C.3.4 Vino
El conjunto de Vino se obtiene con la siguiente instrucción. La Figura C.6 muestra una proyección de estos datos utilizando PCA.
= load_wine(return_X_y=True) D, y
Código
= mpl.cm.Paired
pal = StandardScaler().fit_transform(D)
D = decomposition.PCA(n_components=2).fit(D)
pca = pca.transform(D)
low_dim # reducer = umap.UMAP(n_neighbors=5)
# low_dim = reducer.fit_transform(D)
= pd.DataFrame(low_dim, columns=['x', 'y'])
df 'Clase'] = y
df[= sns.relplot(df, kind='scatter',
fig ='full', palette=PALETTE,
legend='x', y='y', hue='Clase')
x=False, top=False,
fig.tick_params(bottom=False, right=False,
left=False, labelleft=False)
labelbottom= fig.set(xlabel=None, ylabel=None) _
C.4 Problemas de Regresión
En esta sección se listan los problemas de regresión utilizados para ejemplificar los algoritmos y su rendimiento.
C.4.1 Problema Sintético
El siguiente ejemplo es un problema de regresión sintético que se forma de la suma de dos funciones trascendentales como se muestra en el siguiente código.
= np.linspace(-5, 5, 100)
X = np.sin(X) + 0.3 * np.cos(X * 3.) y
La Figura C.7 muestra este problema sintético.
Código
= pd.DataFrame(dict(X=X, y=y))
df 'X', inplace=True)
df.set_index(= sns.relplot(df, kind='line') fig
C.4.2 Diabetes
El conjunto de datos Diabetes es un problema que se puederecuperar usando el siguiente código.
= load_diabetes(return_X_y=True) D, y