100% encontró este documento útil (1 voto)
440 vistas11 páginas

02 Agrupamiento K Means Ejercicio Propuesto

Este documento propone utilizar el algoritmo de agrupamiento K-Means para agrupar universidades en dos grupos (privado y público) basándose en 18 variables como matrícula, gastos, tasa de graduación, etc. Aunque se conocen las etiquetas reales de cada universidad, no se usarán en K-Means dado que es un algoritmo no supervisado. Se exploran visualmente los datos y se prepara el uso de K-Means para agrupar las universidades y comparar los resultados con las etiquetas reales.

Cargado por

Lnsl Lou Na
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
100% encontró este documento útil (1 voto)
440 vistas11 páginas

02 Agrupamiento K Means Ejercicio Propuesto

Este documento propone utilizar el algoritmo de agrupamiento K-Means para agrupar universidades en dos grupos (privado y público) basándose en 18 variables como matrícula, gastos, tasa de graduación, etc. Aunque se conocen las etiquetas reales de cada universidad, no se usarán en K-Means dado que es un algoritmo no supervisado. Se exploran visualmente los datos y se prepara el uso de K-Means para agrupar las universidades y comparar los resultados con las etiquetas reales.

Cargado por

Lnsl Lou Na
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd

9/12/2018 02 Agrupamiento K Means Ejercicio Propuesto

Agrupamiento K Means: Ejercicio Propuesto


Para este proyecto intentaremos utilizar Agrupamiento K Means para agrupar Universidades en
dos grupos, Privado y Público.

Es muy importante tener en cuenta que, de hecho, tenemos las etiquetas para este conjunto
de datos, pero NO los utilizaremos para el algoritmo de agrupamiento de KMeans, ya que es
un algoritmo de aprendizaje no supervisado.

Cuando se utiliza el algoritmo Kmeans en circunstancias normales, es porque no tiene etiquetas.


En este caso usaremos las etiquetas para tratar de tener una idea de qué tan bien funcionó el
algoritmo, pero generalmente no se tienen estas para Kmeans, por lo que el informe de
clasificación y la matriz de confusión al final de este proyecto no se hacen realmente. ¡tiene sentido
en un entorno real!

Los Datos
Utilizaremos un dataframe con 777 observaciones sobre las siguientes 18 variables.

Private Un factor con niveles No y Yes que indica universidad privada o pública
Apps Número de solicitudes recibidas
Accept Número de aplicaciones aceptadas
Enroll Número de nuevos estudiantes matriculados
Top10perc Pct. nuevos estudiantes del 10% superior de H.S.
Top25perc Pct. nuevos estudiantes del 25% superior de H.S.
[Link] Número de estudiantes a tiempo completo
[Link] Número de estudiantes a tiempo parcial
Outstate Matrícula fuera del estado
[Link] Costos de habitación y comida
Books Costos estimados del libro
Personal Gasto personal estimado
PhD Pct. de la facultad con Ph.D.
Terminal Pct. de la facultad con grado terminal
[Link] Proporción estudiante / facultad
[Link] Pct. ex alumnos que donan
Expend Gastos de instrucción por estudiante
[Link] Tasa de graduación

Importar librerias
** Importe las librerias que generalmente usa para el análisis de datos. **

[Link] 1/11
9/12/2018 02 Agrupamiento K Means Ejercicio Propuesto

In [1]: import pandas as pd


import numpy as np
import [Link] as plt
import seaborn as sns
%matplotlib inline

Obtener los Datos


In [ ]:

** Lea en el archivo College_Data usando read_csv. Configure la primera columna como índice.**

In [2]: df = pd.read_csv('College_Data',index_col=0)

Revise los primeros registros de los datos

In [3]: [Link]()

Out[3]:
Private Apps Accept Enroll Top10perc Top25perc [Link] [Link] Outsta

Abilene
Christian Yes 1660 1232 721 23 52 2885 537 74
University

Adelphi
Yes 2186 1924 512 16 29 2683 1227 122
University

Adrian
Yes 1428 1097 336 22 50 1036 99 112
College

Agnes
Scott Yes 417 349 137 60 89 510 63 129
College

Alaska
Pacific Yes 193 146 55 16 44 249 869 75
University

** Aplique los métodos info() y describe() en los datos.**

[Link] 2/11
9/12/2018 02 Agrupamiento K Means Ejercicio Propuesto

In [4]: [Link]()

<class '[Link]'>
Index: 777 entries, Abilene Christian University to York College of Pennsylvan
ia
Data columns (total 18 columns):
Private 777 non-null object
Apps 777 non-null int64
Accept 777 non-null int64
Enroll 777 non-null int64
Top10perc 777 non-null int64
Top25perc 777 non-null int64
[Link] 777 non-null int64
[Link] 777 non-null int64
Outstate 777 non-null int64
[Link] 777 non-null int64
Books 777 non-null int64
Personal 777 non-null int64
PhD 777 non-null int64
Terminal 777 non-null int64
[Link] 777 non-null float64
[Link] 777 non-null int64
Expend 777 non-null int64
[Link] 777 non-null int64
dtypes: float64(1), int64(16), object(1)
memory usage: 115.3+ KB

