3.2 Practica

Descargar como pdf o txt
Descargar como pdf o txt
Está en la página 1de 11

Mtría en Ciencia de los Datos y Procesamiento de

Datos Masivos (BIG-DATA)


Programación Python

Jairo Leonardo Ortiz Fontalvo


0000-00-2229

3.2 Practica. Análisis, implementación y prueba de


una máquina de aprendizaje supervisado..
Unidad 3

Dr. Francisco Javier Luna Rosas


2021-04-18

1
Introducción

Dia a día aprendemos nuevos temas y nueva información se almacena en nuestro

cerebro, hoy es el momento de machine learning y los diferentes algoritmos de

aprendizaje supervisado, es el momento de introducirse en este universo que me

puede llevar a la cúspide de mi carrera o dejarme tal cual estoy, todo depende de

mí y de lo que haga con la información de este documento.

En este documento aprenderemos de forma rápida y sencilla las maquians de

aprendizaje: Método de Naive Bayes, El K-ésimo Vecino Más Cercano y Árbol de

Decisión.

2
Desarrollo
Análisis de la máquina de aprendizaje supervisado:

Tomaremos 257 registros con Opiniones de usuarios sobre una app (Reviews).

Utilizaremos 2 columnas de datos como fuente de alimento del algoritmo. Sólo

tomaré 2 features para poder graficar en 2 dimensiones, aunque para un problema

“en la vida real” conviene tomar más características de lo que sea que queramos

resolver. Esto es únicamente con fines del ejercicio. Las columnas que utilizaremos

serán: wordcount con la cantidad de palabras utilizadas y sentimentValue con un

valor entre -4 y 4 que indica si el comentario fue valorado como positivo o negativo.

Nuestras etiquetas, serán las estrellas que dieron los usuarios a la app, que son

valores discretos del 1 al 5. Podemos pensar que, si el usuario puntúa con más

estrellas, tendrá un sentimiento positivo, pero no necesariamente siempre es así.

Implementación y prueba de la máquina de aprendizaje supervisado:

1. Importar Librerías a usar:

1. import pandas as pd
2. import numpy as np
3. import matplotlib.pyplot as plt
4. from matplotlib.colors import ListedColormap
5. import matplotlib.patches as mpatches
6. import seaborn as sb
7.
8. %matplotlib inline
9. plt.rcParams['figure.figsize'] = (16, 9)
10. plt.style.use('ggplot')
11.
12. from sklearn.model_selection import train_test_split
13. from sklearn.preprocessing import MinMaxScaler
14. from sklearn.neighbors import KNeighborsClassifier
15. from sklearn.metrics import classification_report

3
16. from sklearn.metrics import confusion_matrix

2. Cargar los datos

1. dataframe = pd.read_csv(r"reviews_sentiment.csv",sep=';')
2. dataframe.head(10)

El dataframe queda cargado:

Imagen 1: Dataframe cargado

3. Se puede ver un resumen estadístico de los datos de la siguiente manera:

1. dataframe.describe()

Imagen 2: Resumen estadístico de los datos

4
Son 257 registros. Las estrellas lógicamente vemos que van del 1 al 5. La

cantidad de palabras van de 1 sóla hasta 103. y las valoraciones de

sentimiento están entre -2.27 y 3.26 con una media de 0,38 y a partir del

desvío estándar podemos ver que la mayoría están entre 0,38-0,89 y

0,38+0,89.

4. Preparamos la entra X & Y y los sets de entrenamiento y test

1. X = dataframe[['wordcount','sentimentValue']].values
2. y = dataframe['Star Rating'].values
3.
4. X_train, X_test, y_train, y_test = train_test_split(X, y,
random_state=0)
5. scaler = MinMaxScaler()
6. X_train = scaler.fit_transform(X_train)
7. X_test = scaler.transform(X_test)

5. Se crea el modelo

1. n_neighbors = 7
2.
3. knn = KNeighborsClassifier(n_neighbors)
4. knn.fit(X_train, y_train)
5. print('Accuracy of K-NN classifier on training set: {:.2f}
'
6. .format(knn.score(X_train, y_train)))
7. print('Accuracy of K-NN classifier on test set: {:.2f}'
8. .format(knn.score(X_test, y_test)))

6. El resultado es:

1. Accuracy of K-NN classifier on training set: 0.90


2. Accuracy of K-NN classifier on test set: 0.86

La precisión que nos da es de 90% en el set de entrenamiento y del 86%

para el test.

5
7. Visualicemos la matrix de confusión y el reporte del conjunto de datos test

