Objeto Dataset no Rubix ML

Rubix ML
Tempo de leitura: 6 minutos

Objeto Dataset no Rubix ML: Com o ambiente configurado e as extensões de performance voando baixo, chegamos ao coração de qualquer projeto de inteligência artificial: os dados. No mundo do Machine Learning, o ditado “você é o que você come” nunca foi tão verdadeiro. Se alimentarmos nossos algoritmos com dados mal estruturados, teremos predições inúteis.

Como especialista em Rubix ML, preparei este terceiro artigo para dominar a estrutura fundamental da biblioteca: o Objeto Dataset. Vamos aprender a diferença crucial entre dados rotulados e não rotulados, e como extrair informações de diversas fontes como CSV, MySQL e JSON para alimentar sua inteligência preditiva.

O Objeto Dataset: A Base da Inteligência no Rubix ML

Objeto Dataset no Rubix ML: No Rubix ML, um Dataset não é apenas um array de dados; é um objeto especializado que organiza suas informações em uma estrutura que os algoritmos conseguem interpretar. Ele separa o que chamamos de Samples (amostras/características) do que chamamos de Labels (rótulos/respostas).

Imagine que você está analisando o mercado imobiliário da sua cidade. O número de quartos, a metragem e o bairro são as Samples. O preço de venda é o Label. Dominar essa distinção é o primeiro passo para o sucesso.

1. Labeled vs. Unlabeled: Qual a diferença?

No Rubix ML, existem duas classes principais de datasets. A escolha entre elas depende do tipo de aprendizado que você vai aplicar.

Labeled (Rotulados)

Usados para Aprendizado Supervisionado. Aqui, você fornece a resposta para o algoritmo aprender.

  • Exemplo: Um histórico de 500 artigos do seu blog onde você indica quais foram “sucesso” e quais não foram. O algoritmo aprende o padrão do sucesso para prever o desempenho de futuros posts.

Unlabeled (Não Rotulados)

Usados para Aprendizado Não Supervisionado ou para Predição. Aqui, você tem apenas as características, sem a resposta final.

  • Exemplo: Você tem uma lista de clientes e quer que o algoritmo os agrupe por comportamento de compra automaticamente (Clustering), sem que você diga previamente quem é “VIP” ou “Comum”.

2. Anatomia do Objeto Dataset

No código, a estrutura é extremamente intuitiva. As amostras são sempre um array bidimensional (uma matriz), onde cada linha é uma observação e cada coluna é uma característica (feature).

PHP

use Rubix\ML\Datasets\Labeled;
use Rubix\ML\Datasets\Unlabeled;

// Amostras: [Metragem, Quartos]
$samples = [
    [70, 2],
    [120, 3],
    [45, 1],
];

// Rótulos: [Preço Estimado]
$labels = [250000, 450000, 150000];

// Criando um Dataset Rotulado
$dataset = new Labeled($samples, $labels);

// Criando um Dataset Não Rotulado (apenas para predição)
$predictionSet = new Unlabeled($samples);

3. Importando Dados de Fontes Reais

Em um cenário profissional, você raramente digitará os dados manualmente. O Rubix ML brilha ao oferecer Extractors, ferramentas que buscam dados de fora e os preparam para o objeto Dataset.

A. Importando de arquivos CSV

O CSV é o “feijão com arroz” da ciência de dados. Use o extrator de CSV para lidar com grandes planilhas de forma eficiente.

PHP

use Rubix\ML\Extractors\CSV;
use Rubix\ML\Datasets\Labeled;

// 'true' indica que o arquivo possui cabeçalho
$extractor = new CSV('dados_vagas_rpjobs.csv', true);

// Criando o dataset diretamente do extrator
$dataset = Labeled::fromIterator($extractor);

B. Importando do Banco de Dados (MySQL/PostgreSQL)

Como desenvolvedor, você provavelmente tem seus dados em um banco relacional. Você pode usar o extrator de Queries para buscar dados via PDO.

PHP

use Rubix\ML\Extractors\ColumnPicker;
use Rubix\ML\Extractors\Sql;
use PDO;

$pdo = new PDO('mysql:host=localhost;dbname=rpjobs', 'user', 'pass');

