Back-End

6 out, 2017

Machine Learning e PHP com php-ml

Publicidade

Um dos temas mais relevantes dos últimos anos é machine learning. Tem se falado como nunca em resolução de problemas dos mais diversos tipos utilizando inteligência artificial, big data, visão computacional e muito mais.

Porém, sempre que esse assunto é tratado, linguagens ditas mais performáticas e voltadas para estatística, como: python, go, julia, R etc. aparecem como as mais comuns entre os desenvolvedores desse tipo de solução.

Mas se pararmos para analisar, quando falamos de machine learning, falamos, na verdade, de algoritmos matemáticos para análise, limpeza, tokenização, treinamento e interpretação de dados. Por exemplo: regressão linear, algoritmos de agrupamento e árvores de decisão.

E sim, alguém parou e implementou vários desses algoritmos em PHP. E assim surgiu o projeto php-ml. Que na verdade é uma biblioteca PHP com vários algoritmos de machine learning que você pode utilizar para treinar, analisar e interpretar dados.

Para incorporar o php-ml em seu projeto, basta criar uma pasta e, usando o composer. Fazer o comando:

composer require php-ai/php-ml

Ou acessar o fonte direto no github do projeto https://github.com/php-ai/php-ml

Dentre os algoritmos que estão implementados no php-ml temos: Apriori, Associator, KNearestNeighbors, Naïve Bayes, SVC, além de algoritmos de redes neurais e muitos outros.

Além do repositório com a biblioteca, existe outro repositório com exemplos de código utilizando a biblioteca php-ml. Para isto, basta você dar um git clone no repositório: https://github.com/php-ai/php-ml-examples

Um exemplo apresentado nesse repositório é o de detecção de linguagem. Conforme o código abaixo:

<?php 

declare(strict_types=1);
namespace PhpmlExamples;

include 'vendor/autoload.php';

use Phpml\Dataset\CsvDataset;
use Phpml\Dataset\ArrayDataset;
use Phpml\FeatureExtraction\TokenCountVectorizer;
use Phpml\Tokenization\WordTokenizer;
use Phpml\CrossValidation\StratifiedRandomSplit;
use Phpml\FeatureExtraction\TfIdfTransformer;
use Phpml\Metric\Accuracy;
use Phpml\Classification\SVC;
use Phpml\SupportVectorMachine\Kernel;

$dataset = new CsvDataset('data/languages.csv', 1);
$vectorizer = new TokenCountVectorizer(new WordTokenizer());
$tfIdfTransformer = new TfIdfTransformer();
$samples = [];
foreach ($dataset->getSamples() as $sample) {
    $samples[] = $sample[0];
}
$vectorizer->fit($samples);
$vectorizer->transform($samples);
$tfIdfTransformer->fit($samples);
$tfIdfTransformer->transform($samples);
$dataset = new ArrayDataset($samples, $dataset->getTargets());
$randomSplit = new StratifiedRandomSplit($dataset, 0.1);
$classifier = new SVC(Kernel::RBF, 10000);
$classifier->train($randomSplit->getTrainSamples(), $randomSplit->getTrainLabels());
$predictedLabels = $classifier->predict($randomSplit->getTestSamples());
echo 'Accuracy: '.Accuracy::score($randomSplit->getTestLabels(), $predictedLabels);

No exemplo acima, o programa captura os dados do arquivo ‘data/languages.csv’, e o tokeniza (transforma os dados em arrays numéricos), como disse anteriormente, os algoritmos de machine learning são algoritmos matemáticos. Então, os dados são transformados em números e os algoritmos são aplicados sobre esses dados. Depois disso, os dados são otimizados pelos métodos fit() e transform(). Então, é aplicado o algoritmo classificador SVC, os dados são treinados nesse algoritmo e depois é validada a porcentagem de confiança do treinamento e exibido na saída do código essa porcentagem.

Bem, sabemos que PHP realmente não é a melhor linguagem para trabalharmos com muito processamento e com muitos dados numéricos, porém, é sempre legal ver que cada vez mais temos grandes programadores trazendo para a linguagem projetos cada vez mais complexos e atuais. Agora é hora de experimentar esse projeto e aprender ainda mais sobre machine learning.