none
Principal Component Analysis - PCA RRS feed

  • Pergunta

  • Bom dia.
    Minha duvida é referente a Principal Component Analysis - PCA.

    Alguém sabe se é possivel aplicar esta técnica de matemática/estatistica em projetos de SQL Server Analysis Service.

    Tenho uma API em c# que realiza todos os calculos que necessito, porem quando o volume de datos é muito grande, a API falha, pois em muitos pontos está limitada por datos de tipo integer, a por mais que mude o código (até onde posso), continua falhando.

    Acredito que a menera ideal de aplicar estes calculos, seja atravez de tecnicas de BI, Data Mining, Analysis, etc, porem nao sou especialista nesse assunto.

    Qualquer ajuda sobre material de referencia, relacionado a PCA + SQL Server ou até mesmo alguma API que consiga processar grandes volumes de datos, me será de grande ajuda.

    Obrigado.


    Estevao_Medeiros

    segunda-feira, 23 de abril de 2012 10:34

Todas as Respostas

  • Estevao, bom dia.

    Poderia passar mais detalhes sobre esta API desenvolvida em C#? É uma especie de score baseada em várias colunas de uma tabela? Possui cruzamentos especiais de dados auxiliares? Por gentileza, detalhe melhor como a sua API trabalha.

    Obrigado.


    Eduardo Gomes - http://www.h1solucoes.com.br - Twitter: @edugp_sp

    segunda-feira, 23 de abril de 2012 12:15
  • Olá Eduardo.

    Entao, te resumo um pouco tudo.

    Na BD tenho 4 tabelas as quais vou trabalhar os dados.

    1º - Tabela de Dicionario de Adjetivos: tbAdjetivo (que contém uns 6 mil adjetivos)
    2º - Tabela de Textos Curtos que contem algumas frases: tbTexto
    3º - Tabela onde identifico os adjetivos existentes em cada texto: tbtextoAdj: Id, IdTexto, IdAdjetivo, QuantidadeVezesMencionado

    (As tabelas e os campos nao tem esses nomes na realidade, mas a ideia é essa)

    A questao é que tenho uns 800 mil registros de textos e isso cresce bastante a cada dia.

    Logo tenho que processar uma matrix, onde cruzo todos os textos por todos os adjetivos da tabela tbAdjetivo, onde informo quantas vezes foi mencionado cada adjetivo do dicionario em cada texto.

    a 4º tabela é onde vou guardar esse resultado, que corresponderá logo mais a uma matrix a ser processada utilizando essa técnica de PCA.

    A tabela no banco de dadosé similar a 3º, porém se inclue os adjetivos que nao foram encontrados:
    Essa tabela nao sei se compensa ser criada. Nao quero processar toda essa informaçao com programaçao e logo se ocorrer algum erro perder tudo, é mais por isso.

    Id | IdTexto, IdAdjetivo, QuantidadeVezesMencionado
    1      15           58                           0

    1      15           21                           1

    1      15           48                           0

    1      15           60                           2

    ........ (uns quantos milhoes de registros)

    A ideia é formar a seguinte matrix para ser processada:

    Texto | Adjetivo A | Adjetivo B | Adjetivo C ...... | Adjetivo 6000
       1           0                    0              1                        0

       1           0                    0              1                        0

       2           1                    0              0                        0

       2           0                    0              0                        0

       2           0                    0              0                        1

       3           0                    2              0                        0

       3           0                    0              0                        0

    (nessa estrutura, terei de momento algo como uma matrix de 800 mil linhas, por 6 mil colunas
    E daí o motivo de reduzir a matrix utilizando o método PCA.

    Por que se utiliza esse método?
    R: Nao sei. Uns matemáticos especialistas nessas coisas que decidiram que se deve utilizar essa metodologia e tal.

    A API que estou urilizando:
    Esta: Accord.NET: http://accord-net.origo.ethz.ch/

    Nessa web é possivel baixar o codigo fonte, tem aplicaçoes de exemplos, etc.
    A verdade é que funciona muito bem, faz tudo o que necessito, porem com essa quantidade de dados, geram exceptions do tipo out of memory, etc.

    Essa API utiliza uma outra API como base, que se chama AForge.
    Também é possivel baixar os fontes nessa web: http://www.aforgenet.com/

    Tentei mudar os tipos de datos que sao passados como parametros de integer a long(C#) aos metodos que criam e processam as matrizes,
    porem algumas das iteraçoes dentro do proprio código de .net (que nao sao dessas apis) utilizam integer como parametro e ja fico limitado por esse tipo de dados.


    Alguma sugestao de como posso realizar essa tarefa da forma mais adequada ?

    Um abraço


    Estevao_Medeiros

    segunda-feira, 23 de abril de 2012 13:49
  • Estevao, boa tarde.

    Pelo que entendi o seu problema é trabalhar com essa matriz de 800 mil linhas por 6 mil colunas, não é? O problema não é nem as linhas e sim a quantidade de colunas que é muito extenso e realmente fica inviavel trabalhar com uma matriz desse tamanho. Não conheço esta API, tão pouco o método PCA, mas basicamente o que ele faria com essa matriz? Em qual estrutura ele iria deixar? ou melhor.. .qual o formato que vc deseja formatar esta matriz?

    Abs.


    Eduardo Gomes - http://www.h1solucoes.com.br - Twitter: @edugp_sp

    segunda-feira, 23 de abril de 2012 20:26
  • Boa tarde Eduardo.

    Entao, justamente por ser uma matriz de tamanha dimençao, o metodo ou técnica PCA trata de reduzir essa matrix, encontrando os auto valores e auto vetores que expressam quais os valores mais significativos.

    Essa técnica por exemplo, é utilizada nos calculos para reduzir uma imagem. Quando voce reduz uma imagem voce perde informaçao, porem mantem os valores mais significativos na matrix.

    A problemática do software que estou desenvolvendo nao tem nada a ver com imagem, e sim análise de textos, comparaçao entre certos perfis de pessoas que escreveram os textos , etc.

    Nao sei ainda como vou guardar os dados, os resultados desses calculos que tenho que realizar, porém de momento meu problema maior é como conseguir processar essa 1º matrix grande, que em seguida vai gerar outras duas matrizes, a de correlaçao e variança.
    Enfim, tem todo um processo depois. Porém estou perdido no 1º passo.

    Pelo que vi, com SAS é possivel realizar essa tarefa com sua ferramenta de Data Mining. Imaginava que com SQL Server Analysis Service também seria possivel, porém nao encontro documentaçao referente a Principal Component Analysis con SSAS.

    Espero encontrar algo em breve.
    Um abraço.

    Estevao_Medeiros

    segunda-feira, 23 de abril de 2012 21:42
  • Estevão, não tenho tantos conhecimentos em mineração de dados ainda.

    Twite para esse cara: @rdornel

    Esse cara é muito bom em mineração de dados com analisys services.

    Abs.


    Eduardo Gomes - http://www.h1solucoes.com.br - Twitter: @edugp_sp

    quarta-feira, 25 de abril de 2012 13:05