// Selecionamos as colunas que importam para o treino
$extractor = new ColumnPicker(new Sql($pdo, 'SELECT idade, experiencia, nivel_ingles, contratado FROM candidatos'), [
    'idade', 'experiencia', 'nivel_ingles', 'contratado'
]);

// O Rubix ML assume que a última coluna selecionada é o Label
$dataset = Labeled::fromIterator($extractor);

C. Importando de JSON

Ideal para integrar com APIs externas ou logs de sistemas modernos.

PHP

use Rubix\ML\Extractors\JSON;

$extractor = new JSON('logs_acesso_blog.json');
$dataset = Unlabeled::fromIterator($extractor);

4. Manipulando o Dataset: Filtragem e Divisão

Depois de carregar o dado, você raramente o usará “cru”. O objeto Dataset possui métodos poderosos para preparar a informação antes do treino.

Dividindo para Treino e Teste

Nunca treine seu algoritmo com todos os dados. Você precisa guardar uma parte para testar se ele realmente aprendeu.

PHP

// Divide o dataset: 80% para treino, 20% para teste
[$training, $testing] = $dataset->stratifiedSplit(0.8);

Filtragem e Transformação

Você pode remover colunas inúteis ou transformar dados textuais em numéricos (embora veremos transformadores em detalhes no próximo artigo).

PHP

// Remove a segunda coluna (índice 1) do dataset
$dataset->dropColumn(1);

5. Exemplo de Aplicabilidade: Classificação de Comentários no Blog

Imagine que você quer um sistema que identifique automaticamente se um comentário no seu blog técnico é “Dúvida”, “Elogio” ou “Spam”.

Como estamos em um ambiente profissional, vamos estruturar o código utilizando um pipeline de processamento. No Machine Learning, textos não podem ser lidos diretamente pelos algoritmos matemáticos; eles precisam ser transformados em vetores numéricos (processo chamado de Vectorization).

PHP

require 'vendor/autoload.php';

use Rubix\ML\Datasets\Labeled;
use Rubix\ML\PersistentModel;
use Rubix\ML\Persisters\Filesystem;
use Rubix\ML\Pipeline;
use Rubix\ML\Transformers\TextNormalizer;
use Rubix\ML\Transformers\WordCountVectorizer;
use Rubix\ML\Transformers\TfIdfTransformer;
use Rubix\ML\Classifiers\NaiveBayes;
use Rubix\ML\Tokenizers\Whitespace;

// --- PASSO 1: Preparação dos Dados (Treinamento) ---
// Em um cenário real, você buscaria isso do seu banco de dados MySQL ou CSV.
$samples = [
    ['Como eu instalo o CakePHP no Windows?'], // Dúvida
    ['Excelente artigo, me ajudou muito no projeto!'], // Elogio
    ['Ganhe dinheiro fácil clicando aqui no link'], // Spam
    ['Onde encontro a documentação do Rubix ML?'], // Dúvida
    ['Parabéns pelo conteúdo, muito didático.'], // Elogio
    ['Compre seguidores para sua conta agora mesmo!'], // Spam
    ['Não entendi como funciona o objeto Dataset.'], // Dúvida
];

$labels = ['duvida', 'elogio', 'spam', 'duvida', 'elogio', 'spam', 'duvida'];

$dataset = new Labeled($samples, $labels);

// --- PASSO 2: Criando o Pipeline de Processamento ---
/**
 * O Pipeline orquestra a transformação do texto em números:
 * 1. TextNormalizer: Converte tudo para minúsculo e remove pontuação.
 * 2. WordCountVectorizer: Conta a frequência das palavras.
 * 3. TfIdfTransformer: Dá mais peso para palavras raras e importantes.
 * 4. NaiveBayes: O classificador propriamente dito.
 */
$estimator = new Pipeline([
    new TextNormalizer(),
    new WordCountVectorizer(1000, new Whitespace()), // Limite de 1000 palavras únicas
    new TfIdfTransformer(),
], new NaiveBayes());

// --- PASSO 3: Treinamento ---
echo "Treinando o modelo..." . PHP_EOL;
$estimator->train($dataset);

// --- PASSO 4: Persistência (Opcional) ---
// Salvamos o modelo para não precisar treinar novamente em cada requisição
$model = new PersistentModel($estimator, new Filesystem('classificador_comentarios.rbx'));
$model->save();

