atislabs / easystream.jl Goto Github PK
View Code? Open in Web Editor NEWAn extensible framework for data stream and concept drift in Julia
Home Page: https://atislabs.github.io/EasyStream.jl/
License: MIT License
An extensible framework for data stream and concept drift in Julia
Home Page: https://atislabs.github.io/EasyStream.jl/
License: MIT License
Existe a possibilidade de criar um loop na leitura de um conjunto de dados, tornando os dados ilimitados e os padrões se tornam recorrentes dada a janela de tempo
Poderia ter configurações de como é feita a recorrência, ex. pode ser voltar para o inicio ou até voltar de trás para frente.
A ideia é criar modificadores que serão chamados quando o stream obter novos dados. Um exemplo de modificador é o de filtragem. Nele o usuário poderá filtrar algumas colunas do stream de forma automática.
Exemplo de código.
using EasyStream
stream = EasyStream.Dataset1CDT(5)
filter = EasyStream.FilterModifier([:Column1, :Column2])
push!(stream, filter)
EasyStream.listen(stream)
A ideia veio do MOA
Possíveis ideias de modificadores:
No momento o FilterModifier
, por conta de como foi implementado, só pode receber como input um vetor de elementos distintos, mas acho que em algum momento poderíamos incrementar esse Modifier
ou até criar um outro Modifier
de forma que pudéssemos usar ele para gerar uma coluna com os mesmo dados, mas com um nome diferente, ou seja, que ele tenha suporte pra receber como input um Pair{Symbol, Symbol}
. A principio, isoladamente, não aparenta fazer muito sentido, mas na criação de um pipeline pra gerarmos uma nova coluna a partir da transformação linear de outra coluna acho que seria útil.
Altura em Centímetros |
---|
176 |
Caso quiséssemos gerar uma nova coluna que representasse a altura em polegadas.
filter1 = FilterModifier(:Altura, :Altura => :Altura2)
filter2 = Modifier(:Altura2, : x -> x / 2,54)
push!(stream, filter1)
push!(stream, filter2)
Aí nós teríamos:
Altura em Centímetros | Altura em Polegadas |
---|---|
176 | 68,75 |
Criar uma estrutura geradora de dados e assim poder ser controlada a geração durante o decorrer do stream.
Ainda existe um problema que as funções geradoras podem gerar elementos sequenciais. Com isso, podem gerar sempre o elemento da mesma classe. Para isso, foi feito dessa forma:
total = 100
data = conn.generator(;n_samples = total, conn.args...)
Talvez seja necessário criar um cache para evitar esse tipo de coisa e não precisar gerar toda hora. Problema do cache quando houver modificação dos argumentos. Temos que definir uma solução para esse problema.
Conjuntos de testes necessários:
Atualmente, o drift está sendo aplicado em uma soma. No caso da imagem não funciona, pois seria só uma alteração de cor, ou melhor, uma soma de duas imagens (?).
A função select dá problema quando tem colunas duplicatas. Desta forma, seria interessante removê-las durante a criação da sua estrutura.
Levantamento das funções para serem utilizadas nos drifts:
Fonte:
https://edouardfouche.com/Data-Stream-Generation-with-Concept-Drift/
Criar métodos como:
O warning acontece sempre quando não possui o campo :default mesmo colocando para ordernar.
Fora que o certo seria :timestamp.
Atualmente estamos passando os dados para o conector. A ideia é que poderia existir um conector que receba uma função e ele gere os dados conforme a necessidade.
Quando a coluna não está presente no stream, a função apply ficará avisando em todo novo dado que essa coluna é inexistente. A ideia que só avise uma vez por coluna.
A ideia é criar um módulo ou um pacote que terá diversos datasets consolidados na área de stream. Desta maneira, facilitando o uso de experimentos clássicos.
Levantar as seguintes informações:
A ideia é que o usuário poderá definir se aqueles dados possuem alguma ordem (ex. possuir um timestamp já), forçar ser aleatório ou deixar como está. Talvez na ordem tenha que passar se é crescente ou decrescente.
Uma boa é verificar outros libs como fazem isso (para definir os parâmetros).
f(; orderby = :random)
This is one of the few libraries that is stream process in julia.
I noticed it hasn't been updated in a while, Is this project still under development ?
@filipebraida thx
A coluna está sendo checada através da função string(col) in names(data))
. Essa conversão é ruim, pois, desta forma, será utilizado a comparação de String e não de Symbol (que é mto mais rápida).
Será que uma opção para retornar em conjunto o timestamp é necessário?
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.