Data Mining sobre um dataset de Câncer de Mama Fabio Luis Silva1 1 Programa de PósGraduação em Computação Aplicada da Universidade Tecnológica Federal do Paraná – Curitiba, PR – Brasil [email protected] Abstract. This paper presents a report of experiments taken on data mining subject by using the R tool over a public dataset from UCI containing breast cancer data. This report gives details on how the dataset was setup and describes how the following tasks were applied: Classification (decision tree, naïve-Bayes, MLP, SVM, k-NN), Association rules (apriori), Cluster (k-means & hierarchical) and Anomaly Detection. As a result, SVM classification appeared to be the most accurated model for the dataset; 33 rules were appointed by the Apriori algorithm; and the cluster algorithms showed that some overlapping exist between malignant and benign predictions in the studied dataset. Resumo. Este artigo apresenta um relatório de experimentos de mineração de dados utilizando a ferramenta R em uma base de dados pública da UCI, com informações sobre câncer de mama. Detalhou-se como a base de dados foi preparada para mineração e na sequência as seguintes tarefas de mineração foram aplicadas: Classificação (árvore de decisão, naïve-Bayes, MLP, SVM, k-NN), Regras de associação (a priori), Agrupamento (k-means e hierárquico) e Detecção de desvios. Como resultado, a classificação SVM mostrou-se a de melhor acurácia; 33 regras de associação foram levantadas pelo algoritmo Apriori; e os algoritmos de agrupamentos mostraram que existem algumas sobreposições entre as previsões de tumores malignos e benignos na base estudada. 1. Introdução Dados médicos normalmente são desbalanceados, o que causa sérios problemas de classificação e análise, já que fatores menos frequentes possuem grande importância, já que anormalidades podem ser mais representativas quando se tenta buscar identificar padrões fora da população dita sadia [Wang et.al 2013]. Este relatório mostra a aplicação de várias técnicas de mineração de dados (para classificação, associação, agrupamento e análise de desvios) sobre uma base pública de câncer de mama, disponível na UCI [Lichman 2013]. A mineração foi efetuada com o auxílio da ferramenta Rstudio, e o resultado é apresentado como relatório para disciplina de Data Mining, do segundo semestre de 2014, dentro do Programa de Pós-Graduação Aplicada da Universidade Tecnológica Federal do Paraná. O restante deste artigo está dividido da seguinte forma: a Seção 2 apresenta o dataset utilizado, suas características, como foi carregada no Rstudio, e como foi 1 preparada para mineração. A seção 3 traz os métodos de classificação aplicados. A seção 4 demonstra o uso da associação Apriori. Na Seção 5 apresentou-se os métodos de agrupamento e na Seção 6 a análise sobre anomalias e desvios. Finalmente na Seção 7 encontram-se as análises dos resultados e na Seção 8 a conclusão do artigo. 2. Base e Ferramenta utilizada Foi utilizado o RStudio. Esta ferramenta executa sobre a API do R (Figura 1). Figura 1. RStudio 2.1. Problema Diagnosticar preventivamente se um tumor é maligno ou benigno. 2.2. Descrição da Base Utilizada Utilizou-se os dados disponíveis no repositório da UCI (University of California Irvine, UCI Machine Learning Repository, http://archive.ics.uci.edu/ml/index.htm) com informações sobre Câncer de Mama. Este banco de dados de câncer de mama foi disponibilizado na UCI a partir da Universidade de Wisconsin Hospitais, Madison, sendo as informações doadas pelo Dr. William H. Wolberg [Wolberg et. al 1990]. As amostras foram sendo coletadas pelo Dr. Wolberg por partes, conforme os casos clínicos tratados foram sendo acumulados. O banco de dados, portanto, reflete este agrupamento cronológico dos dados [Mangasarian et.al 1992]: Grupo 1: 367 casos (Janeiro de 1989) 2 Grupo 2: 70 casos (outubro de 1989) Grupo 3: 31 casos (Fevereiro de 1990) Grupo 4: 17 casos (Abril de 1990) Grupo 5: 48 casos (Agosto de 1990) Grupo 6: 49 casos (Janeiro de 1991) Grupo 7: 31 casos (Junho de 1991) Grupo 8: 86 casos (Novembro de 1991) Total: 699 A descrição dos campos está representada no Quadro 1. Quadro 1. Base de dados sobre Câncer de Mama Núm. de Instâncias 699 Área de Pesquisa Núm. de Atributos 11 Característica dos Atributos Registros Incompletos 16 Data dos Dados Humanas Real Nov/1995 Atributos Cada instância de dado contém 9 atributos e uma classe. Os valores dos atributos são calculados (e atribuídos valores de 1 a 10) a partir da imagem digitalizada de uma amostra aspirada através de uma cânula ou agulha fina da massa de uma mama. Eles descrevem as características dos núcleos celulares presentes na imagem. Cada instância tem uma das 2 classes possíveis: benignos ou malignos, portanto os valores da classe são binários. Os termos usados como atributos são elementos dos relatórios de patologia nas amostras retiradas de um nódulo do seio para verificar se são malignos (cancerosos) ou benignos (não cancerosos). Por exemplo, as células cancerosas tendem a variar em tamanho e forma. Então, uniformidade de tamanho e formato das células da amostra apontam em uma direção benigna. Também núcleos nus (bare nuclei), cromatina branda (bland chromatin) e nucléolo normal (normal nucleoli) são sinais de benignidade. A análise do valor de cada atributo é parte de um teste triplo. Se um dos testes sugere malignidade, uma biópsia para análise histológica faz-se necessário. Os atributos são: • Espessura dos grupos (Clump Thickness): células benignas a tendem a ser agrupadas em monocamadas, enquanto que as células cancerosas são muitas vezes agrupadas em multicamadas. • Uniformidade de tamanho e forma da célula (Uniformity of Cell Size & 3 • • • • • • Uniformity of Cell Shape): As células cancerosas tendem a variar em tamanho e forma (como o exemplo mostrado na Figura 2). É por isso que esses parâmetros são úteis para determinar se as células são cancerosos ou não. Adesão Marginal (Marginal Adhesion): As células normais tendem a ficar juntas. As células cancerosas tendem a perder essa capacidade (como o exemplo mostrado na Figura 3). Então perda de adesão é um sinal de malignidade. Tamanho único das células epiteliais (Single Epithelial Cell Size): está relacionada com a uniformidade mencionado acima. As células epiteliais que estão significativamente aumentadas pode ser uma célula maligna. Núcleos nus (Bare Nuclei): Este é um termo usado para núcleos que não são rodeados pelo citoplasma (o resto da célula). São tipicamente vistos em tumores benignos. Suavidade da cromatina (Bland Chromatin): Descreve uma textura uniforme do núcleo visto em células benignas. Em células cancerosas, a cromatina tende a ser mais grosseira. Nucléolo normal (Normal Nucleoli): nucléolos são pequenas estruturas existentes no núcleo. Em células normais, o nucléolo é geralmente muito pequeno, quando visível. Em células cancerosas os nucléolos se tornam mais proeminentes. Mitose: Patologistas podem determinar o grau de um tumor contando o número de mitoses. Figura 2. Células cancerosas mostrando forma e tamanho irregulares 4 Figura 3. Células cancerosas mostrando pouca adesão Os dados originalmente estavam disponíveis num arquivo-texto, com valores separados por vírgula, contendo 11 campos para cada instância (um campo com código da amostra, 9 atributos e um campo com as classes), conforme apresentado na Tabela 1. O campo de código da amostra é numérico inteiro, os atributos nos campos 2 à 10 possuem valores inteiros entre 1 e 10 e o campo classe possui os valores 2 (para benígno) e 4 (para maligno). 5 Tabela 1. Informação dos atributos # Attribute Domain 1 Sample code number ID number 2 Clump Thickness 1 - 10 3 Uniformity of Cell Size 1 - 10 4 Uniformity of Cell Shape 1 - 10 5 Marginal Adhesion 1 - 10 6 Single Epithelial Cell Size 1 - 10 7 Bare Nuclei 1 - 10 8 Bland Chromatin 1 - 10 9 Normal Nucleoli 1 - 10 10 Mitoses 1 - 10 11 Class 2/4 2.3. Preparação e carga do Data Set Para carga do dataset no R alguns procedimentos foram tomados. Atributos sem valor 16 instâncias no repositório não possuem valores em algum dos atributos. Os valores nesses casos estão referidos pelo caracter “?”. Para o trabalho apresentado neste artigo estes valores foram removidos do arquivo da base (agora com 683 instâncias válidas, conforme demonstrado no Quadro 2). 6 Quadro 2. Base de dados sobre Câncer de Mama Núm. de Instâncias 683 Área de Pesquisa Núm. de Atributos 11 Característica dos Atributos Registros Incompletos 0 Data dos Dados Humanas Real Nov/1995 Substituição do valor numérico da classe Por clareza, os valores das classes, inicialmente indicado por 2 ou 4 foram substituídos pelas palavras “benigno” e “maligno”, respectivamente. Carga do dataset Os valores foram carregados diretamente do arquivo (em formato csv) para o Rstudio: > bc<read.csv("C:/Users/A055506/Dropbox/Documents/Profissional/Mestrado/Da ta Mining/breast-cancer-wisconsin.data", header=F) Nome dos atributos O dataset não trazia os nomes dos atributos diretamente no arquivo, portanto os nomes dos campos foram carregados na sequência: > names(bc) <- c("Samplecodenumber", "ClumpThickness", "UniformityofCellSize", "UniformityofCellShape", "MarginalAdhesion", "SingleEpithelialCellSize", "BareNuclei", "BlandChromatin", "NormalNucleoli", "Mitoses", "Class") Sumário dos valores carregados Mostrando o tamanho do dataset, sua estrutura, e um sumário dos dados. > dim(bc) [1] 683 11 > str(bc) 'data.frame': 683 obs. of 11 variables: $ Samplecodenumber : int 1000025 1002945 1015425 1016277 1017023 1017122 1018099 1018561 1033078 1033078 ... $ ClumpThickness : int 5 5 3 6 4 8 1 2 2 4 ... $ UniformityofCellSize : int 1 4 1 8 1 10 1 1 1 2 ... $ UniformityofCellShape : int 1 4 1 8 1 10 1 2 1 1 ... $ MarginalAdhesion : int 1 5 1 1 3 8 1 1 1 1 ... 7 $ SingleEpithelialCellSize: int 2 7 2 3 2 7 2 $ BareNuclei : int 1 10 2 4 1 10 $ BlandChromatin : int 3 3 3 3 3 9 3 $ NormalNucleoli : int 1 2 1 7 1 7 1 $ Mitoses : int 1 1 1 1 1 1 1 $ Class : Factor w/ 2 levels 1 1 1 1 1 2 1 1 1 1 ... > summary(bc) Samplecodenumber ClumpThickness Min. : 63375 Min. : 1.000 1st Qu.: 877617 1st Qu.: 2.000 Median : 1171795 Median : 4.000 Mean : 1076720 Mean : 4.442 3rd Qu.: 1238705 3rd Qu.: 6.000 Max. :13454352 Max. :10.000 UniformityofCellSize UniformityofCellShape Min. : 1.000 Min. : 1.000 1st Qu.: 1.000 1st Qu.: 1.000 Median : 1.000 Median : 1.000 Mean : 3.151 Mean : 3.215 3rd Qu.: 5.000 3rd Qu.: 5.000 Max. :10.000 Max. :10.000 MarginalAdhesion SingleEpithelialCellSize Min. : 1.00 Min. : 1.000 1st Qu.: 1.00 1st Qu.: 2.000 Median : 1.00 Median : 2.000 Mean : 2.83 Mean : 3.234 3rd Qu.: 4.00 3rd Qu.: 4.000 Max. :10.00 Max. :10.000 BareNuclei BlandChromatin Min. : 1.000 Min. : 1.000 1st Qu.: 1.000 1st Qu.: 2.000 Median : 1.000 Median : 3.000 Mean : 3.545 Mean : 3.445 3rd Qu.: 6.000 3rd Qu.: 5.000 Max. :10.000 Max. :10.000 NormalNucleoli Mitoses Min. : 1.00 Min. : 1.000 1st Qu.: 1.00 1st Qu.: 1.000 Median : 1.00 Median : 1.000 Mean : 2.87 Mean : 1.603 3rd Qu.: 4.00 3rd Qu.: 1.000 Max. :10.00 Max. :10.000 Class benign :444 malignant:239 2 2 2 ... 10 1 1 1 ... 3 1 2 ... 1 1 1 ... 1 5 1 ... "benign","malignant": Densidade das Amostras Para verificar como as amostras estão distribuídas, construiu-se o gráfico de densidade de cada atributo (Figura 4). > plot(density(bc$ClumpThickness)) 8 > > > > > > > > plot(density(bc$UniformityofCellSize)) plot(density(bc$UniformityofCellShape)) plot(density(bc$MarginalAdhesion)) plot(density(bc$SingleEpithelialCellSize)) plot(density(bc$BareNuclei)) plot(density(bc$BlandChromatin)) plot(density(bc$NormalNucleoli)) plot(density(bc$Mitoses)) 9 Figura 4. Densidade das amostras 10 Frequência dos Fatores (Figura 6) • 65% - Benignos (444) • 35% - Malignos (239) • Total: 683 > table(bc$Class) benign malignant 444 239 > pie(table(bc$Class)) > barplot(table(bc$Class)) Figura 6. Frequência dos fatores na amostra Balanceamento da base O conjunto de dados encontra-se desbalanceado, como pode-se observar acima, pois amostras com resultado benigno (444) aparecem em maior quantidade que as malignas (239). Portanto, optou-se por balancear os dados antes de utilizá-los, utilizando a função SMOTE da biblioteca DmwR [Wang et al. 2014] > library (DMwR) > bcB <- SMOTE(Class ~ ., bc, perc.over = 100,perc.under=200) > table(bcB$Class) benign malignant 478 478 11 • 50% - Benignos (478) • 50% - Malignos (478) • Total: 956 3. Classificação Nesta seção demonstra-se a aplicação dos algoritmos de classificação (árvore de decisão, Naïve-Bayes, MLP, SVM, k-NN) 3.1. Selecionando o Conjunto de Treinamento e Teste • Dados de treinamento: 70% = 669 • Dados de teste: 30% = 287 > > > > > set.seed(1234) ind <- sample(2,nrow(bcB), replace=TRUE, prob=c(0.7,0.3)) trainData <- bcB[ind==1,] testData <- bcB[ind==2,] table(trainData$Class) benign malignant 336 333 > table(testData$Class) benign malignant 142 145 3.2. Árvore de Decisão Utilizando a biblioteca party e gerando a ctree (Figura 7). > library (party) > myformula <- Class ~ ClumpThickness + UniformityofCellSize + UniformityofCellShape + MarginalAdhesion + SingleEpithelialCellSize + BareNuclei + BlandChromatin + NormalNucleoli + Mitoses > myctree <- ctree(myformula, data=trainData) > table(predict(myctree), trainData$Class) benign malignant benign 326 8 malignant 10 325 > print(myctree) Conditional inference tree with 6 terminal nodes Response: Class Inputs: ClumpThickness, UniformityofCellSize, UniformityofCellShape, MarginalAdhesion, SingleEpithelialCellSize, BareNuclei, BlandChromatin, NormalNucleoli, Mitoses Number of observations: 669 1) BareNuclei <= 1; criterion = 1, statistic = 432.779 12 2) UniformityofCellSize <= 3; criterion = 1, statistic = 223.451 3) UniformityofCellShape <= 2; criterion = 0.999, statistic = 154.999 4)* weights = 267 3) UniformityofCellShape > 2 5)* weights = 27 2) UniformityofCellSize > 3 6)* weights = 15 1) BareNuclei > 1 7) UniformityofCellShape <= 2; criterion = 1, statistic = 90.47 8) BareNuclei <= 3; criterion = 1, statistic = 17.802 9)* weights = 24 8) BareNuclei > 3 10)* weights = 16 7) UniformityofCellShape > 2 11)* weights = 320 > plot(myctree) Figura 7. Representação da ctree Testando a acurácia: 13 > testPred <- predict(myctree, newdata = testData) > table(testPred, testData$Class) testPred benign malignant benign 137 5 malignant 5 140 Acurácia = (137 + 140) / (137 + 140 + 5 + 5) Método Acurácia ctree 96.5% 3.3. Naïve-Bayes Utilizou-se a biblioteca e1071 para construir o classificador naive-bayes. > > > > library(class) library(e1071) myNB <- naiveBayes(myformula, data=trainData) table(predict(myNB, trainData[,-11]), trainData[,11]) benign malignant benign malignant 318 11 18 322 Testando a acurácia: > testPred <- predict(myNB, newdata = testData) > table(testPred, testData$Class) testPred benign malignant benign 139 2 malignant 3 143 Acurácia = (139 + 143) / (139 + 143 + 3 + 2) Método Acurácia naive-bayes 98.2% 14 3.4. SVM Utilizou-se a biblioteca e1071 para construir o classificador SVM. > library(e1071) > mySvm <- svm(myformula, data=trainData) > table(predict(mySvm, trainData[,-11]), trainData[,11]) benign malignant benign malignant 325 4 11 329 Testando a acurácia: > testPred <- predict(mySvm, newdata = testData) > table(testPred, testData$Class) testPred benign malignant benign 139 0 malignant 3 145 Acurácia = (139 + 145) / (139 + 145 + 3 + 0) Método Acurácia svm 99% 3.5. Multi-Layer Perceptron (MLP) - Neural Network Utilizou-se a biblioteca RSNNS para construir o classificador MLP. Primeiramente foi necessário concatenar os dados de treinamento e teste, pois a biblioteca RSNNS inicialmente trabalha com todos os dados. Na sequência será separado treinamento e teste na mesma proporção e com os mesmos dados, pois a função splitForTrainingAndTest separará exatamente os mesmos conjuntos de dados (ratio=0.3, 30% para teste), atribuindo para teste os últimos registros do conjunto (e que pertenciam exatamente ao conjunto de teste original). E finalmente é gerado o modelo MLP com valor máximo de 50 operações. > library(RSNNS) > mlpData<-rbind(trainData, testData) > table(mlpData$Class) benign malignant 478 478 > mlpValues <- mlpData[,2:10] 15 > mlpTargets <- decodeClassLabels(mlpData[,11]) > split <- splitForTrainingAndTest(mlpValues, mlpTargets, ratio=0.3) > norm <- normTrainingAndTestSet(split) > model <- mlp(norm$inputsTrain, norm$targetsTrain, size=5, learnFuncParams=c(0.1), maxit=50, inputsTest=norm$inputsTest, targetsTest=norm$targetsTest) Testando a acurácia: > predictions <- predict(model,norm$inputsTest) > confusionMatrix(norm$targetsTest,predictions) predictions targets 1 2 1 136 6 2 1 144 Acurácia = (136 + 144) / (136 + 144 + 6 + 1) Método Acurácia mlp 97.6% 3.6. KNN Utilizou-se a biblioteca DMwR para construir o classificador KNN. > > > > > > > > > > > library(DMwR) myKnn1 <- kNN(myformula, trainData, testData, k=1) myKnn3 <- kNN(myformula, trainData, testData, k=3) myKnn5 <- kNN(myformula, trainData, testData, k=5) myKnn7 <- kNN(myformula, trainData, testData, k=7) myKnn10 <- kNN(myformula, trainData, testData, k=10) myKnn15 <- kNN(myformula, trainData, testData, k=15) myKnn30 <- kNN(myformula, trainData, testData, k=30) myKnn50 <- kNN(myformula, trainData, testData, k=50) myKnn100 <- kNN(myformula, trainData, testData, k=100) myKnn200 <- kNN(myformula, trainData, testData, k=200) Testando a acurácia para cada um dos myknn acima, a melhor acurácia aparece com k=5. > table(testData[,'Class'], myKnn5) myKnn 16 benign malignant benign malignant 138 4 1 144 Método k Acurácia 1 97.9% 3 98.2% 5 98.3% 7 97.9% 10 97.9% 15 97.6% 30 97.6% 50 96.9% 100 96.2% 200 95.1% Knn 4. Regra de Associação (a priori) Nesta seção demonstra-se a aplicação do algoritmo de associação Apriori, gerando as regras com confiança acima de 90%. > library(arules) > bc_no_id <- bc[,2:11] #remove o primeiro campo com id > for(i in 1:9) bc_no_id[,i] <discretize(bc_no_id[,i], categories=9) #os valores já são discretos, mas agora estão preparados para serem convertidos em transactions > transBC <- as(bc_no_id, "transactions") > rules <- apriori(transBC, parameter = list(supp = 0.5, conf = 0.9, target = "rules")) Parameter specification: confidence minval smax arem aval originalSupport support minlen maxlen target ext 0.9 0.1 1 none FALSE TRUE 0.5 1 10 rules FALSE Algorithmic control: filter tree heap memopt load sort verbose 0.1 TRUE TRUE FALSE TRUE 2 TRUE apriori - find association rules with the apriori algorithm version 4.21 (2004.05.09) (c) 1996-2004 Christian Borgelt set item appearances ...[0 item(s)] done [0.00s]. set transactions ...[83 item(s), 683 transaction(s)] done [0.00s]. 17 sorting and recoding items ... [8 item(s)] done [0.00s]. creating transaction tree ... done [0.00s]. checking subsets of size 1 2 3 4 done [0.03s]. writing ... [33 rule(s)] done [0.03s]. creating S4 object ... done [0.00s]. > rules set of 33 rules No quadro a seguir listou-se as 5 primeiras regras dentre as 33 geradas. > inspect(rules) lhs support confidence lift 1 {UniformityofCellShape=[ 1, 2)} 0.5036603 0.9942197 1.529396 2 {UniformityofCellSize=[ 1, 2)} 0.5051245 0.9249330 1.462336 3 {UniformityofCellSize=[ 1, 2)} 0.5402635 0.9892761 1.521792 4 {UniformityofCellSize=[ 1, 2)} 0.5358712 0.9812332 1.190377 5 {SingleEpithelialCellSize=[ 2, 3)} 0.5197657 0.9441489 1.452373 rhs => {Class=benign} => {NormalNucleoli=[ 1, 2)} => {Class=benign} => {Mitoses=[ 1, 2)} => {Class=benign} Suponha que se esteja interessado apenas nas regras em que rhs indique uma associação que resulta em Benigno ou Maligno, para isso incluiu-se então um filtro e executou-se novamente método apriori. As 14 regras resultantes são: > rules <- apriori(transBC, parameter = list(supp = 0.5, conf = 0.9, target = "rules"), appearance = list(rhs=c("Class=benign", "Class=malignant"))) > rules set of 14 rules > inspect(rules) lhs rhs support confidence lift 1 {UniformityofCellShape=[ 1, 2)} => {Class=benign} 0.5036603 0.9942197 1.529396 2 {UniformityofCellSize=[ 1, 2)} => {Class=benign} 0.5402635 0.9892761 1.521792 3 {SingleEpithelialCellSize=[ 2, 3)} => {Class=benign} 0.5197657 0.9441489 1.452373 4 {MarginalAdhesion=[ 1, 2)} => {Class=benign} 0.5314788 0.9236641 1.420862 5 {BareNuclei=[ 1, 2)} => {Class=benign} 0.5666179 0.9626866 1.480889 6 {NormalNucleoli=[ 1, 2)} => {Class=benign} 0.5724744 0.9050926 1.392293 18 7 {UniformityofCellSize=[ 1, 2), NormalNucleoli=[ 1, 2)} 0.5036603 0.9971014 1.533829 8 {UniformityofCellSize=[ 1, 2), Mitoses=[ 1, 2)} 0.5314788 0.9918033 1.525679 9 {SingleEpithelialCellSize=[ 2, 3), Mitoses=[ 1, 2)} 0.5065886 0.9558011 1.470298 10 {MarginalAdhesion=[ 1, 2), Mitoses=[ 1, 2)} 0.5226940 0.9545455 1.468366 11 {BareNuclei=[ 1, 2), NormalNucleoli=[ 1, 2)} 0.5153734 0.9915493 1.525289 12 {BareNuclei=[ 1, 2), Mitoses=[ 1, 2)} 0.5563690 0.9768638 1.502698 13 {NormalNucleoli=[ 1, 2), Mitoses=[ 1, 2)} 0.5607613 0.9228916 1.419673 14 {BareNuclei=[ 1, 2), NormalNucleoli=[ 1, 2), Mitoses=[ 1, 2)} 0.5065886 0.9942529 1.529448 => {Class=benign} => {Class=benign} => {Class=benign} => {Class=benign} => {Class=benign} => {Class=benign} => {Class=benign} => {Class=benign} 5. Agrupamento Nesta seção demonstra-se a aplicação dos algoritmos de agrupamento k-means e hierárquico. Para isso, a classe do tumor é retirada do conjunto de dados, junto com o campo id. > bcData <- bc[,2:10] 5.1. K-means Comparando o resultado do agrupamento observa-se que as classes benigna e maligna apresentam alguma sobreposição. Após, os agrupamentos e seus centros são plotados, utilizando somente duas dimensões (Figura 8), e também utilizando todas as 9 dimensões (Figura 9). > (kmeans.result <- kmeans(bcData, 2)) > table(bc$Class, kmeans.result$cluster) 1 2 benign 9 435 malignant 221 18 19 > plot(bcData[c("UniformityofCellShape", "BareNuclei")], col = kmeans.result$cluster) > points(kmeans.result$centers[,c("UniformityofCellShape", "BareNuclei")], col = 1:2,pch = 8, cex=2) > plot(bcData[c("ClumpThickness", "UniformityofCellSize", "UniformityofCellShape", "MarginalAdhesion", "SingleEpithelialCellSize", "BareNuclei", "BlandChromatin", "NormalNucleoli", "Mitoses")], col = kmeans.result$cluster) > points(kmeans.result$centers[,c("ClumpThickness", "UniformityofCellSize", "UniformityofCellShape", "MarginalAdhesion", "SingleEpithelialCellSize", "BareNuclei", "BlandChromatin", "NormalNucleoli", "Mitoses")], col = 1:2,pch = 8, cex=2) Figura 8. Resultado do agrupamento k-means (2 dimensões) 20 Figura 9. Resultado do agrupamento k-means (9 dimensões) 5.2. Hierárquico Observando o agrupamento também fica claro que as classes benigna e maligna apresentam alguma sobreposição (Figura 10), o agrupamento da classe benigna está em sua maioria à esquerda e da classe maligna à direita. > > > > hc <- hclust(dist(bcData), method="average") plot(hc, hang = -1, labels=bc$Class) rect.hclust(hc, k=2) groups <- cutree(hc, k=2) 21 Figura 10. Resultado do agrupamento Hierárquico 6. Detecção de desvios Nesta seção demonstra-se a aplicação do algoritmo LOF de detecção de desvios. 6.1. LOF (Local Outlier Factor) A classe do tumor é novamente retirada do conjunto de dados, junto com o campo id. Os campos duplicados também são retirados (método unique) para que o método LOF não gere divisões por zero e consequentemente valores espúrios (NaN). Na figura 11 é apresentada a densidade dos valores discrepantes e na Figura 12 o resultado de Biplot de dois principais componentes. > bcData <- unique(bc[,2:10]) > outlier.scores <- lofactor(bcData, k=5) > plot(density(outlier.scores)) > outliers <- order(outlier.scores, decreasing=T)[1:5] > print(outliers) # Apresenta 5 outliers principais [1] 115 443 137 222 7 > n <- nrow(bcData) > labels <- 1:n > labels[-outliers] <- "." > biplot(prcomp(bcData), cex=.8, xlabs=labels) 22 Figura 10. Densidade dos outliers Figura 11. Outliers gerados por Biplot 7. Análise dos Resultados Nesta seção estão consolidado os resultados encontrados. 23 7.1. Classificação O melhor modelo para classificação sobre o conjunto utilizado foi o SVM. Método Acurácia ctree 96.5% naive-bayes 98.2% svm 99% mlp 97.6 knn 98.3 7.2. Associação O algoritmo apriori gerou 33 regras gerais, e 14 específicas com saídas filtradas por uma das duas classes, maligna ou benigna. Algumas das regras apresentadas, quando analisadas, sugeririam atalhos na interpretação da árvore de decisão e poderiam ser utilizadas em conjunto para manipular a árvore. Por exemplo, a regra: {UniformityofCellShape=[ 1, 2)} => {Class=benign} Demonstra que se uma célula tem formato uniforme = 1, ela é benigna. 7.3. Agrupamentos Os dois métodos utilizados, K-means e Hierárquico mostraram que há sobreposição entre os valores das amostras benignas e malignas. 7.4. Detecção de desvios Nos dados utilizados para gerar os outliers, vários valores apareceram (após computados) como 'não-numéricos' e antes de ressubmeter para o algoritmo, os valores duplicados tiveram que ser retirados. Como o valor das amostras é determinado por mecanismos óticos (automatizados ou não), que varrem a célula para atribuir os valores, espera-se que já exista um erro, da própria leitura, nos valores armazenados para cada uma das amostras. 8. Conclusão Neste artigo apresentou-se a utilização da ferramenta R para criar modelos de classificação, regras de associação e agrupamentos sobre um dataset de amostras de câncer de mama. A ferramenta R possui grande aplicabilidade principalmente pela comunidade que ativamente provê métodos e funções para expandir suas funcionalidades. Este relatório mostrou a aplicação de vários métodos da ferramenta no trabalho de mineração de dados sobre um dataset com amostras de câncer. 24 Bibliografia K. P. Bennett & O. L. Mangasarian: "Robust linear programming discrimination of two linearly inseparable sets", Optimization Methods and Software 1, 1992, 23-34 (Gordon & Breach Science Publishers). Lichman, M. (2013). UCI Machine Learning Repository [http://archive.ics.uci.edu/ml]. Irvine, CA: University of California, School of Information and Computer Science. Mangasarian, O. L. and Wolberg, W. H. : "Cancer diagnosis via linear programming", SIAM News, Volume 23, Number 5, September 1990, pp 1 & 18. Mangasarian, O. L. & R. Setiono, and W.H. Wolberg: "Pattern recognition via linear programming: Theory and application to medical diagnosis", in: "Large-scale numerical optimization", Thomas F. Coleman and Yuying Li, editors, SIAM Publications, Philadelphia 1990, pp 22-30. Wang, K. J., & Adrian, A. M. (2013). Breast cancer classification using hybrid synthetic minority over-sampling technique and artificial immune recognition system algorithm. Int J Comput Sci Electron Eng (IJCSEE), 1(3), 408-412. Wolberg, W. H. and O.L. Mangasarian: "Multisurface method of pattern separation for medical diagnosis applied to breast cytology", Proceedings of the National Academy of Sciences, U.S.A., Volume 87, December 1990, pp 9193-9196. 25