In [5]: [Link]()

Out[5]:
Apps Accept Enroll Top10perc Top25perc [Link] [Link]

count 777.000000 777.000000 777.000000 777.000000 777.000000 777.000000 777.00000

mean 3001.638353 2018.804376 779.972973 27.558559 55.796654 3699.907336 855.29858

std 3870.201484 2451.113971 929.176190 17.640364 19.804778 4850.420531 1522.43188

min 81.000000 72.000000 35.000000 1.000000 9.000000 139.000000 1.00000

25% 776.000000 604.000000 242.000000 15.000000 41.000000 992.000000 95.00000

50% 1558.000000 1110.000000 434.000000 23.000000 54.000000 1707.000000 353.00000

75% 3624.000000 2424.000000 902.000000 35.000000 69.000000 4005.000000 967.00000

max 48094.000000 26330.000000 6392.000000 96.000000 100.000000 31643.000000 21836.00000

Análisis Exploratorio de Datos


¡Es hora de crear algunas visualizaciones de datos!

** Crea un diagrama de dispersión de [Link] vs [Link] donde los puntos están


coloreados por la columna Private. **

[Link] 3/11
9/12/2018 02 Agrupamiento K Means Ejercicio Propuesto

In [6]: sns.set_style('whitegrid')
[Link]('[Link]','[Link]',data=df,hue='Private',
palette='coolwarm',size=6,aspect=1,fit_reg=False)

C:\CursoML\lib\site-packages\seaborn\[Link]: UserWarning: The `size


` paramter has been renamed to `height`; please update your code.
[Link](msg, UserWarning)

Out[6]: <[Link] at 0x6a8a5f8>

Crea un diagrama de dispersión de [Link] vs Outstate donde los puntos están


coloreados por la columna Private.

[Link] 4/11
9/12/2018 02 Agrupamiento K Means Ejercicio Propuesto

In [7]: sns.set_style('whitegrid')
[Link]('Outstate','[Link]',data=df,hue='Private',
palette='coolwarm',size=6,aspect=1,fit_reg=False)

C:\CursoML\lib\site-packages\seaborn\[Link]: UserWarning: The `size


` paramter has been renamed to `height`; please update your code.
[Link](msg, UserWarning)

Out[7]: <[Link] at 0x4f726a0>

