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:
- 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.
- 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. - Memória: Ao importar de CSVs gigantes, lembre-se do
memory_limitque configuramos no Artigo 02. Se o arquivo for maior que a RAM, você precisará de abordagens de processamento em blocos (Chunks). - 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:
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.
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!









