ML++
O aprendizado de máquina é uma disciplina vasta e estimulante, que atrai a atenção de especialistas de diversas áreas. Infelizmente, para programadores e entusiastas de C++, parece haver falta de suporte na área de aprendizado de máquina. Para preencher essa lacuna e dar ao C++ uma verdadeira base na esfera de ML, esta biblioteca foi escrita. A intenção desta biblioteca é que ela atue como uma encruzilhada entre desenvolvedores de baixo nível e engenheiros de aprendizado de máquina.
Instalação
Comece baixando os arquivos de cabeçalho da biblioteca ML++. Você pode fazer isso clonando o repositório e extraindo o diretório MLPP dentro dele:
git clone https://github.com/novak-99/MLPP
Em seguida, execute o script de shell "buildSO.sh":
Depois de fazer isso, mantenha os arquivos de origem do ML++ em um diretório local e inclua-os desta forma:
# include " MLPP/Stat/Stat.hpp " // Including the ML++ statistics module.
int main (){
...
}
Finalmente, após concluir a criação de um projeto, compile-o usando g++:
g++ main.cpp /usr/local/lib/MLPP.so --std=c++17
Uso
Observe que o ML++ usa o tipo de dados std::vector<double>
para emular vetores e o tipo de dados std::vector<std::vector<double>>
para emular matrizes.
Comece incluindo o respectivo arquivo de cabeçalho de sua escolha.
# include " MLPP/LinReg/LinReg.hpp "
A seguir, instancie um objeto da classe. Não se esqueça de passar o conjunto de entrada e o conjunto de saída como parâmetros.
LinReg model (inputSet, outputSet);
Depois, chame o otimizador que você gostaria de usar. Para otimizadores iterativos, como gradiente descendente, inclua a taxa de aprendizado, o número da época e se deve ou não utilizar o painel da IU.
model.gradientDescent( 0.001 , 1000 , 0 );
Ótimo, agora você está pronto para testar! Para testar uma instância de teste singular, utilize a seguinte função:
model.modelTest(testSetInstance);
Isto retornará a previsão singular do modelo para esse exemplo.
Para testar um conjunto de testes inteiro, use a seguinte função:
model.modelSetTest(testSet);
O resultado serão as previsões do modelo para todo o conjunto de dados.
Conteúdo da Biblioteca
- Regressão
- Regressão Linear
- Regressão Logística
- Regressão Softmax
- Regressão Exponencial
- Regressão Probit
- Regressão CLogLog
- Regressão Tanh
- Redes Neurais Profundas e Dimensionadas Dinamicamente
- Possíveis funções de ativação
- Linear
- Sigmóide
- Softmax
- Abanar
- Mish
- SinC
- Softplus
- Softsign
- CLogLog
- Logar
- CDF Gaussiano
- RELU
- GELU
- Sinal
- Etapa unitária
- Sinh
- Cosh
- Tanh
- Csch
- Sech
- Coth
- Arsinh
- Arcosh
- Artanh
- Arco
- Arsech
- Arcoth
- Possíveis algoritmos de otimização
- Descida gradiente em lote
- Descida gradiente de minilote
- Descida Gradiente Estocástica
- Descida gradiente com impulso
- Gradiente Acelerado Nesterov
- Otimizador Adagrad
- Otimizador Adadelta
- Adam Otimizador
- Otimizador Adamax
- Otimizador Nadam
- Otimizador AMSGrad
- Otimizador Newton-Raphson de 2ª Ordem*
- Equação Normal*
*Disponível apenas para regressão linear - Possíveis funções de perda
- MSE
- REQM
- MAE
- MBE
- Perda de registro
- Entropia Cruzada
- Perda de dobradiça
- Perda de Wasserstein
- Possíveis métodos de regularização
- Laço
- Cume
- ElasticNet
- Recorte de peso
- Possíveis métodos de inicialização de peso
- Uniforme
- Xavier normal
- Uniforme Xavier
- Ele normal
- Ele Uniforme
- LeCun Normal
- Uniforme LeCun
- Possíveis programadores de taxas de aprendizagem
- Baseado no tempo
- Baseado em época
- Baseado em etapas
- Exponencial
- Redes Neurais Pré-construídas
- Peceptron multicamadas
- Codificador automático
- Rede Softmax
- Modelagem Gerativa
- Redes Adversariais Gerativas Tabulares
- Redes Adversariais Gerativas Tabulares de Wasserstein
- Processamento de Linguagem Natural
- Word2Vec (saco contínuo de palavras, Skip-Gram)
- Decadência
- Saco de palavras
- TFIDF
- Tokenização
- Funções auxiliares de processamento de texto
- Visão Computacional
- A operação de convolução
- Agrupamento máximo, mínimo e médio
- Agrupamento global máximo, mínimo e médio
- Detectores de recursos pré-construídos
- Filtro Prewitt Horizontal/Vertical
- Filtro Sobel Horizontal/Vertical
- Filtro Scharr Horizontal/Vertical
- Filtro Roberts Horizontal/Vertical
- Filtro Gaussiano
- Detector de canto Harris
- Análise de Componentes Principais
- Classificadores Naive Bayes
- Multinomial Ingênuo Bayes
- Bernoulli Naive Bayes
- Gaussiano Ingênuo Bayes
- Classificação de vetores de suporte
- Formulação Primal (Objetivo de Perda de Dobradiça)
- Formulação Dupla (Via Multiplicadores Lagrangianos)
- K-médias
- k-vizinhos mais próximos
- Localizador de outliers (usando pontuações z)
- Decomposições matriciais
- Decomposição SVD
- Decomposição de Cholesky
- Verificador de definição positiva
- Decomposição QR
- Análise Numérica
- Diferenciação Numérica
- Funções Univariadas
- Funções Multivariadas
- Calculadora de vetores Jacobianos
- Calculadora Matriz Hessiana
- Aproximador de função
- Aproximação Constante
- Aproximação Linear
- Aproximação Quadrática
- Aproximação Cúbica
- Solucionadores de Equações Diferenciais
- Método de Euler
- Método de crescimento
- Transformadas Matemáticas
- Transformada Discreta de Cosseno
- Módulo de Álgebra Linear
- Módulo de Estatísticas
- Módulo de Processamento de Dados
- Configurando e imprimindo conjuntos de dados
- Conjuntos de dados disponíveis
- Conjunto de dados de câncer de mama de Wisconsin
- Conjunto de dados MNIST
- Conjunto de dados de flores de íris
- Conjunto de dados de vinho
- Conjunto de dados habitacionais da Califórnia
- Conjunto de dados de incêndios e crimes (Chicago)
- Dimensionamento de recursos
- Normalização Média
- Uma Representação Quente
- Representação reversa de uma quente
- Conversões de espaço de cores suportadas
- RGB para escala de cinza
- RGB para HSV
- RGB para YCbCr
- RGB para XYZ
- XYZ para RGB
- Utilitários
- Função TP, FP, TN, FN
- Precisão
- Lembrar
- Precisão
- Pontuação F1
O que está em andamento?
ML++, como a maioria dos frameworks, é dinâmico e está em constante mudança. Isto é especialmente importante no mundo do ML, à medida que novos algoritmos e técnicas são desenvolvidos dia a dia. Aqui estão algumas coisas que estão sendo desenvolvidas atualmente para ML++:
- Redes Neurais Convolucionais
- Kernels para SVMs
- Suporte à regressão vetorial
Citações
Vários materiais diferentes me ajudaram na criação do ML++, e gostaria de dar crédito a vários deles aqui. Este artigo de TutorialsPoint foi uma grande ajuda ao tentar implementar o determinante de uma matriz, e este artigo de GeeksForGeeks foi muito útil ao tentar obter o adjunto e o inverso de uma matriz.