1. pred = knn.predict(X_test)
2. print(confusion_matrix(y_test, pred))
3. print(classification_report(y_test, pred))

Imagen 3: Matrix de confusión y reporte de datos de prueba

8. Ahora se realizará la gráfica con la clasificación obtenida, la que nos ayuda

a ver fácilmente en donde caerán las predicciones.

h = .02 # step size in the mesh

# Create color maps


cmap_light = ListedColormap(['#FFAAAA', '#ffcc99', '#ffffb3','#b
3ffff','#c2f0c2'])
cmap_bold = ListedColormap(['#FF0000', '#ff9933','#FFFF00','#00f
fff','#00FF00'])

# we create an instance of Neighbours Classifier and fit the dat


a.
clf = KNeighborsClassifier(n_neighbors, weights='distance')
clf.fit(X, y)

# Plot the decision boundary. For that, we will assign a color t


o each
# point in the mesh [x_min, x_max]x[y_min, y_max].
x_min, x_max = X[:, 0].min() - 1, X[:, 0].max() + 1
y_min, y_max = X[:, 1].min() - 1, X[:, 1].max() + 1
xx, yy = np.meshgrid(np.arange(x_min, x_max, h),
np.arange(y_min, y_max, h))
Z = clf.predict(np.c_[xx.ravel(), yy.ravel()])

6
# Put the result into a color plot
Z = Z.reshape(xx.shape)
plt.figure()
plt.pcolormesh(xx, yy, Z, cmap=cmap_light)

# Plot also the training points


plt.scatter(X[:, 0], X[:, 1], c=y, cmap=cmap_bold,
edgecolor='k', s=20)
plt.xlim(xx.min(), xx.max())
plt.ylim(yy.min(), yy.max())

patch0 = mpatches.Patch(color='#FF0000', label='1')


patch1 = mpatches.Patch(color='#ff9933', label='2')
patch2 = mpatches.Patch(color='#FFFF00', label='3')
patch3 = mpatches.Patch(color='#00ffff', label='4')
patch4 = mpatches.Patch(color='#00FF00', label='5')
plt.legend(handles=[patch0, patch1, patch2, patch3,patch4])

plt.title("5-Class classification (k = %i, weights = '%s')"


% (n_neighbors, 'distance'))

plt.show()

Imagen 4: Grafica de clasificación obtenida

7
9. Vemos las 5 zonas en las que se relacionan cantidad de palabras con el valor

de sentimiento de la Review que deja el usuario. Se distinguen 5 regiones

que podríamos dividir así:

Imagen 5: Regiones divididas

Es decir que una review de 20 palabras y Sentimiento 1, nos daría una

valoración de 4 (zona celeste).

Con estas zonas podemos intuir ciertas características de los usuarios que

usan y valoran la app:

• Los usuarios que ponen 1 estrella tienen sentimiento negativo y hasta

25 palabras.

• Los usuarios que ponen 2 estrellas dan muchas explicaciones (hasta

100 palabras) y su sentimiento puede variar entre negativo y algo

positivo.

8
• Los usuarios que ponen 3 estrellas son bastante neutrales en

sentimientos, puesto que están en torno al cero y hasta unas 25

palabras.

• Los usuarios que dan 5 estrellas son bastante positivos (de 0,5 en

adelante, aproximadamente) y ponen pocas palabras (hasta 10).

9
Conclusiones

En este ejercicio creamos un modelo con Python para procesar y clasificar puntos

de un conjunto de entrada con el algoritmo k-Nearest Neighbor. Cómo su nombre

en inglés lo dice, se evalúan los “k vecinos más cercanos” para poder clasificar

nuevos puntos. Al ser un algoritmo supervisado debemos contar con suficientes

muestras etiquetadas para poder entrenar el modelo con buenos resultados. Este

algoritmo es bastante simple y -como vimos antes- necesitamos muchos recursos

de memoria y cpu para mantener el dataset “vivo” y evaluar nuevos puntos. Esto no

lo hace recomendable para conjuntos de datos muy grandes. En el ejemplo, sólo

utilizamos 2 dimensiones de entrada para poder graficar y ver en dos dimensiones

cómo se obtienen y delimitan los grupos. Finalmente pudimos hacer nuevas

predicciones y a raíz de los resultados, comprender mejor la problemática

planteada.

10
Referencias

Restrepo, Julio. (Julio, 2018). Clasificación con knn

Recuperado de https://www.aprendemachinelearning.com/clasificar-con-k-

nearest-neighbor-ejemplo-en-python/

11

También podría gustarte