echo "Modelo treinado e salvo com sucesso!" . PHP_EOL . "---" . PHP_EOL;

// --- PASSO 5: Predição de novos comentários ---
$novosComentarios = [
    ['Pode me explicar melhor a extensão Tensor?'],
    ['Oferta imperdível: iPhones com 90% de desconto!'],
    ['Show de bola, Thiago! Continue com os posts.'],
];

foreach ($novosComentarios as $comentario) {
    $previsao = $estimator->predictSample($comentario);
    echo "Comentário: " . $comentario[0] . PHP_EOL;
    echo "Classificação sugerida: [" . strtoupper($previsao) . "]" . PHP_EOL . PHP_EOL;
}

6. Boas Práticas na Manipulação de Datasets

Para atuar como um profissional de elite, siga estas regras de ouro:

  1. Imutabilidade: Os objetos Dataset no Rubix ML são em sua maioria imutáveis ou retornam novas instâncias. Isso evita que você “estrague” seu dado original durante a manipulação.
  2. Conheça seus dados: Use $dataset->describe() para ver estatísticas rápidas sobre suas colunas (médias, valores mínimos, máximos). Isso ajuda a identificar outliers (dados fora da curva) que podem confundir o modelo.
  3. Memória: Ao importar de CSVs gigantes, lembre-se do memory_limit que configuramos no Artigo 02. Se o arquivo for maior que a RAM, você precisará de abordagens de processamento em blocos (Chunks).
  4. Tipagem: O Rubix ML tenta inferir se o dado é categórico (texto) ou contínuo (número). Garanta que seus CSVs não tenham “R$ ” ou “%” dentro das células numéricas, ou o extrator os tratará como strings.

Conclusão: O Combustível da sua IA

O Objeto Dataset é a ponte entre o seu código tradicional e o futuro preditivo. Aprender a carregar dados de CSVs, Bancos de Dados ou JSON e organizá-los em estruturas Labeled ou Unlabeled é o que permite que você saia do “se/então” e entre no mundo onde o software aprende com a experiência.

Agora que você sabe como capturar e organizar o combustível, estamos prontos para a refinaria. No próximo artigo, aprenderemos como “limpar” esses dados: “Limpando os Dados (Transformers): Uso de Imputer para dados faltantes e StandardScaler.”

Mas antes de dominar o Rubix ML, se este for o seu caso, entendemos que toda jornada tem um início. Vamos entender quais são os conhecimentos básicos necessários para aproveitar ao máximo esta poderosa biblioteca. Para iniciar seus estudos do Rubix ML, você precisará dominar as seguintes tecnologias e/ou framework:

Capa Curso PHP
PHP
SQL
SQL
Laravel
Laravel
CakePHP
CakePHP

E se você gosta do nosso conteúdo, não deixe de contribuir adquirindo os serviços e produtos dos nossos apoiadores e empresas que somos associados.

Hospedagem Hostinger
Ofertas Amazon
Amazon Prime

Dica de Especialista: Se você estiver integrando o Rubix ML em um projeto CakePHP existente, crie um Extractor customizado que utilize os Models (Tables) do CakePHP. Isso manterá sua lógica de dados centralizada e aproveitará as validações que você já construiu!

Author: Thiago Rossi
Com mais de 20 anos de jornada na tecnologia, minha trajetória evoluiu do ensino técnico à arquitetura de sistemas complexos. Hoje, foco minha expertise no desenvolvimento de soluções de Inteligência Artificial nativa e análise de dados públicos, utilizando o ecossistema PHP para transformar dados brutos em transparência e eficiência. Como autor e desenvolvedor, acredito na democratização do conhecimento. Essa visão resultou em uma biblioteca de mais de 530 artigos gratuitos, cobrindo desde a base do WebDev e Infraestrutura até os bastidores da indústria de Jogos e IA. No universo de Game Design, sou autor do livro "GDD – O Guia Definitivo" e documento ativamente meus processos através de DevLogs, unindo rigor técnico e criatividade em projetos desenvolvidos com GDevelop 5. Meu compromisso é conectar engenharia de ponta com as reais oportunidades do mercado de tecnologia.