Full text
FACULTAD DE MATEM´ ATICAS DEPARTAMENTO DE ESTAD´ ISTICA E INVESTIGACI´ ON OPERATIVA T´ ECNICAS ESTAD´ ISTICAS EN AN ´ ALISIS DE REDES SOCIALES Memoria realizada por Gaspar R´ıos Alcobendas Dirigido por: Dr. Jose Luis Pino Mej´ıas
Resumen El gran auge de las tecnolog´ıas de la comunicaci´on ha supuesto un gran cambio en la forma en que seres humanos nos relacionamos. En particular nos hemos acogido notoriamente al uso de redes sociales, en las cuales nos relacionamos virtualmente emulando la vida real. Es por esto que, con el prop´osito de conocer un poco m´as el comportamiento de los usuarios resulta de gran inter´es la aplicaci´on de t´ecnicas estad´ısticas en redes sociales. En la introducci´on del trabajo hablamos de la importancia que tiene el estudio de las redes sociales. Adem´as de ello presentamos la red social Twitter, servicio de microblogging, y el software estad´ıstico R. El el primer cap´ıtulo hablaremos de c´omo se extraen dichos mensajes as´ı como la posterior organizaci´on de estos mensajes con varios ejemplos. En el segundo cap´ıtulo explicamos con detalle el An´alisis de Frecuencia, aplic´andolo a un conjunto de datos basado en mensaje de Twitter. En este vemos la construcci´on de la matriz t´ermino-documento, fundamental a lo largo del trabajo, y una aplicaci´on de esta en forma de wordcloud de los mensajes de la cuenta oficial de Donald Trump. En el tercer cap´ıtulo vemos el An´alisis Clustering o de Conglomerados. En ´el comenzamos introduciendo el concepto de distancia entre documentos. Posteriormente explicamos detalladamente los m´etodos jer´arquicos y los divisivos. Adem´as, se incluye una aplicaci´on de ambos sobre las mensajes de la famosa cuenta @wikileaks, observando resultados bastante claros a la hora de agrupar los temas principales de los que se habla en dicha cuenta. En el cuarto cap´ıtulo nos centramos en el An´alisis de Sentimientos. Resul- 3
4 ta ser un tema de gran importancia en lo que aplicaci´on a Twitter se refiere ya que dicha red social es com´unmente usada para volcar las opiniones las opiniones personales sobre toda ´ındole de temas. Primeramente explicamos en qu´e consiste el an´alisis de polaridad, exponiendo un ejemplo en el que la opini´on de usuarios angloparlantes sobre la corrupci´on en Espa˜na es claramente negativa. Por otro lado vemos el an´alisis de sentimientos basado en t´ecnicas clasificatorias como el SVM, Naives Bayes o el algoritmo de m´axima entrop´ıa.
Abstract The great rise of communication technologies has brought about a significant change in the manner in which we as human beings relate. We have notably welcomed the use of social networks, through which we interact virtually emulating real life. It is for this reason that, with the purpose of knowing a little more about the behavior of users, the application of statistical techniques in social networks is of great interest. In the introduction of the work we talk about the importance of the social nets studies. In addition we present the social network Twitter, microblogging service, and the statistical software R. In the first chapter we present how such messages are extracted as well as the subsequent organization of these messages with several examples. In the second chapter we explain in detail the Frequency Analysis, applying it to a data set based on Twitter messages. In this we see the construction of the matrix document-term, fundamental throughout the work, as well as its application in wordcloud format of the messages sourced from the official Twitter account of Donald Trump. In the third chapter we see Clustering or Conglomerate Analysis. In the beginning we introduce the concept of distance between documents. Subsequently, we explain the hierarchical and divisive methods in detail. In addition, an application of both is included-sourced from the messages of the famous @wikileaks account, observing quite clear results when grouping the main subjects of which that it is spoken of in said account. In the fourth chapter we focus on the Analysis of Feelings. It turns out to 5
6 be an issue of great importance in which the application of Twitter is referred to since this social network is commonly used to overturn personal opinions on a variety of topics. First, we explain the polarity analysis, setting forth an example in which the English-speaking users’ opinion on corruption in Spain is clearly negative. On the other hand we see the analysis of feelings based on classification techniques such as the SVM, Naives Bayes or the maximum entropy algorithm.
´ Indice general Introducci´on 9 1. Tratamiento de los datos 13 1.1. Extracci´on de datos . . . . . . . . . . . . . . . . . . . . . . . . 13 1.2. Organizaci´on de los datos . . . . . . . . . . . . . . . . . . . . 16 1.2.1. Modelo Booleano . . . . . . . . . . . . . . . . . . . . . 16 1.2.2. Modelo espacio vectorial . . . . . . . . . . . . . . . . . 17 1.2.3. Modelo de grafo . . . . . . . . . . . . . . . . . . . . . . 17 2. An´alisis de frecuencia 21 2.1. Matriz t´ermino-documento . . . . . . . . . . . . . . . . . . . . 21 2.2. Wordcloud............................. 23 3. Clustering 25 3.1. Distancias usuales . . . . . . . . . . . . . . . . . . . . . . . . . 26 3.1.1. Distancia Euclidea . . . . . . . . . . . . . . . . . . . . 27 3.1.2. Distancia de Minkowski . . . . . . . . . . . . . . . . . 27 3.1.3. Distancia de Chebyshev . . . . . . . . . . . . . . . . . 27 3.1.4. Distancia de Mahalanobis . . . . . . . . . . . . . . . . 27 3.1.5. Distancia entre vectores binarios . . . . . . . . . . . . . 28 3.2. M´etodos particionales . . . . . . . . . . . . . . . . . . . . . . . 28 3.2.1. M´etodo k-means . . . . . . . . . . . . . . . . . . . . . 29 3.2.2. M´etodo k-medoids . . . . . . . . . . . . . . . . . . . . 33 3.3. M´etodos jer´arquicos . . . . . . . . . . . . . . . . . . . . . . . . 38 3.3.1. Algoritmo aglomerativo . . . . . . . . . . . . . . . . . 39 3.3.2. Algoritmos divisivos . . . . . . . . . . . . . . . . . . . 45 7
8´ INDICE GENERAL 4. An´alisis de sentimientos 47 4.1. An´alisis de polaridad . . . . . . . . . . . . . . . . . . . . . . . 48 4.1.1. Aplicaci´on......................... 49 4.2. Algoritmos de clasificaci´on . . . . . . . . . . . . . . . . . . . . 51 4.2.1. Clasificador Naives-Bayes . . . . . . . . . . . . . . . . 52 4.2.2. Support Vector Machine . . . . . . . . . . . . . . . . . 52 4.2.3. Clasificador de m´axima entrop´ıa . . . . . . . . . . . . . 54 5. Conclusiones 57
Introducci´on El gran auge de las tecnolog´ıas de la comunicaci´on ha supuesto un gran cambio en la forma en que seres humanos nos relacionamos. En particular nos hemos acogido notoriamente al uso de redes sociales, en las cuales nos relacionamos virtualmente emulando la vida real. Los estudios y el an´alisis de redes sociales sociales han crecido a su vez de forma significativa, suponiendo una importante abertura en el camino de este tipo de trabajos. No es esto de extra˜nar ya que conocer el comportamiento y la opini´on o sentimiento de los usuarios nos permite predecir y gestionar diferentes procesos de ´ındole social, econ´omica y empresarial. Por poner algunos ejemplos podemos optimizar la comercializaci´on de un producto en base a las opiniones de los usuarios relacionadas con el producto, encontrar un problema pol´ıtico en la difamaci´on de falsos mensajes o por ejemplo encontrar zonas de nuestro territorio altamente machistas, encontrar usuarios que ejerzan gran influencia sobre el resto... Con este tipo de objetivos en mente nos planteamos entonces la realizaci´on de este trabajo sobre t´ecnicas estad´ısticas en an´alisis de redes sociales. M´as all´a de los fines u objetivos que persigamos nos centraremos sobre todo en la base matem´atica que tienen estas t´ecnicas, es decir, en la teor´ıa que subyace a los algoritmos y aplicaciones que son usualmente utilizados. Nos centraremos en Twitter, una de las redes sociales que m´as se prestan a nuestro estudio, y en el software estad´ıstico R. Es por esto que pasamos a introducirlos con m´as detalle. 9
16 CAP´ ITULO 1. TRATAMIENTO DE LOS DATOS 1.2. Organizaci´on de los datos Los conjuntos de datos nos llegan de muy diversas formas, por lo que cabe plantearse c´omo organizar y modelar los datos para un mayor aprovechamiento de los mismo. 1.2.1. Modelo Booleano No hay duda de que el modelo booleano es uno de los m´as utilizados en conjuntos de datos aleatorios en morfolog´ıa matem´atica, geometr´ıa estoc´astica y estad´ısticas espaciales. Esta basado en la teor´ıa conjuntista y el ´algebra de Boole. En este, cada documento se reprenta por un conjunto de t´erminos donde cada uno se trata como una variable Booleana que recibe el valor 1 si pertenece al documento y 0 si no. Dicho t´erminos se recogen en un fichero adicional en el que guardaremos el conjunto de t´erminos de la colecci´on de documentos que estemos explorando as´ı como la correlaci´on entre los mismos. Las consultas se arman con t´erminos vinculados por operadores l´ogicos. Estos operadores son un s´ımbolo o palabra que se utiliza para conectar dos f´ormulas bien formadas o sentencias. Rn este caso se usar´an los operadores AND (verdadero s´olo si los dos elementos son verdaderos), OR (verdadero si cualquiera de los elementos es verdadero), XOR (verdadero si cualquiera de las expresiones, pero no ambas, es verdadera) y NOT (cambia el valor de Falso a Verdadero y viceversa). Los resultados son referencias a documentos cuya representac´ın satisface las restricciones l´ogicas de la expresi´on de b´usqueda. Sin embargo existe el incoveniente de que no establece un ranking de relevancia sobre el conjunto de respuestasa una consulta, todos los documentos tienen la misma importancia. Ademas, podemos tener respuestas irreleventas y demasiado elevadas con lo que a documentos respecta. A su favor tiene el su f´acil uso, pudiendo resultar ´util para un usuario medio as´ı como la facilidad para hacer consultas muy concretas funcionando bien con vol´umenes grandes de datos.
1.2. ORGANIZACI ´ ON DE LOS DATOS 17 1.2.2. Modelo espacio vectorial Se trata de un modelo algebraico para representar documentos de texto(o cualquier objeto en general) identificandolos como vectores. Es un modelo muy utilizado para el filtro y recuperaci´on de informaci´on, indexaci´on y creaci´on de rankings de relevancia. En este modelo tanto los documentos como las consultas son representadas como vectores. Permite introducir un orden en los documentos recuperados, por lo que surge la necesidad de crear una funci´on de similitud entre el documento y la consulta. Si un t´ermino aparece en un documento su valor en el vector ser´a no nulo. Ahora bien, este valor o peso ser´a el que nos marque la relevancia sobre el resto. Se ha desarrollado un gran n´umero de t´ecnicas con las que medir dicho valor. Una de las m´as conocidas es la llamada ”term frecuencyinverse document frequency model”. Este, a diferencia del m´as trivial m´etodo de conteo de ocurrencia, incorpora informaci´on global y local. En este caso, el vector con pesos para un documento d ser´a vd= (w1,d, w2,d, ..., wN,d)0, donde el t´ermino de peso se define como: wi,d =tfi,d ∗log(D dfi,d ) donde tfi,d es el n´umero de veces que el t´ermino i aparece en el documento; dfi,d el n´umero de documentos en los que aparece el t´ermino i y D el n´umero de documentos de la base o colecci´on. Dicho modelo sin embargo tiene algunos defectos. El tiempo de computaci´on puede llegar a ser demasiado alto, no dejandonos trabajar. Ademas, y algo muy importante en lo que a pr´actica respecta, es que al a˜nadir un nuevo vector (en este caso un nuevo documento) se tendr´ıan que recalcular todos los vectores. 1.2.3. Modelo de grafo Un grafo es una combinaci´on de nodos y aristas. Los nodos representan diferentes objetos mientras que las aristas representan cierta conexi´on entre ellos. M´as concretamente diremos que un grafo es un par G=(V,E) donde V es el conjunto de nodos y E el de aristas tal que E⊆[V]2. Se trata de un modelo que nos representa de forma id´onea procesos de la vida real como conexiones de usuarios.
18 CAP´ ITULO 1. TRATAMIENTO DE LOS DATOS Podemos clasificar los grafos en dos grandes grupos, los direccionados y no direccionados, bas´andonos en el tipo de aristas que lo compongan: Grafos no direccionados: Las aristas que componen estos grafos no tienen orientaci´on. A la hora de modelizar situaciones las relaciones entre nodos siempre ser´an bilaterales. Grafos direccionados: Dichos grafos son los que contienen aristas orientadas, es decir, que las relaciones o conexiones entre nodos no tienen por qu´e ser rec´ıprocas. Es un modelo muy interesante para representar los follows o seguimientos entre cuentas en twitter ya que un usuario puede seguir a otro sin que este siga al primero. Un concepto importante en los modelos de grafos es la matriz de adyacencia. Esta es una matriz v×v, donde v=|V|, en la que se pone de manifiesto la existencia o no de aristas entre v´ertices o nodos representando entonces un grafo de forma un´ıvoca. Para grafos no dirigidos la componente ij es igual a 1 si los nodos i y j est´an relacionados y 0 en caso contrario, siendo entonces una matriz sim´etrica. Por otro lado para grafos dirigidos la componente ij ser´a igual a 1 si existe una arista que vaya del nodo i al j y 0 en caso contrario. Grafos de Twitter Como hemos comentado podemos definir un grafo dirigido en el cual los nodos sean los propios usuarios y las aristas la acci´on de seguir. Es decir, si seguimos a un usuario existir´a una arista desde mi nodo al suyo. A modo ilustrativo vemos c´omo contruir un subgrafo que represente las relaciones que mantiene la cuenta @blog imus, cuenta oficial del Instituto de Matem´aticas de la Universidad de Sevilla, con el resto de usuarios. > # Cargamos librerias requeridas > library("twitteR") > library("igraph") > # Obtiene el usuario, puede ser el tuyo o cualquier otro de > # twitter > user <-getUser("blog_imus")
1.2. ORGANIZACI ´ ON DE LOS DATOS 19 > # Obtiene IDs de amigos y seguidores > friends.object <-lookupUsers(user$getFriendIDs()) > followers.object1 <-lookupUsers(user$getFollowerIDs()) > followers.object<-followers.object1[1:50] > # Obtiene los nombres de amigos y seguidores > # Se puede limitar el nombre de amigos y seguidores a visualizar, > # ajustando las variables n y m > # Si dichas variables no tienen nada, el m´aximo de amigos y > # seguidores se desplegar´a > > #n <-length(friends.object) > n=20 > #m <-length(followers.object) > m=30 > friends <- sapply(friends.object[1:n],name) > followers <- sapply(followers.object[1:m],name) > # Crea un dataframe con relaciona los amigos y seguidores > # al usuario > relations <- merge(data.frame(User= ' imus ' , Follower=friends), + data.frame(User=followers, Follower= ' imus ' ), all=T) > # Crea un grafo de las relaciones > g <- graph.data.frame(relations, directed = T) > # Asigna las etiquetas (nombres) al grafo > V(g)$label <- V(g)$name > # Dibuja el grafo usando tkplot(), el cual es muy ´util para la > # manipulaci´on descriptiva del grafo > #Arreglar estos plots luego meterlos en el latex > tkplot(g) [1] 1 > plot(g)
20 CAP´ ITULO 1. TRATAMIENTO DE LOS DATOS > set.seed(3) > layout1<-layout.fruchterman.reingold(g) > #Vemos una representaci´on distinta: > plot(g,layout=layout1)
Cap´ıtulo 2 An´alisis de frecuencia El an´alisis de frecuencia, en este caso de t´erminos o palabras, es una de las t´ecnicas m´as b´asicas y usuales en lo que miner´ıa de datos se refiere. Introduciremos el concepto de matriz t´ermino-documento veremos un ejemplo de su uso en la composici´on de un wordcloud. 2.1. Matriz t´ermino-documento Una matriz de t´ermino-documento representa la relaci´on entre t´erminos y documentos, en nuestro caso palabras y tweets. Cada fila corresponde a un t´erminos y cada columna a un documento. El conjunto de t´erminos que conforman las filas de esta matriz se guardan en un corpus. Pueden usarse como corpus desde un conjunto de palabras que deseamos buscar espec´ıficamente, el propio diccionario de una o varias lenguas hasta uno compuesto por el conjunto de palabras de todos los documentos de la colecci´on que estemos estudiando. Por lo tanto el valor de ti,j corresponde al n´umero de ocurrencias del t´ermino i en el documento j, donde T=(ti,j) es la matriz t´ermino-documento. Ilustramos a continuaci´on la construcci´on de un corpus y la matriz t´erminodocumento(tdm) de un subconjunto de los tweets de Donald Trump en su cuenta @realDonaldTrump obtenidos en Febrero de 2017. > #tweets = userTimeline("realDonaldTrump",n=3200) > load("Trump.RData") > length(tweets) 21
22 CAP´ ITULO 2. AN ´ ALISIS DE FRECUENCIA [1] 756 Cabe comentar que aunque hayamos especificado que queremos 3200 mensajes ha cargado bastantes menos, seguramente por temas de la conexi´on API. > #Volcamos los datos en un data frame > df <- twListToDF(tweets) > ##Creaci´on de un corpus: > library(tm) > # Hacemos uso de la funci´on Corpus del paquete tm > myCorpus <- Corpus(VectorSource(df$text)) > # Borramos URLs > removeURL <- function(x) gsub("http[^[:space:]]*", "", x) > myCorpus <- tm_map(myCorpus, content_transformer(removeURL)) > # Borramos cualquier otra cosa que palabras en ingl´es > # y espacios en blanco > removeNumPunct <- function(x) gsub("[^[:alpha:][:space:]]*", "", x) > myCorpus <- tm_map(myCorpus, content_transformer(removeNumPunct)) > # Borramos palabras vacias de significado (en ingl´es stopwords) > myStopwords <- c(setdiff(stopwords( ' english ' ), c("a", "my","i")), + "use","if","the","a","i","you","it","", "see", "used", "via", "amp") > myCorpus <- tm_map(myCorpus, removeWords, myStopwords) > # Borramos los espacios en blanco extras > myCorpus <- tm_map(myCorpus, stripWhitespace) > # Hacemos una copia del corpus por si luego se quiere > # modificar aparte > myCorpusCopy <- myCorpus Ahora que hemos construido el corpus pasamos a la matriz tdm > tdm <- TermDocumentMatrix(myCorpus, + control = list(wordLengths = c(1, Inf))) > m <- as.matrix(tdm) > #Calculamos la frecuencia de las palabras y las > # ordenamos en funci´on de esto > wordFreq <- function(corpus, word) { + results <- lapply(corpus, + function(x) { grep(as.character(x), pattern=paste0("\\<",word)) }
2.2. WORDCLOUD 23 + ) + sum(unlist(results)) + } > term.freq <- rowSums(as.matrix(tdm)) > term.freq <- subset(term.freq, term.freq >= 2) > freq.df <- data.frame(term = names(term.freq), freq = term.freq) 2.2. Wordcloud Despues de haber construido esta matriz de frecuencia de t´erminos podemos visualizar la importancia de cada uno de ellos mediante una nube de palabras(o en ingl´es wordcloud). En esta los t´erminos m´as frecuentes se agrupan en una especie de nube bidimensional en la que el tama˜no de cada t´ermino indica su importancia o frecuencia. Podemos ver un ejemplo con la cuenta del nuevo presidente de EEUU Donald Trump para ver de qu´e ha hablado m´as en su cuenta @realDonaldTrump. Con este fin haremos uso del paquete wordcloud [6]. Despu´es de calcular una ordenaci´on de las palabras por frecuencias hacemos uso de la funci´on wordcloud, que comparte nombre con el paquete al que pertenece. > library(wordcloud) > library(tmap) > library(RColorBrewer) > #La frecuencia total de las palabras en el conjunto > # total de mensajes se obtiene sumando por filas > # en la matriz de ocurrencias. > word.freq <- sort(rowSums(m), decreasing = T) > # pal es para definir qu´e colores usar > pal <- brewer.pal(9, "BuGn")[-(1:4)] > wordcloud(words = names(word.freq),max.words =100, + freq = word.freq, min.freq = 3, + random.order = F, colors = pal)
24 CAP´ ITULO 2. AN ´ ALISIS DE FRECUENCIA En dicha representaci´on podemos observar t´erminos involucrados en la campa˜na electoral que Trump desarroll´o para las ´ultimas elecciones, en las que sali´o electo, como por ejemplo: Obamacare: seguro m´edico que Obama quiso implantar, ya que en EEUU no hay nada an´alogo a la Seguridad Social de Espa˜na. Hillary y Clinton: son el nombre y apellido de su rival directa en la votaci´on final. No es de extra˜nar que haya hablado mucho de ella. M´exico: est´a siendo un tema muy pol´emico el del requerimiento de una muralla con M´exico. As´ı como palabras de uno de sus mayores esloganes, ”Make America Great Again”.
Cap´ıtulo 3 Clustering Un algoritmo de agrupamiento, o clustering en ingl´es, es como su nombre indica, una t´ecnica para la organizaci´on y clasificaci´on de los datos. Una de las mayores ventajas de su uso es que no necesita informaci´on previa para sacar conclusiones. Por esta raz´on, el clustering ha sido usado tradicionalmente consider´andose una t´ecnica de aprendizaje no supervisado. Sin embargo, tambien existen m´etodos y algoritmos que admiten gu´ıas o ajustes. El an´alisis cluster es un conjunto de t´ecnicas multivariantes utilizadas para clasificar a un conjunto de individuos en grupos homog´eneos. Pertenece, al igual que otras tipolog´ıas y que el an´alisis discriminante al conjunto de t´ecnicas que tiene por objetivo la clasificaci´on de los individuos. La diferencia fundamental entre el an´alisis cluster y el discriminante reside en que en el an´alisis cluster los grupos son desconocidos a priori y son precisamente lo que queremos determinar; mientras que en el an´alisis discriminante los grupos son conocidos y lo que pretendemos es saber en qu´e medida las variables disponibles nos discriminan esos grupos y nos pueden ayudar a clasificar o asignar los individuos en/a los grupos dados. Se trata, fundamentalmente, de resolver el siguiente problema: Dado un conjunto de N individuos caracterizados por la informaci´on de n variables {Xj}j=1,2,...,n, nos planteamos el reto de ser capaces de clasificarlos de manera que los individuos pertenecientes a un grupo (cluster) (y siempre con respecto a la informaci´on disponible) sean tan similares entre s´ı como sea posible, siendo los distintos grupos entre ellos tan disimilares como sea posible. 25
32 CAP´ ITULO 3. CLUSTERING 1 0.150 0.050 0.100 0.000 0 0.000 0.000 0.000 0.000 0.000 0.100 2 0.143 0.143 0.000 1.000 0 0.000 0.714 0.000 0.143 0.714 0.000 3 0.000 0.000 0.000 0.000 0 0.000 0.000 0.000 0.333 0.667 0.000 4 0.000 0.000 0.000 0.667 1 0.167 1.000 0.000 0.333 0.833 0.000 5 0.000 0.250 0.083 0.000 0 0.167 0.000 0.000 0.000 0.083 0.083 6 0.105 1.053 0.105 0.000 0 0.105 0.000 0.158 0.105 0.000 0.158 7 0.077 0.000 0.038 0.000 0 0.058 0.000 0.077 0.019 0.000 0.096 macronleaks media now obama today trump us vault vote wikileaks 1 0.150 0.100 0.100 0.000 0.000 0.050 0 0.000 0.000 1.050 2 0.000 0.000 0.000 0.000 0.000 0.286 0 0.000 0.000 0.429 3 0.000 0.000 0.000 1.000 1.000 0.333 0 0.000 0.000 0.333 4 0.000 0.000 0.500 0.000 0.000 0.000 0 0.000 0.000 0.000 5 0.083 0.000 0.083 0.000 0.167 0.000 1 0.000 0.000 0.417 6 0.000 0.053 0.000 0.158 0.053 0.053 0 0.263 0.053 0.000 7 0.231 0.077 0.077 0.000 0.000 0.019 0 0.038 0.096 0.000 > #Revisamos tres primeras palabras de cada cluster > for (i in 1:k) { + cat(paste("cluster ", i, ": ", sep="")) + s <- sort(kmeansResult$centers[i,], decreasing=T) + cat(names(s)[1:3], "\n") + # Imprimir tweets de cada cluster + # print(rdmTweets[which(kmeansResult$cluster==i)]) + } cluster 1: wikileaks assange macronleaks cluster 2: comey fbi james cluster 3: obama today james cluster 4: director fbi james cluster 5: us wikileaks cia cluster 6: cia vault french cluster 7: macronleaks macron vote Con esto podemos determinar que existen un par de temas con mayor importancia: mensajes sobre Emmanuel Macron, el nuevo presidente de Francia y sobre James Comey, el s´eptimo director del FBI de US.
3.2. M´ ETODOS PARTICIONALES 33 3.2.2. M´etodo k-medoids En este m´etodo de k-medoids o k-mediodes se buscan k puntos representativos de k conglomerados, llamados mediodes, de que modo que la suma de las distancias de los puntos a su mediode m´as cercano sea m´ınima. Es decir, la funci´on objetivo ser´a: m´ın m1,...,mk n X i=1 m´ın t=1,...,k d(i, mt) Cada caso ser´a entonces asignado al mediode m´as cercano, formando as´ı k clusters. Se trata de un m´etodo m´as robusto que el k-means ya que es menos sensible a casos at´ıpicos. > ##Algor´ıtmo de k-medoids > library(fpc) > # Estimar el n´umero de grupos > pamResult <- pamk(m3, metric="manhattan") > #pamk devuelve: un objeto pam, el n º ´optimo > # de grupos y p-values del test Duda-Hart. > > pamResult$pamobjec Medoids: ID assange cia cias comey director election fbi french full james macron 5 5 0 0 0 1 1 0 1 0 0 1 0 117 117 0 0 0 0 0 0 0 0 0 0 0 118 118 0 0 0 0 0 0 0 0 0 0 0 115 115 0 1 0 0 0 0 0 0 0 0 0 59 59 0 0 0 0 0 0 0 0 0 0 0 36 36 0 1 0 0 0 1 0 1 0 0 1 86 86 0 0 1 0 0 0 0 0 1 0 0 macronleaks media now obama today trump us vault vote wikileaks 5 0 0 0 0 0 0 0 0 0 0 117 0 0 0 0 0 0 0 0 0 0 118 0 0 0 0 0 0 0 0 0 1 115 0 0 0 0 0 0 0 0 0 0 59 1 0 0 0 0 0 0 0 0 0
34 CAP´ ITULO 3. CLUSTERING 36 0 0 0 1 0 0 0 0 0 0 86 0 0 0 0 0 0 0 1 0 0 Clustering vector: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 12311111111143244452 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 52222233222336565222 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 25353522253555655552 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 22427434244463322344 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 34222774433242222333 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 4432222323226242234 Objective function: build swap 1.0000000 0.9915966 Available components: [1] "medoids" "id.med" "clustering" "objective" "isolation" [6] "clusinfo" "silinfo" "diss" "call" "data" > #PAM:Partitioning Around Medoids. > #El objeto pam contiene: centroides, id de los > #centroides, el vector que indica a que grupo > #pertence cada t´ermino, el valor de la funci´on > #objetivo despu´es del primer y segundo paso del algor´ıtmo. > #Available components te indica que m´as informaci´on > #puedes saber del objeto pam: > #https://stat.ethz.ch/R-manual/R-devel/library/ > #cluster/html/pam.object.html. > > #El n º ´optimo de grupos > k <- pamResult$nc > k [1] 7
3.2. M´ ETODOS PARTICIONALES 35 > #P-values test Duda-Hart: indica el n º posible de grupos. > #En este caso, el mayor p-value es el segundo. > #La hip´otesis nula se refiere a considerar homogeneidad > #con 1 grupo, con 2,... > > pamResult$crit [1] 0.0000000 0.2442855 0.2826291 0.3271309 0.3205107 0.3558933 0.3702369 [8] 0.3687245 0.3650473 0.3690415 > pamResult <- pamResult$pamobject > pamResult Medoids: ID assange cia cias comey director election fbi french full james macron 5 5 0 0 0 1 1 0 1 0 0 1 0 117 117 0 0 0 0 0 0 0 0 0 0 0 118 118 0 0 0 0 0 0 0 0 0 0 0 115 115 0 1 0 0 0 0 0 0 0 0 0 59 59 0 0 0 0 0 0 0 0 0 0 0 36 36 0 1 0 0 0 1 0 1 0 0 1 86 86 0 0 1 0 0 0 0 0 1 0 0 macronleaks media now obama today trump us vault vote wikileaks 5 0 0 0 0 0 0 0 0 0 0 117 0 0 0 0 0 0 0 0 0 0 118 0 0 0 0 0 0 0 0 0 1 115 0 0 0 0 0 0 0 0 0 0 59 1 0 0 0 0 0 0 0 0 0 36 0 0 0 1 0 0 0 0 0 0 86 0 0 0 0 0 0 0 1 0 0 Clustering vector: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 12311111111143244452 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 52222233222336565222 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 25353522253555655552 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80
36 CAP´ ITULO 3. CLUSTERING 22427434244463322344 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 34222774433242222333 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 4432222323226242234 Objective function: build swap 1.0000000 0.9915966 Available components: [1] "medoids" "id.med" "clustering" "objective" "isolation" [6] "clusinfo" "silinfo" "diss" "call" "data" > # Imprimir los centroides > pamResult$medoids Terms Docs assange cia cias comey director election fbi french full james macron 5 0 0 0 1 1 0 1 0 0 1 0 117 0 0 0 0 0 0 0 0 0 0 0 118 0 0 0 0 0 0 0 0 0 0 0 115 0 1 0 0 0 0 0 0 0 0 0 59 0 0 0 0 0 0 0 0 0 0 0 36 0 1 0 0 0 1 0 1 0 0 1 86 0 0 1 0 0 0 0 0 1 0 0 Terms Docs macronleaks media now obama today trump us vault vote wikileaks 5 0 0 0 0 0 0 0 0 0 0 117 0 0 0 0 0 0 0 0 0 0 118 0 0 0 0 0 0 0 0 0 1 115 0 0 0 0 0 0 0 0 0 0 59 1 0 0 0 0 0 0 0 0 0 36 0 0 0 1 0 0 0 0 0 0 86 0 0 0 0 0 0 0 1 0 0 > for (i in 1:k) { + cat(paste("cluster", i, ": ")) + cat(colnames(pamResult$medoids)
3.2. M´ ETODOS PARTICIONALES 37 + [which(pamResult$medoids[i,]==1)], "\n") + } cluster 1 : comey director fbi james cluster 2 : cluster 3 : wikileaks cluster 4 : cia cluster 5 : macronleaks cluster 6 : cia election french macron obama cluster 7 : cias full vault > # Gr´afico > > par(mfrow=c(1,2)) > plot(pamResult, color=F, labels=4, + lines=0, cex=.8, col.clus=1, + col.p=pamResult$clustering) > #Para cada observaci´on i, el ancho de silueta s(i) > #se define de la siguiente manera: > #a(i) = disimilitud media entre i y todos los > # dem´as puntos del grupo al que i pertenece. > #Para todos los otros grupos C, poner d(i, C) > #= disimilaridad media de i a todas las observaciones de C. > #El menor de estos d(i, C) es b(i) y puede > #verse como la disimilitud entre i y su agrupaci´on > #"vecina", es decir, la m´as cercana a la que no pertenece. > #Por tanto, > #s(i) := ( b(i) - a(i) ) / max( a(i), b(i) ). > #Las observaciones con una gran s(i) (casi 1) > #est´an muy bien agrupadas, > #una peque~na s(i) (alrededor de 0) significa > q#ue la observaci´on se encuentra entre dos grupos, function (save = "default", status = 0, runLast = TRUE) .Internal(quit(save, status, runLast)) <bytecode: 0x000000003b79ea58> <environment: namespace:base> > #y las observaciones con un negativo s(i) > #est´an en un grupo incorrecto.
38 CAP´ ITULO 3. CLUSTERING > > library(cluster) > summary(silhouette(pamResult)) #RStudio no dibuja la silueta Silhouette of 119 units in 7 clusters from pam(x = sdata, k = k, diss = diss, metric = "manhattan") : Cluster sizes and average silhouette widths: 10 43 23 20 15 5 3 0.3393578 0.5097617 0.2418872 0.2478013 0.3284608 0.3114018 0.5805029 Individual silhouette widths: Min. 1st Qu. Median Mean 3rd Qu. Max. -0.1163 0.2467 0.3515 0.3702 0.5001 0.7261 Podemos ver primero un gr´afico de 2 dimensiones (2 componentes principales) las distribuci´on de los puntos, que representan cada uno de los mensajes, y su agrupamientos en clusters con recintos en forma de elipses. Por otra parte vemos tambien el gr´afico de barras que representa la distancia entre mensaje y grupos. 3.3. M´etodos jer´arquicos Los m´etodos jer´arquicos de clustering persiguen contruir una estructura del conjunto de puntos estableciendo una jerarqu´ıa entre grupos. Podemos decir entonces que dichos m´etodos se dividen en dos grandes grupos: aglomerativos y divisivos. Mientras que los primeros van de una mayor a menor homogeneidad los segundos se establecen al contrario, de menor a mayor homogeneidad. Pero no solo nos referimos a la cuesti´on est´etica de la orientaci´on
3.3. M´ ETODOS JER ´ ARQUICOS 39 del ´arbol obtenido sino que el algoritmo utilizado es basicamente distinto. b´asicamente en los del tipo aglomerativo cada observaci´on comienza en su propio cluster y posteriormente los pares de grupos van siendo mezclados conforme se sube en la jerarqu´ıa. A diferencia de los del tipo anterior los divisivos comienzan con todos los puntos en un ´unico cluster, el cual se va diviendo conforme bajamos niveles de jerarqu´ıa Los dendrogramas se usan para la representaci´on en forma de ´arbol de la jerarqu´ıa de los clusters anteriormente obtenida. En esta, las sucesiones fusiones de ramas a distintos niveles nos indican el grado de homogeneidad que comparten teniendo en cuenta que a mayor nivel menor homogeneidad. Permite apreciar muy bien las relaci´on de agrupaci´on entre individuos aunque en contra no se apreciar´a bien las relaciones de cercan´ıa o similaridad entre categor´ıas o grupos. 3.3.1. Algoritmo aglomerativo Para describir este algoritmo usaremos el concepto de matriz de proximidad entre clusters. Sea {C1, ..., Ck}un conjunto de k clusters se define la matriz de proximidad de dicho conjunto como MP= [mi,j] con mi,j =D(Ci,Cj) y D(Ci,Cj) la distancia entre cluster anteriormente descrita. Cabe destacar que dicha matriz es sim´etrica y de diagonal 0. Pasamos a describir entonces el algoritmo: 1. Comenzamos con N clusters formados por las N palabras o puntos. Calculamos la matriz de proximidad para estos; NA 2. Actualizamos la matriz de proximidad entre clusters; 3. Repetimos los pasos 2 y 3 hasta que nos quede un ´unico cluster. En el caso general la complejidad del algoritmo ser´a de O(N3), lo cual ya es bastante intenso computacionalmente.
40 CAP´ ITULO 3. CLUSTERING Uni´on de clusters Como hemos observado en el paso 2 del algoritmo anterior la uni´on de los clusters es lo que determina la estructura final. Es por esto que depende entonces de la definici´on de distancia entre clusters. Procederemos a explicar e ilustrar las distancias que dan lugar a los m´etodos m´as usuales. 1. Ward: Con este se pretende determinar conglomerados esf´ericos. Ward argument´o que los conglomerados deb´ıan contruirse de tal forma que la p´erdida de informaci´on al fundirse dos clusters fuera m´ınima. Dicha cantidad de informaci´on se cuantifica como la suma de las distancias al cuadrado de cada elemento respecto del centroide de su cluster. Por lo tanto en casa paso se unir´an los clusters que den lugar a un menor incremento de la SCE, la cual se define como: SCE = k X g=1 X i∈g |xi−mi|2=tr(W) donde k es el n´umero de clusters, sumi∈g(xi) se refiere al sumatorio de todos los vectores que pertenecen al cluster, miel centroide del cluster o conglomerado i y W la matriz de suma de cuadrados y productos dentro de los grupos. 2. Single: est´a muy relacionado con el problema del m´ınimo ´arbol de uni´on (minimal spanning tree) y es sensible a posibles encadenamientos. La medida de distancias entre los clusters ClyCij (donde el cluster Cij el que resulta de la uni´on de CiyCj)que define el m´etodo viene dada por: D(Cl,Cij) = min(D(Cl,Ci), D(Cl,Cj)) 3. Complete: busca formar cluster cuyos elementos sean muy parecidos entre si. La distancia se forma de manera hom´ologa al m´etodo single, pero con el max: D(Cl,Cij) = max(D(Cl,Ci), D(Cl,Cj)) 4. Average (WPGMA): la distancia se define como el promedio de la distancia entre los grupos de puntos que van formando cada cluster, es decir: D(Cl,Cij) = 1 2(D(Cl,Ci) + D(Cl,Cj))
3.3. M´ ETODOS JER ´ ARQUICOS 41 5. Weighted average (WPGMA): la idea es la similara la del m´etodo anterior, solo que le otorgamos pesos en funci´on de la cantidad de puntos de cada cluster a la hora de hacer el promedio, es decir: D(Cl,Cij) = ni ni+nj D(Cl,Ci) + nj ni+nj D(Cl,Cj) donde nies el n´umero de puntos que contiene el cluster i. 6. Centroid (UPGMC): este m´etodo basa la uni´on de los clusters en funci´on de sus centroides. Puede producir inversiones(distancias de uni´on que son menores en una etapa que en la anterior) lo cual dificulta la interpretaci´on. Es por ellos que definiremos la distancia entre clusters como: D(Cl,Cij) = |ml−mij|2 7. Median (WPGMC)= Es similiar a la anterior, siendo la distancia definida como: D(Cl,Cij) = 1 2D(Cl,Ci) + 1 2D(Cl,Cj)−1 4D(Ci,Cj) Pasamos entonces a ilustrarlo de nuevo con los datos de la cuenta @wikileaks. Se observa que el m´etodo usado se elige en el par´ametro method de la funci´on hclust: > #Creaci´on de grupos > distMatrix <- dist(scale(m2)) #Distancias entre los t´erminos tipificados > fit <- hclust(distMatrix, method="ward.D") #Se hacen clusters. > plot(fit)#Dendrograma > fitcomp <- hclust(distMatrix, method="complete") > plot(fitcomp)#Dendrograma > fitsingle <- hclust(distMatrix, method="single") > plot(fitsingle)#Dendrograma > fitmedian <- hclust(distMatrix, method="median") > plot(fitmedian)#Dendrograma > fitaver <- hclust(distMatrix, method="average") > plot(fitaver)#Dendrograma > fitcentroid <- hclust(distMatrix, method="centroid") > plot(fitcentroid)#Dendrograma > fitmc <- hclust(distMatrix, method="mcquitty") > plot(fitmc)#Dendrograma
48 CAP´ ITULO 4. AN ´ ALISIS DE SENTIMIENTOS nes en intenci´on de voto en elecciones pol´ıticas. El equipo de Barack Obama se centr´o bastante en estos estudios, llegando incluso a impulsar las investigaciones en este campo. 4.1. An´alisis de polaridad En esta secci´on estaremos interesados en saber si un comentario es positivo o negativo, es decir, en conocer su polaridad. De esta forma no estaremos analizando en s´ı el sentimiento del mensaje o documento sino que simplemente le asignaremos una puntuaci´on en funci´on de las palabras utilizadas. Esto hace que, por ejemplo, no sea capaz de reconocer una iron´ıa asignandole una puntuaci´on positiva cuando el usuario estaba realizando una cr´ıtica. Dicha puntuaci´on se realizar´a en base a dos grandes bases de datos, una de palabras que normalmente se utilizan en un sentido positivo y otro para las utilizadas negativamente. Est´a claro que dichas bases de datos son una parte fundamental del proceso, afectando directamente al resultado. Es por esto que para ilustrarlo con un ejemplo usaremos las listas almacenadas en ”positive.RData 2 ”negative.RData”, las cuales est´an en ing´es y son utilizadas para estudios internacionales. Una vez cargadas estas bases procedemos a puntuar cada uno de los documentos. Se recorrer´a cada mensaje palabra a palabra observando las ocurrencias de dichas palabras en las listas de positivas y negativas. Por cada palabra que aparezca en la base de las positivas otorgaremos un punto a la puntuaci´on mientras que para cada una que aparezca en las negativas restaremos un punto a la puntuaci´on. Finalmente obtenemos un an´alisis del conjunto de mensajes o tweets, an´alizando la puntuaci´on de cada uno y obteniendo su media, mediana e histograma.
4.1. AN ´ ALISIS DE POLARIDAD 49 4.1.1. Aplicaci´on Con motivo de la pol´emica que causa la corrupci´on de dirigentes pol´ıticos en Espa˜na nos proponemos estudiar la opini´on de usuarios angloparlantes respecto del tema. Recogeremos los mensajes que contienen las palabras ”Spain 2 ¸corruption”, es espa˜nol Espa˜na y corrupci´on y analizaremos los resultados de polaridad. > #spcorruption<-searchTwitter("Spain+corruption",n=3000, lang="en") > #save(file="spcorruption.RData",spcorruption) > load("spcorruption.RData") > length(spcorruption) [1] 455 > tweets.text = sapply(spcorruption, function(t)t$getText()) > pos = scan("positive.txt", what="character",comment.char=";") > neg = scan("negative.txt", what="character",comment.char=";") > score.sentiment = + function(sentences, pos.words, neg.words, .progress="none") + { + library(plyr) + library(stringr) + # we want a simple array of scores back, + #so we use "l" + "a" + "ply" = laply: + scores = laply(sentences, function(sentence, pos.words, neg.words) { + # clean up sentences with R ' s regex-driven global substitute, gsub(): + sentence = gsub("[[:punct:]]", '' , sentence) + sentence = gsub("[[:cntrl:]]", '' , sentence) + sentence = gsub("\\d+", '' , sentence) + # and convert to lower case: + sentence = tolower(sentence) + + # split into words. str_split is in the stringr package + word.list = str_split(sentence, "\\s+") + # sometimes a list() is one level of hierarchy too much + words = unlist(word.list) + + # compare our words to the dictionaries of positive & negative terms
50 CAP´ ITULO 4. AN ´ ALISIS DE SENTIMIENTOS + pos.matches = match(words, pos.words) + neg.matches = match(words, neg.words) + # match() returns the position of the matched term or NA + # we just want a TRUE/FALSE: + pos.matches = !is.na(pos.matches) + neg.matches = !is.na(neg.matches) + + # and conveniently enough, TRUE/FALSE will be treated as 1/0 by sum(): + score = sum(pos.matches)-sum(neg.matches) + + return(score) + }, pos.words, neg.words, .progress=.progress ) + + scores.df = data.frame(score=scores, text=sentences) + return(scores.df) + } > analysis = score.sentiment(tweets.text, pos, neg, .progress="none") > table(analysis$score) -3 -2 -1 0 1 10 263 144 20 18 > mean(analysis$score) [1] -1.498901 > median(analysis$score) [1] -2 > hist(analysis$score)
4.2. ALGORITMOS DE CLASIFICACI ´ ON 51 Con esto vemos que los mensajes relativos a la corrupcion de Espa˜na no han sido nada positivos. Esto se debe al gran n´umero de casos que sufrieron las instituciones p´ublicas en los ´ultimos a˜nos. Se comprueba entonces que ha habido una difusi´on en medios internacionales de dichos problemas pues hemos tomado tweets en ingl´es. Resultando una media de -1.4 aproximadamente y observando dicho histrograma definitivamente deberiamos plantearnos un problema de opini´on p´ublica aqu´ı. 4.2. Algoritmos de clasificaci´on Tal y como se ha dicho anteriormente los m´etodos de clasificaci´on tienen gran importancia en lo que a an´alisis de sentiemientos respecta. Es por esto explicaremos la base matem´aticas de tres de los algoritmos de clasificaci´on m´as importantes hasta el momento. Introduciremos despu´es una aplicaci´on de estos y una propuesta para estudios posteriores.
52 CAP´ ITULO 4. AN ´ ALISIS DE SENTIMIENTOS 4.2.1. Clasificador Naives-Bayes Constituye una t´ecnica supervisada en la cual a partir de un conjunto de datos de entrenamiento lograremos realizar predicciones para nuevas entradas de datos test. Se trata de un m´etodo de clasificaci´on basado en uno de los teoremas m´as famosos del matem´atico Thomas Bayes. Recordamos que este se utiliza para calcular la probabilidad de algo en base a probabilidades anteriormente calculadas. Dicho teorema dice que la probabilidad de que ocurra el suceso A dada la ocurrencia del suceso B se determina como sigue: P(A|B) = P(B|A)P(A) P(B)(4.2.1) El t´ermino naives que usualmente se incluye en el nombre del m´etodo hace referencia al t´ermino ¨ ıngenuo”. Esto se debe a que estamos suponiendo la independencia entre las variables predictoras, entre algunas otras hip´otesis simplificadoras. Para el caso concreto del an´alisis de sentimientos dicho teorema nos ser´a de verdadera ayuda incluyendo cada documento d dentro de la clase C donde se maximice P(d|C). Es decir, incluimos cada mensaje en la clase que m´as probabilidad tenga de incluirlo. 4.2.2. Support Vector Machine Las SVMs, en espa˜nol m´aquinas de vectores soporte, son un conjunto de algoritmos de aprendizaje supervisado[4]. Tienen su origen en el estudio del aprendizaje estad´ıstico que desarrollaba Vladimir Vapnik y su equipo de los laboratorios AT&Tsobre los a˜nos 90 del siglo pasado. En la actualidad son usadas para todo tipo de problemas multivariantes como la regresi´on, sin embargo, fueron originalmente pensadas para clasificaci´on binaria. El objetivo principal de las SVMs es encontrar un hiperplano que separe de forma ´optima el conjunto de datos a tratar en dos grupos. Dicho concepto de separaci´on ´optima consiste en buscar el hiperplano que tenga la m´axima distancia con los puntos que est´en m´as cerca de ´el mismo. Es por esto que es com´un la denominaci´on hom´ologa de clasificador de margen m´aximo.
4.2. ALGORITMOS DE CLASIFICACI ´ ON 53 Recordamos que en un espacio p-dimensional un hiperplano se define por la ecuaci´on: β0+β1X1+· · · +βpXp= 0 (4.2.2) Supongamos que tenemos una matriz de datos, a los cuales se les suele denominar como de entrenamiento, Xde dimensiones n×pconsistente en n observaciones p-dimensionales, x1= x11 . . . x1p ,· · · , xn= xn1 . . . xnp (4.2.3) las cuales pertenecen a alguna de dos clases. Es decir, le asignamos una etiqueta de clase y1,· · · , yn∈ {−1,1}, donde -1 representa una clase y 1 otra. De esta forma: β0+β1xi1+· · · +βpxip >0si yi= 1 y β0+β1xi1+· · · +βpxip <0si yi=−1 Por lo tanto ∀i= 1,· · · , p se tiene que: yi(β0+β1xi1+· · · +βpxip)>0 (4.2.4) En base a esto clasificaremos una nueva observaci´on x∗= (x∗ 1,· · · , x∗ p)T seg´un el signo de la funci´on f(x∗) = β0+β1x∗ 1+· · · +βpx∗ p. Cabe destacar que cuanto m´as cercano sea el valor de f(x∗) a 0 m´as posible es que estemos realizando una mala clasificaci´on. Es por esto que se suele utilizar tambien la magnitud de esta funci´on como indicadora de la probabilidad de estar realizando una buena clasificaci´on. Nos planteamos entonces la construcci´on de dicho hiperplano, teniendo que determinar los par´ametros. Estos son resultado del problema de optimizaci´on: m´ax β0,··· ,βp M sujeto a p X i=0 β2 i= 1,
54 CAP´ ITULO 4. AN ´ ALISIS DE SENTIMIENTOS yi(β0+β1xi1+· · · +βpxip)> M 4.2.3. Clasificador de m´axima entrop´ıa A diferencia dekl m´etodo de Naives -Bayes no presupondremos independencia entre las caracter´ısticas o t´erminos. La idea b´asica es que la probabilidad de que un documento pertenezca a una clase debe maximizar la entrop´ıa de clasificaci´on, no introduciendo un sesgo en el sistema que estemos analizando. De esta forma lo primero que se har´a es definir fcomo una funci´on binaria que nos indicar´a si en cierto documento docurre una cierta clase cy si est´a presente un cierto t´ermino w. Es decir, f(d, c) = 1ci=c, wk∈d 0c.c. As´ı, la probabilidad de que un documento pertenezca a cierta clase viene dada por: P(cj|d) = 1 Z(d)exp(X i λif(d, cj)) donde Z(d) es una constante de normalizaci´on que se obtiene al sumar sobre todos los P(cj|d) para todas las clases cjyλidebe satisfacer las condiciones del sistema donde las caracter´ısticas observadas para un valor observado en el universo sea igual a la esperada en el conjunto de entrenamiento que le proporcionemos al algoritmo. Al igual que para Naives-Bayes incluiremos el documento den la clase c que maximice P(cj|d). Aplicaci´on Una opci´on interesante que se pod´ıa utilizar para el an´alisis de sentimientos es mediante la utilizaci´on del paquete sentiment de R creado por Timothy Jurka. V´ease [10], en el que se dice .Este paquete utiliza un clasificado naive Bayes entrenado sobre un l´exico de emociones y otro para la subjetividad de
4.2. ALGORITMOS DE CLASIFICACI ´ ON 55 los textos...” La funci´on que nos interesa de este paquete es la de classify emotion, la cual permite identificar cualquier mensaje en alguno de los siguientes sentimientos:enfado, disgusto, miedo, alegr´ıa, tristeza y sorpresa. Sin embargo, desde el 2014 esta librer´ıa no est´a disponible por requerimiento de su mantenedor. Despu´es de buscar por nuevos paquetes y librer´ıas no se encontr´o ninguno en el que hubiese una funci´on hom´ologa, solamente encontramos funciones para el an´alisis de polaridad. Es por esto que se propone para estudios posteriores el desarrollo o aplicaci´on de funciones que realicen una verdadera clasificaci´on en sentimientos de un mensaje.
56 CAP´ ITULO 4. AN ´ ALISIS DE SENTIMIENTOS
Cap´ıtulo 5 Conclusiones En la presente memoria hemos visto diversas herramientas matem´aticas que permiten el an´alisis de redes sociales en general y Twitter en particular, as´ı en el cap´ıtulo 2, de an´alisis de frecuencia, nos planteamos dotar de una nueva estructura al conjunto de datos extraidos. Hicimos uso de la matriz de ocurrencia, cl´asica herramienta matem´atica, basada en lo que llamamos un corpus. En nuestra aplicaci´on a los tweets de Trump usamos como corpus el conjunto de palabras que conformaban los tweets. Sin embargo podemos pensar en usar otro conjunto, el cual pueda ayudarnos a sacar conclusiones m´as claras para estudios m´as espec´ıficos. El wordcloud que se hace posteriormente no hace m´as que obtener las palabras m´as frecuentes a partir de la matriz de ocurrencias y representarla. Adem´as de ser una forma interesante de representaci´on puede ser combinada con las t´ecnicas de clasificaci´on explicadas en el ´ultimo cap´ıtulo. Se recomienda leer [10] para verlo. En el cap´ıtulo 3, de clustering, cabe destacar la importancia que tiene la distancia, y por tanto la m´etrica, en las aplicaciones. En la aplicaci´on del algoritmo de k-medoids podemos ver distintos resultados cambiando el par´ametro metric en la funci´on pamk, > pamResult < −pamk(m3, metric = ”manhattan”), v´ease [11]. En la aplicaci´on del clustering jer´arquico aglomerativo, para la creaci´on de dendrogramas, tambien es clave c´omo definamos la distancia. Se ve reflejado en las figuras de los dendrogramas. Por ´ultimo hacer hincapi´e en la importancia de los m´etodos de clasifi- 57