** Cree un histograma apilado que muestre la matrícula fuera del estado según la columna Private.
Intente hacerlo usando [Link]
([Link] Si eso es
demasiado complicado, vea si puede hacerlo simplemente usando dos instancias de
[Link](kind='hist'). **

[Link] 5/11
9/12/2018 02 Agrupamiento K Means Ejercicio Propuesto

In [8]: sns.set_style('darkgrid')
g = [Link](df,hue='Private',palette='coolwarm',
size=4,aspect=2)
g = [Link]([Link],'Outstate',bins=20,alpha=0.7)
[Link]()

C:\CursoML\lib\site-packages\seaborn\[Link]: UserWarning: The `size`


paramter has been renamed to `height`; please update your code.
[Link](msg, UserWarning)

Out[8]: <[Link] at 0x6ba2ef0>

Create un histograma similar para la columna [Link].

[Link] 6/11
9/12/2018 02 Agrupamiento K Means Ejercicio Propuesto

In [9]: sns.set_style('darkgrid')
g = [Link](df,hue='Private',palette='coolwarm',
size=4,aspect=2)
g = [Link]([Link],'[Link]',bins=20,alpha=0.7)
[Link]()

C:\CursoML\lib\site-packages\seaborn\[Link]: UserWarning: The `size`


paramter has been renamed to `height`; please update your code.
[Link](msg, UserWarning)

Out[9]: <[Link] at 0x6a8e8d0>

** Observe cómo parece haber una escuela privada con una tasa de graduación superior al 100%.
¿Cuál es el nombre de esa escuela?**

In [10]: df[df['[Link]']>100]

Out[10]:
Private Apps Accept Enroll Top10perc Top25perc [Link] [Link] Outsta

Cazenovia
Yes 3847 3433 527 9 35 1010 12 93
College

** Establezca la tasa de graduación de esa escuela en 100, de modo que tenga sentido. Puede
obtener una advertencia, no un error, al realizar esta operación, por lo tanto, utilice las operaciones
de dataframe o simplemente vuelva a hacer la visualización del histograma para asegurarse de que
realmente se realizó. **

[Link] 7/11
9/12/2018 02 Agrupamiento K Means Ejercicio Propuesto

In [11]: df['[Link]']['Cazenovia College']=100

C:\CursoML\lib\site-packages\ipykernel_launcher.py:1: SettingWithCopyWarning:
A value is trying to be set on a copy of a slice from a DataFrame

See the caveats in the documentation: [Link]


ble/[Link]#indexing-view-versus-copy ([Link]
ocs/stable/[Link]#indexing-view-versus-copy)
"""Entry point for launching an IPython kernel.

In [12]: df[df['[Link]']>100]

Out[12]:
Private Apps Accept Enroll Top10perc Top25perc [Link] [Link] Outstate Room

In [13]: sns.set_style('darkgrid')
g = [Link](df,hue='Private',palette='coolwarm',
size=4,aspect=2)
g = [Link]([Link],'[Link]',bins=20,alpha=0.7)
[Link]()

C:\CursoML\lib\site-packages\seaborn\[Link]: UserWarning: The `size`


paramter has been renamed to `height`; please update your code.
[Link](msg, UserWarning)

Out[13]: <[Link] at 0x6a918d0>

Creación del clúster K Means


¡Ahora es el momento de crear las etiquetas del Cluster!

** Importar KMeans de SciKit Learn. **

In [14]: from [Link] import KMeans

[Link] 8/11
9/12/2018 02 Agrupamiento K Means Ejercicio Propuesto

** Crea una instancia de un modelo de KM eans con 2 clústeres. **

In [15]: kmeans = KMeans(n_clusters=2)

** Ajuste el modelo a todos los datos a excepción de la etiqueta Private. **

In [16]: [Link]([Link]('Private',axis=1))

Out[16]: KMeans(algorithm='auto', copy_x=True, init='k-means++', max_iter=300,


n_clusters=2, n_init=10, n_jobs=1, precompute_distances='auto',
random_state=None, tol=0.0001, verbose=0)

** ¿Cuáles son los centro del grupo de los vectores? **

In [17]: kmeans.cluster_centers_

Out[17]: array([[1.81323468e+03, 1.28716592e+03, 4.91044843e+02, 2.53094170e+01,


5.34708520e+01, 2.18854858e+03, 5.95458894e+02, 1.03957085e+04,
4.31136472e+03, 5.41982063e+02, 1.28033632e+03, 7.04424514e+01,
7.78251121e+01, 1.40997010e+01, 2.31748879e+01, 8.93204634e+03,
6.50926756e+01],
[1.03631389e+04, 6.55089815e+03, 2.56972222e+03, 4.14907407e+01,
7.02037037e+01, 1.30619352e+04, 2.46486111e+03, 1.07191759e+04,
4.64347222e+03, 5.95212963e+02, 1.71420370e+03, 8.63981481e+01,
9.13333333e+01, 1.40277778e+01, 2.00740741e+01, 1.41705000e+04,
6.75925926e+01]])

Evaluación
No existe una forma perfecta de evaluar la agrupación si no se cuenta con las etiquetas, sin
embargo, dado que se trata de un ejercicio y sí tenemos las etiquetas, por lo que aprovechamos
esto para evaluar nuestros grupos, tenga en cuenta que generalmente no es así en el mundo real.

** Cree una nueva columna para df llamada 'Cluster', que es un 1 para una escuela privada y un 0
para una escuela pública. **

In [20]: def conversor(cluster):


if cluster == 'Yes':
return 1
else:
return 0

In [21]: df['Cluster']=df['Private'].apply(conversor)

[Link] 9/11
9/12/2018 02 Agrupamiento K Means Ejercicio Propuesto

In [22]: [Link]()

Out[22]:
Private Apps Accept Enroll Top10perc Top25perc [Link] [Link] Outsta

Abilene
Christian Yes 1660 1232 721 23 52 2885 537 74
University

Adelphi
Yes 2186 1924 512 16 29 2683 1227 122
University

Adrian
Yes 1428 1097 336 22 50 1036 99 112
College

Agnes
Scott Yes 417 349 137 60 89 510 63 129
College

Alaska
Pacific Yes 193 146 55 16 44 249 869 75
University

** Cree una matriz de confusión y un informe de clasificación para ver qué tan bien funcionó el
clúster de K Means sin etiquetas. **

In [23]: from [Link] import confusion_matrix


from [Link] import classification_report
print(confusion_matrix(df['Cluster'],kmeans.labels_))
print(classification_report(df['Cluster'],kmeans.labels_))

[[138 74]
[531 34]]
precision recall f1-score support

0 0.21 0.65 0.31 212


1 0.31 0.06 0.10 565

avg / total 0.29 0.22 0.16 777

[Link] 10/11
9/12/2018 02 Agrupamiento K Means Ejercicio Propuesto

In [24]: kmeans.labels_

Out[24]: array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1,
0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0,
0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0,
1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1,
0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 1, 0,
0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0,
1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0,
0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 1, 1, 0, 0, 1, 0,
0, 0, 0, 1, 1, 0, 1, 1, 1, 0, 1, 0, 1, 0, 0, 0, 0, 1, 1, 0, 1, 1,
0, 0, 1, 0, 1, 0, 0, 0, 0, 1, 0, 1, 0, 1, 1, 0, 0, 0, 0, 1, 0, 0,
1, 1, 1, 1, 1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0,
0, 1, 0, 1, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 1, 1, 0, 0,
0, 0, 0, 0, 1, 0, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0,
0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 1, 0])

¡No está mal teniendo en cuenta que el algoritmo está utilizando puramente las características para
agrupar las universidades en 2 grupos distintos! ¡Con suerte, puede comenzar a ver cómo K Means
es útil para agrupar datos no etiquetados!

Great Job!

[Link] 11/11

También podría gustarte