
Agrupación del INB per cápita a nivel continental
Índice de contenido
Resumen:
La presente entrada cubre el aprendizaje automático no supervisado, el cual no fragmenta los datos, sino que construye el modelo con el conjunto de datos completo. Así pues, permite que el modelo descubra patrones en los datos por sí mismo, sin supervisión. Dado que esta entrada cubre el análisis de conglomerados, presenta el modelo de aprendizaje automático no supervisado más simple, llamado k-means. El método de k-medias es fácil de comprender. Cuando realiza un análisis de conglomerados, no hay una variable de respuesta real: Trata todas las variables de la misma manera. Tampoco hay variable predictora, por lo que no hay caso de predicción/pronóstico. Solo analiza los patrones en los datos.
¿Cómo citar el presente artículo?
Romero, J. (7 de enero de 2018). Agrupación del INB per cápita a nivel continental. Python.JeshuaRomeroGuadarrama. https://www.Python.jeshuaromeroguadarrama.com/es/blog/data-science-and-econometrics/clustering-gni-per-capita-on-a-continental-level/.
Agrupación del INB per cápita a nivel continental by Jeshua Romero Guadarrama, available under Attribution 4.0 International (CC BY 4.0) at https://www.Python.jeshuaromeroguadarrama.com/es/blog/data-science-and-econometrics/clustering-gni-per-capita-on-a-continental-level/.
Agrupación del INB per cápita a nivel continental
Introducción
La presente entrada cubre el aprendizaje automático no supervisado. El este tipo de aprendizaje automático no fragmenta los datos, sino que construye el modelo con el conjunto de datos completo y permite que el modelo descubra patrones en los datos por sí mismo, sin supervisión. Dado que la presente entrada cubre el análisis de conglomerados, se expone el modelo de aprendizaje automático no supervisado más simple, llamado k-means. El método de k-medias es fácil de comprender. Cuando realiza un análisis de conglomerados, no hay una variable de respuesta real: Trata todas las variables de la misma manera. Tampoco hay variable predictora (independiente), por lo que no hay caso de predicción/pronóstico. Solo analiza los patrones en los datos.
El modelo de k-medias agrupa los valores en función de sus similitudes. Primero, el modelo encuentra valores que están cerca uno del otro y estima la distancia entre ellos. Posteriormente, determina el centro del grupo de valores y extiende esos valores de tal manera que los valores están dentro de un grupo. Encuentra similitudes en grupos implementando la estimación de distancia. El método de estimación de distancia más común es la estimación de distancia euclidiana. La ecuación (1) muestra la ecuación euclidiana.
J=k∑i=1c∑i=1|xJi−Cj|2
Donde J representa la función objetivo, k representa el número de conglomerados, n representa el número de casos, xJi representa el Casoj , y Cj representa los centroides de j.
Este modelo difiere de otros modelos en el sentido de que supone que encuentra la cantidad de clústeres en función del análisis de datos. Para determinar el número de conglomerados, aplique la curva del codo o el gráfico de sedimentación.
Contexto
La presente entrada aborda el problema con la suposición de que hay tres grupos en los datos. A partir de lo cual, se agrupan los países africanos aplicando tres etiquetas:
- INB (ingreso nacional bruto) per cápita bajo.
- INB (ingreso nacional bruto) per cápita moderado.
- INB (ingreso nacional bruto) per cápita alto.
Así pues, se aplica la curva del codo para determinar si esta suposición con respecto a los datos es correcta. Luego se utiliza el modelo de k-medias en todos los datos del INB per cápita de los países africanos. Dado que hay muchas variables, no describe todos los datos.
Para realizar el análisis de conglomerados, primero debe realizarse un análisis descriptivo y luego realizarse una reducción de dimensión para reducir los datos de alta dimensión en unas pocas dimensiones. La técnica de reducción de dimensiones es mejor conocida como Análisis de Componentes Principales (PCA). Esta técnica reduce los datos para que puedan representarse en dos dimensiones mediante la aplicación de un gráfico de dispersión.
El siguiente código recupera los datos del INB per cápita (consultar la tabla final).
import warnings
warnings.filterwarnings('ignore')
import wbdata
# Cargar los datos del INB per cápita de África:
paises = ["AGO", "BDI", "BEN", "BWA", "CAF", "CIV",
"COD", "DZA", "EGY", "ETH", "GAB", "GHA",
"GIN", "GMB", "GNQ", "KEN", "LBR", "LBY",
"LSO", "MAR", "MLI", "MOZ", "MWI", "NAM",
"NER", "NGA", "RWA", "SDN", "SEN","SOM",
"SWZ", "TCD", "TUN", "TZA", "UGA", "ZAF",
"ZMB", "ZWE"]
indicadores = {"NY.GNP.PCAP.CD":"inb_per_capita"}
df = wbdata.get_dataframe(indicadores,
country = paises,
convert_date = False)
# Datos del INB per cápita de África:
df.head()
inb_per_capita | ||
---|---|---|
country | date | |
Angola | 2021 | 1770.0 |
2020 | 1780.0 | |
2019 | 2070.0 | |
2018 | 1900.0 | |
2017 | 2010.0 |
El siguiente código desapila los datos: Cambia el índice de un índice múltiple a uno único.
# Desapilar datos:
df = df["inb_per_capita"]
df = df.unstack(level = 0)
df.iloc[0:10, 0:10]
country | Algeria | Angola | Benin | Botswana | Burundi | Central African Republic | Chad | Congo, Dem. Rep. | Cote d'Ivoire | Egypt, Arab Rep. |
---|---|---|---|---|---|---|---|---|---|---|
date | ||||||||||
1960 | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN |
1961 | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN |
1962 | 190.0 | NaN | 90.0 | 80.0 | 70.0 | 80.0 | 110.0 | NaN | 160.0 | NaN |
1963 | 230.0 | NaN | 100.0 | 80.0 | 80.0 | 80.0 | 110.0 | NaN | 180.0 | NaN |
1964 | 240.0 | NaN | 110.0 | 90.0 | 80.0 | 80.0 | 110.0 | NaN | 220.0 | NaN |
1965 | 250.0 | NaN | 110.0 | 90.0 | 70.0 | 90.0 | 120.0 | NaN | 210.0 | NaN |
1966 | 230.0 | NaN | 110.0 | 100.0 | 60.0 | 90.0 | 120.0 | NaN | 230.0 | NaN |
1967 | 250.0 | NaN | 120.0 | 100.0 | 50.0 | 100.0 | 130.0 | NaN | 240.0 | 170.0 |
1968 | 280.0 | NaN | 120.0 | 120.0 | 50.0 | 100.0 | 130.0 | NaN | 270.0 | 180.0 |
1969 | 310.0 | NaN | 120.0 | 140.0 | 50.0 | 110.0 | 140.0 | NaN | 280.0 | 190.0 |
El siguiente código sustituye los valores faltantes con el valor promedio. Debe tenerse en cuenta que este ejemplo no maneja valores atípicos. Dado que hay tantas variables, que resultaría agotador hacerlo en un ejemplo tan simple. Sin embargo, en el mundo real, es fundamental manejar los valores atípicos, ya que pueden afectar negativamente las conclusiones.
# Reemplazar valores atípicos con valores promedio:
df["Algeria"] = df["Algeria"].fillna(df["Algeria"].mean())
df["Angola"] = df["Angola"].fillna(df["Angola"].mean())
df["Benin"] = df["Benin"].fillna(df["Benin"].mean())
df["Botswana"] = df["Botswana"] .fillna(df["Botswana"] .mean())
df["Burundi"] = df["Burundi"].fillna(df["Burundi"] .mean())
df["Central African Republic"] = df["Central African Republic"].fillna(df["Central African Republic"].mean())
df["Chad"] = df["Chad"].fillna(df["Chad"].mean())
df["Congo, Dem. Rep."] = df["Congo, Dem. Rep."].fillna(df["Congo, Dem. Rep."].mean())
df["Cote d'Ivoire"] = df["Cote d'Ivoire"].fillna(df["Cote d'Ivoire"].mean())
df["Egypt, Arab Rep."] = df["Egypt, Arab Rep."].fillna(df["Egypt, Arab Rep."].mean())
df["Equatorial Guinea"] = df["Equatorial Guinea"].fillna(df["Equatorial Guinea"].mean())
df["Eswatini"] = df["Eswatini"].fillna(df["Eswatini"].mean())
df["Ethiopia"] = df["Ethiopia"].fillna(df["Ethiopia"].mean())
df["Gabon"] = df["Gabon"].fillna(df["Gabon"].mean())
df["Gambia, The"] = df["Gambia, The"].fillna(df["Gambia, The"].mean())
df["Ghana"] = df["Ghana"].fillna(df["Ghana"].mean())
df["Guinea"] = df["Guinea"].fillna(df["Guinea"].mean())
df["Kenya"] = df["Kenya"].fillna(df["Kenya"].mean())
df["Lesotho"] = df["Lesotho"].fillna(df["Lesotho"].mean())
df["Liberia"] = df["Liberia"].fillna(df["Liberia"].mean())
df["Libya"] = df["Libya"].fillna(df["Libya"].mean())
df["Malawi"] = df["Malawi"].fillna(df["Malawi"].mean())
df["Mali"] = df["Mali"].fillna(df["Mali"].mean())
df["Morocco"] = df["Morocco"].fillna(df["Morocco"].mean())
df["Mozambique"] = df["Mozambique"] .fillna(df["Mozambique"].mean())
df["Namibia"] = df["Namibia"].fillna(df["Namibia"].mean())
df["Niger"] = df["Niger"].fillna(df["Niger"].mean())
df["Nigeria"] = df["Nigeria"].fillna(df["Nigeria"].mean())
df["Rwanda"] = df["Rwanda"].fillna(df["Rwanda"].mean())
df["Senegal"] = df["Senegal"].fillna(df["Senegal"].mean())
df["Somalia"] = df["Somalia"].fillna(df["Somalia"].mean())
df["South Africa"] = df["South Africa"].fillna(df["South Africa"].mean())
df["Sudan"] = df["Sudan"].fillna(df["Sudan"].mean())
df["Tanzania"] = df["Tanzania"].fillna(df["Tanzania"].mean())
df["Tunisia"] = df["Tunisia"].fillna(df["Tunisia"].mean())
df["Uganda"] = df["Uganda"].fillna(df["Uganda"].mean())
df["Zambia"] = df["Zambia"].fillna(df["Zambia"].mean())
df["Zimbabwe"] = df["Zimbabwe"].fillna(df["Zimbabwe"].mean())
Estadísticas descriptivas
El siguiente código recupera una tabla que muestra las estadísticas de tendencia central y dispersión de los datos:
# Resumen descriptivo (estadísticas descriptivas):
df.describe().transpose()
count | mean | std | min | 25% | 50% | 75% | max | |
---|---|---|---|---|---|---|---|---|
country | ||||||||
Algeria | 62.0 | 2206.000000 | 1483.949316 | 190.0 | 1155.000000 | 1985.000000 | 3035.000000 | 5520.0 |
Angola | 62.0 | 1590.000000 | 1048.747887 | 180.0 | 727.500000 | 1590.000000 | 1725.000000 | 4830.0 |
Benin | 62.0 | 526.833333 | 395.509597 | 90.0 | 235.000000 | 370.000000 | 850.000000 | 1370.0 |
Botswana | 62.0 | 2925.500000 | 2438.966070 | 80.0 | 607.500000 | 2927.750000 | 5230.000000 | 7570.0 |
Burundi | 62.0 | 169.166667 | 68.503719 | 50.0 | 120.000000 | 169.166667 | 230.000000 | 260.0 |
Central African Republic | 62.0 | 316.166667 | 140.235068 | 80.0 | 242.500000 | 316.166667 | 420.000000 | 570.0 |
Chad | 62.0 | 356.666667 | 263.542491 | 110.0 | 190.000000 | 225.000000 | 515.000000 | 980.0 |
Congo, Dem. Rep. | 62.0 | 297.857143 | 102.674995 | 110.0 | 297.857143 | 297.857143 | 297.857143 | 580.0 |
Cote d'Ivoire | 62.0 | 900.500000 | 574.017835 | 160.0 | 600.000000 | 765.000000 | 1105.000000 | 2450.0 |
Egypt, Arab Rep. | 62.0 | 1278.000000 | 956.810617 | 170.0 | 552.500000 | 1165.000000 | 1427.500000 | 3510.0 |
Equatorial Guinea | 62.0 | 4377.750000 | 4043.103615 | 130.0 | 717.500000 | 4377.750000 | 5444.437500 | 14250.0 |
Eswatini | 62.0 | 2521.142857 | 887.719073 | 300.0 | 1937.500000 | 2521.142857 | 3245.000000 | 4420.0 |
Ethiopia | 62.0 | 332.051282 | 191.501226 | 110.0 | 210.000000 | 332.051282 | 332.051282 | 960.0 |
Gabon | 62.0 | 4275.500000 | 2489.630577 | 330.0 | 3145.000000 | 4265.000000 | 5685.000000 | 9330.0 |
Gambia, The | 62.0 | 483.703704 | 217.807979 | 110.0 | 300.000000 | 483.703704 | 682.500000 | 890.0 |
Ghana | 62.0 | 681.333333 | 635.327376 | 190.0 | 300.000000 | 390.000000 | 681.333333 | 2360.0 |
Guinea | 62.0 | 573.529412 | 145.127218 | 340.0 | 492.500000 | 573.529412 | 573.529412 | 1010.0 |
Kenya | 62.0 | 549.000000 | 478.665152 | 100.0 | 262.500000 | 390.000000 | 572.250000 | 2010.0 |
Lesotho | 62.0 | 692.142857 | 412.667112 | 80.0 | 412.500000 | 645.000000 | 1102.500000 | 1500.0 |
Liberia | 62.0 | 478.500000 | 95.750273 | 180.0 | 478.500000 | 478.500000 | 478.500000 | 650.0 |
Libya | 62.0 | 9093.000000 | 1426.993975 | 5140.0 | 9093.000000 | 9093.000000 | 9093.000000 | 12900.0 |
Malawi | 62.0 | 221.666667 | 143.802764 | 50.0 | 132.500000 | 175.000000 | 307.500000 | 630.0 |
Mali | 62.0 | 382.830189 | 236.181212 | 60.0 | 225.000000 | 310.000000 | 490.000000 | 870.0 |
Morocco | 62.0 | 1551.851852 | 923.661768 | 220.0 | 807.500000 | 1405.000000 | 2197.500000 | 3350.0 |
Mozambique | 62.0 | 419.310345 | 98.262463 | 190.0 | 419.310345 | 419.310345 | 419.827586 | 690.0 |
Namibia | 62.0 | 3228.000000 | 1158.025737 | 1320.0 | 2272.500000 | 3228.000000 | 3905.000000 | 5950.0 |
Niger | 62.0 | 322.666667 | 139.939878 | 150.0 | 220.000000 | 285.000000 | 405.000000 | 590.0 |
Nigeria | 62.0 | 954.166667 | 809.165309 | 100.0 | 367.500000 | 635.000000 | 1425.000000 | 2940.0 |
Rwanda | 62.0 | 323.333333 | 236.523084 | 40.0 | 152.500000 | 270.000000 | 357.500000 | 850.0 |
Senegal | 62.0 | 863.888889 | 321.886940 | 310.0 | 642.500000 | 863.888889 | 1020.000000 | 1540.0 |
Somalia | 62.0 | 172.777778 | 92.446016 | 70.0 | 112.500000 | 172.777778 | 172.777778 | 450.0 |
South Africa | 62.0 | 3595.500000 | 2210.700820 | 530.0 | 1807.500000 | 3230.000000 | 5835.000000 | 8370.0 |
Sudan | 62.0 | 674.500000 | 553.375410 | 140.0 | 340.000000 | 480.000000 | 782.500000 | 2420.0 |
Tanzania | 62.0 | 577.500000 | 236.254933 | 160.0 | 505.000000 | 577.500000 | 577.500000 | 1140.0 |
Tunisia | 62.0 | 2103.090909 | 1257.362413 | 220.0 | 1165.000000 | 2103.090909 | 3265.000000 | 4390.0 |
Uganda | 62.0 | 450.263158 | 193.479671 | 180.0 | 292.500000 | 450.263158 | 450.263158 | 850.0 |
Zambia | 62.0 | 656.000000 | 444.504513 | 190.0 | 360.000000 | 450.000000 | 712.500000 | 1800.0 |
Zimbabwe | 62.0 | 719.666667 | 332.590265 | 260.0 | 452.500000 | 690.000000 | 857.500000 | 1400.0 |
El siguiente código determina el INB per cápita de los primeros cinco países a lo largo del tiempo (consulte el gráfico):
import matplotlib.pyplot as plt
# Gráfico lineal del INB per cápita de África:
df.iloc[::,0:5].plot()
plt.title("INB per cápita, gráfico lineal del método Atlas (US$ actuales)")
plt.xlabel("Fecha")
plt.ylabel("INB per cápita, método Atlas (US$ actuales)")
# GNI per cápita de África:
plt.show()
El gráfico muestra que, desde 1960 hasta 2020, Burundi tiene el INB per cápita más bajo entre los cinco países. También muestra que el INB per cápita de Argelia, Angola, Benin y Botswana aumentó a principios de la década de 2000.
Reducción de dimensiones
El siguiente código aplica el análisis de componentes principales para reducir los datos en dos dimensiones y luego el siguiente código representa gráficamente los datos reducidos utilizando un diagrama de dispersión bidimensional (vease el gráfico resultante). Antes de realizar un análisis de dimensiones, se deben estandarizar los datos (centrar los datos para que el valor medio sea 0 y la desviación estándar sea 1):
import matplotlib.pyplot as plt
from sklearn.preprocessing import StandardScaler
# Estandarizar los datos:
escalador = StandardScaler()
df_estandarizado = escalador.fit_transform(df)
from sklearn.decomposition import PCA
# Reducir los datos:
acp2 = PCA(n_components = 3)
acp2.fit(df_estandarizado)
x_3d = acp2.transform(df_estandarizado)
plt.scatter(x_3d[:, 0],
x_3d[:, 2],
c = df['South Africa'],
cmap = "viridis",
s = 200)
plt.title("Datos 2-D de desigualdad en África")
plt.xlabel("y")
# Datos bidimensionales:
plt.show()
El gráfico anterior muestra el INB per cápita de los países africanos en un gráfico de dispersión bidimensional.
Detección de número de clúster
El siguiente código usa la curva del codo para identificar el número de conglomerados que se incluirán antes de entrenar el modelo de k-medias. Un gráfico del codo traza el valor propio o eigenvalor (un vector escalar después de una transformación lineal) en el eje y y el número de k en el eje x.
# Curva del codo:
acp = PCA(n_components = 3).fit(df_estandarizado)
acp_df = acp.transform(df_estandarizado)
from sklearn.cluster import KMeans
# Número de clústeres:
Nc = range(1, 20)
kmedias = [KMeans(n_clusters = i) for i in Nc]
# Puntuaciones:
puntuaciones = [kmedias[i].fit(acp_df).score(acp_df) for i in range(len(kmedias))]
# Gráfico:
fig, ax = plt.subplots()
plt.plot(Nc,
puntuaciones,
color = "navy",
lw = 4)
plt.xlabel("Número de clústeres")
plt.title("Curva del codo")
plt.ylabel("Puntuación")
# Curva del codo:
plt.show()
El gráfico muestra la curva del codo. El eje x es el número de k (que representa el número de grupos) y el eje y es la distorsión (que representa los valores propios, un escalar recuperado después de una transformación lineal). El eje y revela mucho sobre la severidad de la correlación entre las variables en estos datos, también llamados WSS (o dentro de grupos de sumas de cuadrados, por sus siglas en ingles: “within clusters of sums of squares”). Para determinar cuántos conglomerados debe incluir, debe determinar el punto de corte. Para seleccionar el punto de corte, debe identificar el punto en el que la curva del codo comienza a doblarse drásticamente. En este caso, el número de clústeres es tres.
Desarrollo del modelo de K-medias
El siguiente código entrena el modelo de k-medias aplicando todos los datos y el número de conglomerado (tres):
# Desarrollo del modelo de K-medias:
kmedias = KMeans(n_clusters = 3,
copy_x = False,
max_iter = 1,
n_init = 10,
tol= 1.0)
salida_kmedias = kmedias.fit(acp_df)
# Configuración k-medias:
salida_kmedias
KMeans(copy_x=False, max_iter=1, n_clusters=3, tol=1.0)
Predicciones
El siguiente código predice las etiquetas (ver la tabla resultante):
import pandas as pd
# predicciones:
y_predicciones_kmedias = pd.DataFrame(salida_kmedias.labels_,
columns = ["Clústeres"])
# Etiquetas pronosticadas:
y_predicciones_kmedias
Clústeres | |
---|---|
0 | 0 |
1 | 0 |
2 | 2 |
3 | 2 |
4 | 2 |
... | ... |
57 | 1 |
58 | 1 |
59 | 1 |
60 | 1 |
61 | 1 |
62 rows × 1 columns
El código anterior no revela mucho acerca de cómo el modelo de k-medias estima las etiquetas.
Detección de centros de clústeres
El siguiente código recupera una tabla que muestra el valor medio de cada grupo:
# Buscar centros de clústeres:
centros = salida_kmedias.cluster_centers_
centroidess = pd.DataFrame(centros).transpose()
centroidess.columns = ["Clúster 1", "Clúster 2", "Clúster 3"]
# Centros de conglomerados:
centroidess
Clúster 1 | Clúster 2 | Clúster 3 | |
---|---|---|---|
0 | -1.748636 | 8.956419 | -4.187186 |
1 | 1.463747 | -0.473839 | -2.278964 |
2 | 0.444593 | -0.170266 | -0.670509 |
El siguiente código genera un gráfico que muestra las etiquetas estimadas:
# Dispersión del INB per cápita de África:
fig, ax = plt.subplots()
plt.scatter(acp_df[:, 0],
acp_df[:, 1],
c = salida_kmedias.labels_,
cmap = "viridis",
s = 200)
plt.scatter(centros[:, 0],
centros[:, 1],
color = "red")
plt.title("INB per cápita de África, clústeres del método Atlas (US$ actuales)")
plt.xlabel("y")
# África INB per cápita modelo k-medias:
plt.show()
El gráfico muestra los puntos de datos (resaltados en amarillo, morado y verde) en sus respectivos grupos (puntos rojos).
Análisis de resultados de conglomerados
Para comprender mejor las etiquetas pronosticadas del siguiente código, consulte la tabla resultante:
# Tabla de conglomerados del INB per cápita de África:
stocks = pd.DataFrame(df.columns)
etiquetas_cluster = pd.DataFrame(kmedias.labels_)
stock_clusteres = pd.concat([stocks, etiquetas_cluster],
axis = 1)
stock_clusteres.columns = ["País", "Clústeres"]
stock_clusteres = stock_clusteres.replace({0: "INB per cápita bajo",1: "INB per cápita moderado",2: "INB per cápita alto"})
# Tabla de conglomerados del INB per cápita de África:
stock_clusteres.head(20)
País | Clústeres | |
---|---|---|
0 | Algeria | INB per cápita bajo |
1 | Angola | INB per cápita bajo |
2 | Benin | INB per cápita alto |
3 | Botswana | INB per cápita alto |
4 | Burundi | INB per cápita alto |
5 | Central African Republic | INB per cápita alto |
6 | Chad | INB per cápita alto |
7 | Congo, Dem. Rep. | INB per cápita alto |
8 | Cote d'Ivoire | INB per cápita alto |
9 | Egypt, Arab Rep. | INB per cápita alto |
10 | Equatorial Guinea | INB per cápita alto |
11 | Eswatini | INB per cápita alto |
12 | Ethiopia | INB per cápita alto |
13 | Gabon | INB per cápita alto |
14 | Gambia, The | INB per cápita alto |
15 | Ghana | INB per cápita alto |
16 | Guinea | INB per cápita alto |
17 | Kenya | INB per cápita alto |
18 | Lesotho | INB per cápita alto |
19 | Liberia | INB per cápita bajo |
El siguiente código simplifica los datos de la tabla anterior (consultar la gráfica resultante):
# Número de conglomerados del INB per cápita de África:
serie_clases = stock_clusteres.groupby("Clústeres").size()
serie_clases.name = "Cuenta"
serie_clases.plot.pie(autopct = "%2.f",
cmap = "Blues_r")
plt.title("Gráfico circular de clústeres")
# Recuento de conglomerados del INB per cápita de África:
plt.show()
El gráfico muestra que el 27 tiene un INB per cápita alto, el 23 de los países tiene un INB per cápita moderado y el 50 tiene un INB per cápita bajo.
Evaluación del modelo de K-Means
El modelo de k-medias no hace suposiciones extremas sobre los datos. Se puede aplicar sin una hipótesis predeterminada: Establece la verdad sobre los datos en lugar de probar afirmaciones. Tampoco cuenta con matrices robustas de evaluación de modelos.
Los métodos de la silueta
Puede confiar en el método de Silhouette para determinar hasta qué punto el modelo realiza estimaciones inteligentes (consulte el siguiente código). En este contexto, estima la diferencia entre la distancia media del cúmulo más cercano y la distancia dentro del cúmulo y la distancia media máxima del cúmulo más cercano y la distancia dentro del cúmulo. Devuelve valores que van de −1 a 1, donde:
- −1 indica un modelo deficiente.
- 0 indica un modelo mediocre.
- 1 indica un modelo que es ejemplar en la realización de cálculos aproximados.
# Encontrar la puntuación de silueta:
from sklearn import metrics
metrics.silhouette_score(df, y_predicciones_kmedias)
0.4332307316309596
La puntuación de la silueta es 0.4332307316309596. Lo cual significa que el clasificador es mediocre al estimar etiquetas de INB per cápita para los países africanos.
Conclusión
En la presente entrada expongo un modelo de aprendizaje automático no supervisado para la agrupación en clústeres, llamado modelo k-means. Desarrolló un modelo con hiperparámetros predeterminados. Estimó la distancia entre los valores del INB per cápita en los países de África. Posteriormente, agrupó a los países en clusters por INB per cápita. Finalmente, concluyo con una breve discusión sobre el aprendizaje automático no supervisado.
popular post

El modelo AR de series temporales univariadas
Resumen: En esta entrada, descubrirá el modelo AR: El modelo autorregresivo.
Leer más
Evaluación de modelos para pronosticar
Resumen: Al desarrollar modelos de aprendizaje automático, generalmente se comparan varios modelos durante la fase de construcción.
Leer más
Modelos para pronosticar
Resumen: El pronóstico, traducido groseramente como la tarea de predecir el futuro, ha estado presente en la sociedad humana durante siglos.
Leer más