ML++
El aprendizaje automático es una disciplina vasta y apasionante que atrae la atención de especialistas de muchos campos. Desafortunadamente, para los programadores y entusiastas de C++, parece haber una falta de apoyo en el campo del aprendizaje automático. Para llenar ese vacío y darle a C++ un verdadero punto de apoyo en la esfera del aprendizaje automático, se escribió esta biblioteca. La intención de esta biblioteca es que actúe como un cruce entre los desarrolladores de bajo nivel y los ingenieros de aprendizaje automático.
Instalación
Comience descargando los archivos de encabezado de la biblioteca ML++. Puedes hacer esto clonando el repositorio y extrayendo el directorio MLPP dentro de él:
git clone https://github.com/novak-99/MLPP
A continuación, ejecute el script de shell "buildSO.sh":
Después de hacerlo, mantenga los archivos fuente de ML++ en un directorio local e inclúyalos de esta manera:
# include " MLPP/Stat/Stat.hpp " // Including the ML++ statistics module.
int main (){
...
}
Finalmente, una vez que hayas terminado de crear un proyecto, compílalo usando g++:
g++ main.cpp /usr/local/lib/MLPP.so --std=c++17
Uso
Tenga en cuenta que ML++ utiliza el tipo de datos std::vector<double>
para emular vectores y el tipo de datos std::vector<std::vector<double>>
para emular matrices.
Comience incluyendo el archivo de encabezado respectivo de su elección.
# include " MLPP/LinReg/LinReg.hpp "
A continuación, cree una instancia de un objeto de la clase. No olvide pasar el conjunto de entrada y el conjunto de salida como parámetros.
LinReg model (inputSet, outputSet);
Luego, llame al optimizador que le gustaría utilizar. Para optimizadores iterativos como el descenso de gradiente, incluya la tasa de aprendizaje, el número de época y si se utiliza o no el panel de interfaz de usuario.
model.gradientDescent( 0.001 , 1000 , 0 );
¡Genial, ahora estás listo para realizar la prueba! Para probar una instancia de prueba singular, utilice la siguiente función:
model.modelTest(testSetInstance);
Esto devolverá la predicción singular del modelo para ese ejemplo.
Para probar un conjunto de prueba completo, utilice la siguiente función:
model.modelSetTest(testSet);
El resultado serán las predicciones del modelo para todo el conjunto de datos.
Contenidos de la biblioteca
- Regresión
- Regresión lineal
- Regresión logística
- Regresión Softmax
- Regresión exponencial
- Regresión probit
- Regresión CLogLog
- Regresión de Tanh
- Redes neuronales profundas y de tamaño dinámico
- Posibles funciones de activación
- Lineal
- Sigmoideo
- softmax
- Silbido
- Mismo
- SinC
- Softplus
- signo suave
- CLogRegistro
- Logit
- CDF gaussiano
- RELU
- GELU
- Firmar
- Paso unitario
- Sinh
- Aporrear
- tanh
- Csch
- Sech
- Coth
- arsinh
- Arcosh
- Artanh
- arcosch
- arsech
- arcoth
- Posibles algoritmos de optimización
- Descenso de gradiente por lotes
- Descenso de gradiente de mini lotes
- Descenso del gradiente estocástico
- Descenso de gradiente con impulso
- gradiente acelerado de Nesterov
- Optimizador de Adagrad
- Optimizador Adadelta
- Optimizador Adam
- Optimizador Adamax
- Optimizador Nadam
- Optimizador AMSGrad
- Optimizador Newton-Raphson de segundo orden*
- Ecuación normal*
*Solo disponible para regresión lineal - Posibles funciones de pérdida
- MSE
- RMSE
- MAE
- MBE
- Pérdida de registro
- Entropía cruzada
- Pérdida de bisagra
- Pérdida de Wasserstein
- Posibles métodos de regularización
- Lazo
- Cresta
- Red elástica
- Recorte de peso
- Posibles métodos de inicialización de peso
- Uniforme
- xavier normal
- uniforme xavier
- el normal
- El uniforme
- Le Cun Normal
- Uniforme LeCun
- Posibles programadores de tasas de aprendizaje
- Basado en el tiempo
- Basado en época
- Basado en pasos
- Exponencial
- Redes neuronales prediseñadas
- Peceptrón multicapa
- codificador automático
- Red Softmax
- Modelado generativo
- Redes tabulares generativas adversarias
- Redes adversarias generativas tabulares de Wasserstein
- Procesamiento del lenguaje natural
- Word2Vec (Bolsa continua de palabras, Skip-Gram)
- Derivado
- Bolsa de palabras
- TFIDF
- Tokenización
- Funciones auxiliares de procesamiento de texto
- Visión por computadora
- La operación de convolución
- Agrupación máxima, mínima y promedio
- Agrupación global máxima, mínima y promedio
- Detectores de funciones prediseñados
- Filtro Prewitt horizontal/vertical
- Filtro Sobel horizontal/vertical
- Filtro Scharr horizontal/vertical
- Filtro Roberts horizontal/vertical
- Filtro gaussiano
- Detector de esquinas Harris
- Análisis de componentes principales
- Clasificadores ingenuos de Bayes
- Bayes ingenuo multinomial
- Bernoulli ingenuo Bayes
- Bayes ingenuo gaussiano
- Clasificación de vectores de soporte
- Formulación primaria (objetivo de pérdida de bisagra)
- Formulación dual (mediante multiplicadores lagrangianos)
- K-medias
- k-vecinos más cercanos
- Buscador de valores atípicos (usando puntuaciones z)
- Descomposiciones de matrices
- Descomposición SVD
- Descomposición de Cholesky
- Comprobador de certeza positiva
- Descomposición QR
- Análisis numérico
- Diferenciación numérica
- Funciones univariadas
- Funciones multivariadas
- Calculadora de vectores jacobianos
- Calculadora de matriz de arpillera
- Aproximador de funciones
- Aproximación constante
- Aproximación lineal
- Aproximación cuadrática
- Aproximación cúbica
- Solucionadores de ecuaciones diferenciales
- El método de Euler
- Método de crecimiento
- Transformaciones matemáticas
- Transformada de coseno discreta
- Módulo de Álgebra Lineal
- Módulo de Estadísticas
- Módulo de procesamiento de datos
- Configuración e impresión de conjuntos de datos
- Conjuntos de datos disponibles
- Conjunto de datos sobre cáncer de mama de Wisconsin
- Conjunto de datos MNIST
- Conjunto de datos de flores de iris
- Conjunto de datos de vino
- Conjunto de datos de vivienda de California
- Conjunto de datos sobre incendios y delitos (Chicago)
- Escalado de características
- Normalización media
- Una representación caliente
- Representación invertida en caliente
- Conversiones de espacio de color admitidas
- RGB a escala de grises
- RGB a HSV
- RGB a YCbCr
- RGB a XYZ
- XYZ a RGB
- Utilidades
- Función TP, FP, TN, FN
- Precisión
- Recordar
- Exactitud
- puntuación F1
¿Qué hay en proceso?
ML++, como la mayoría de los marcos, es dinámico y cambia constantemente. Esto es especialmente importante en el mundo del ML, ya que día a día se desarrollan nuevos algoritmos y técnicas. Aquí hay un par de cosas que se están desarrollando actualmente para ML++:
- Redes neuronales convolucionales
- Kernels para SVM
- Regresión de vectores de soporte
Citas
Varios materiales diferentes me ayudaron en el camino de la creación de ML++, y me gustaría dar crédito a varios de ellos aquí. Este artículo de TutorialsPoint fue de gran ayuda al intentar implementar el determinante de una matriz, y este artículo de GeeksForGeeks fue muy útil al intentar tomar el adjunto y el inverso de una matriz.