Executando verificação de segurança...
1

Dúvida em ciência de dados - Support Vector Regression em Python

Salve, pessoal, tudo bom?

Estou trabalhando num projetinho aqui e eu estou emperrado num problema faz mais de semana já. Basicamente, eu quero usar o Tensorflow pra implementar uma SVR.

Várias fontes recomendam usar o scikit-learn do Python, mas a função deles demora um tempo razoável com um conjunto de dados pequeno, e eu sei que não vou conseguir aplicar pro conjunto de dados com centenas de variáveis que eu preciso.

Eu procurei umas referências sobre SVR e achei um artigo e um conjunto de slides que dão uma geral muito boa na teoria, mas não compartilham um código funcional.

Além do sklearn, eu achei outras ferramentas que resolvem problemas de otimização e até com exemplos pra Support Vector Machine, como aqui e aqui, mas os dois exemplos são sobre classificação - e eu preciso fazer uma regressão.

Alguém que manja do assunto pode me dar uma luz de como usar uma das opções do paágrafo de cima pra fazer regressão não linear com SVM? Eu serei grato por umas três gerações pra alma que compartilhar a solução.

(obs: pelo que eu testei aqui, o OSQP é mais rápido que a velocidade do pensamento - até pra um modelo com mais de mil variáveis).

Abraço!

Carregando publicação patrocinada...
1

lljotall,

A primeira pergunta e acredito que a mais importante, qual é o problema que você está querendo resolver?

Por que SVR e não outros modelos?

Dados tabulares de problemas de regressão geralmente são resolvidos com melhor performance com outros modelos.

1

Olá GTEX,

Muito obrigado pelo seu interesse no problema! O meu objetivo pra esse projeto é elaborar um conjunto de equações pra modelar o nível de ativação de genes - eu até já fiz uns posts introduzindo o pré-tratamento de dados aqui (e, dependendo do andar da carruagem, tem mais pra postar aqui também, é só arranjar um tempinho depois do trampo). Pelo fato de que cada experimento resulta em centenas de genes que respondem, o sistema vai ter centenas de variáveis.

Eu pessoalmente escolhi SVR porque ela permite fazer regressões não-lineares. Já tem bastante trabalho mostrando que as interações em redes biológicas são não-lineares e que isso precisa ser levado em conta. Especialmente, SVR tem praticamente a mesma complexidade de tempo se eu quiser testar vários polinômios de graus diferentes (por exemplo, nível do gene elevado ao cubo ou à sexta potência). Aqui vai um trabalho interessante que entra nesse mérito, mas eles fazem uma inferência linear a partir de uma tabela expandida só...
https://doi.org/10.1109/TMBMC.2016.2633265

Essa imagem aqui ilustra bem o processo:

Maaaaas, ouvir ideias novas sempre ajuda! Se vc sentir que uma outra proposta pode ser interessante, estou super aberto a sugestões. Algo a mais: ter equações na forma de polinômios me atrai porque eu também tenho interesse em encontrar pontos de equiĺibrio do sistema (por exemplo, um estado de ativação de genes que é estável - com derivada igual a zero). Ter uma função polinomial vai ajudar bastante na parte de derivar as euquações do sistema.

Abraço!

2

Bom dia lljotall,

Obrigado por dar mais informações.

Eu não sou expert no assunto relacionado a genes, porém modelos não lineares têm bastante no mercado.

O Support Vector "Machine" é um modelo linear que tem um Kernel trick, mas existem muitos modelos que robustos como o XGBoost Regressor que poderia auxiliar no seu problema.

Além disso poderia tratar as variáveis de maneira polinomial para depois aplicar um linear https://www.analyticsvidhya.com/blog/2021/07/all-you-need-to-know-about-polynomial-regression/#:~:text=A%20polynomial%20regression%20model%20is,the%20complexity%20of%20the%20relationship.

E acho que é um melhor guia, porque os Support Vectors são modelos "black box", precisaria usar um SHAP ou algo similar para poder explicar, dificultando a interpretação.