¿Cuál es el código de aprendizaje automático más pequeño que se podría escribir en Java?

Este es un ejemplo deHola mundode aprendizaje automático en Java. Simplemente le da una idea del aprendizaje automático en Java.

Ambiente

Java 1.6+ y Eclipse

Paso 1: descargue la biblioteca Weka

Página de descarga: http://www.cs.waikato.ac.nz/ml/w…

Descargue stable.XX.zip , descomprima el archivo, agregue weka.jar a su ruta de biblioteca del proyecto Java en Eclipse.

Paso 2: preparar los datos

Cree un archivo txt ” weather.txt ” siguiendo el siguiente formato:

@relation weather

@attribute outlook {soleado, nublado, lluvioso}
@ temperatura de atributo numérico
@ atributo de humedad numérico
@ atributo ventoso {VERDADERO, FALSO}
@attribute play {yes, no}

@datos
soleado, 85,85, FALSO, no
soleado, 80,90, VERDADERO, no
nublado, 83,86, FALSO, sí
lluvioso, 70,96, FALSO, sí
lluvioso, 68,80, FALSO, sí
lluvioso, 65,70, VERDADERO, no
nublado, 64,65, VERDADERO, sí
soleado, 72,95, FALSO, no
soleado, 69,70, FALSO, sí
lluvioso, 75,80, FALSO, sí
soleado, 75,70, VERDADERO, si
nublado, 72,90, VERDADERO, sí
nublado, 81,75, FALSO, sí
lluvioso, 71,91, VERDADERO, no

Este conjunto de datos es del paquete de descarga weka. Se encuentra en/data/weather.numeric.arff “. El nombre de la extensión del archivo esarff “, pero simplemente podemos usartxt “.

Paso 3: Entrenamiento y prueba usando Weka

  • Este ejemplo de código utiliza un conjunto de clasificadores proporcionados por Weka. Entrena el modelo en el conjunto de datos dado y prueba usando validación cruzada dividida en 10. Explicaré cada clasificador más tarde, ya que es un tema más complicado.

import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader;
import weka.classifiers.Classifier;
import weka.classifiers.Evaluation;
import weka.classifiers.evaluation.NominalPrediction;
import weka.classifiers.rules.DecisionTable;
import weka.classifiers.rules.PART;
import weka.classifiers.trees.DecisionStump;
importar weka.classifiers.trees.J48;
importar weka.core.FastVector;
importar weka.core.Instances;

clase pública WekaTest {
public static BufferedReader readDataFile (String filename) {
BufferedReader inputReader = nulo;

tratar {
inputReader = nuevo BufferedReader (nuevo FileReader (nombre de archivo));
} catch (FileNotFoundException ex) {
System.err.println (“Archivo no encontrado:” + nombre de archivo);
}

return inputReader;
}

Clasificación de evaluación estática pública (modelo clasificador,
Instancias trainingSet, Instances testingSet) lanza Exception {
Evaluación de evaluación = nueva evaluación (trainingSet);

model.buildClassifier (trainingSet);
Evaluation.evaluateModel (modelo, testingSet);

evaluación de retorno;
}

public static double CalculateAccuracy (predicciones de FastVector) {
doble correcto = 0;

for (int i = 0; i <predictions.size (); i ++) {
NominalPrediction np = (NominalPrediction) predictions.elementAt (i);
if (np.predicted () == np.actual ()) {
correcto ++;
}
}

return 100 * correct / predictions.size ();
}

Instancias públicas estáticas [] [] crossValidationSplit (Datos de instancias, int numberOfFolds) {
Instancias [] [] split = instancias nuevas [2] [numberOfFolds];

for (int i = 0; i <numberOfFolds; i ++) {
split [0] [i] = data.trainCV (numberOfFolds, i);
split [1] [i] = data.testCV (numberOfFolds, i);
}

retorno dividido;
}

public static void main (String [] args) lanza Exception {
Archivo de datos BufferedReader = readDataFile (“weather.txt”);

Datos de instancias = nuevas instancias (archivo de datos);
data.setClassIndex (data.numAttributes () – 1);

// Hacer validación cruzada dividida en 10
Instancias [] [] split = crossValidationSplit (datos, 10);

// División separada en matrices de entrenamiento y prueba
Instancias [] trainingSplits = split [0];
Instancias [] testingSplits = split [1];

// Usa un conjunto de clasificadores
Clasificador [] modelos = {
nuevo J48 (), // un árbol de decisión
parte nueva(),
nuevo DecisionTable (), // clasificador mayoritario de tabla de decisiones
nuevo DecisionStump () // árbol de decisión de un nivel
};

// Ejecutar para cada modelo
for (int j = 0; j <models.length; j ++) {

// Recopila cada grupo de predicciones para el modelo actual en un FastVector
Predicciones FastVector = nuevo FastVector ();

// Para cada par dividido de prueba de entrenamiento, entrene y pruebe el clasificador
for (int i = 0; i <trainingSplits.length; i ++) {
Validación de evaluación = clasificar (modelos [j], trainingSplits [i], testingSplits [i]);

predictions.appendElements (validation.predictions ());

// Descomente para ver el resumen de cada par de entrenamiento-prueba.
//System.out.println (modelos [j] .toString ());
}

// Calcular la precisión general del clasificador actual en todas las divisiones
precisión doble = calcular precisión (predicciones);

// Imprime el nombre y la precisión del clasificador actual de forma complicada,
// pero de una manera bonita.
System.out.println (“Precisión de” + modelos [j] .getClass (). GetSimpleName () + “:”
+ String.format (“%. 2f %%”, precisión)
+ “\ n ———————————”);
}

}
}

La vista del paquete de su proyecto debería ser similar a la siguiente:

Referencias
1. http://www.cs.umb.edu/~ding/hist…
2. http://www.cs.ru.nl/P.Lucas/teac…

Bueno, hay un código muy simple, ¡te presento el perceptrón!

Nuestro código solo aprenderá cómo funciona “y” o “o”. Implementé esto en mis clases de IA.

Perceptrón de clase pública {
privados int [] poids;

Perceptrón (int taille) {
poids = new int [taille];
poids [0] = 0;
poids [1] = 1;
poids [2] = 0;
}

public int eval (int [] input) {
int salida = 0, i;
para (i = 0; i salida + = entrada [i] * poids [i];
}
salida + = poids [i];
retorno (salida> = 0)? 1: 0;
}

public void learn (int [] input, int esperado) {
int salida, erreur, i;

salida = eval (entrada);
erreur = esperado – salida;
if (esperado! = salida) {
// Mise à jour des poids si la salida n’est pas bonne
para (i = 0; i if (entrada [i] == 1)
poids [i] + = erreur;
}
poids [i ++] + = erreur;
}
System.out.println (“|” + input [0] + “” + input [1] + “” + 1 + “” + “|” + output + “|” + esperado + “|” + erreur + ” | “+ poids [0] +” “+ poids [1] +” “+ poids [2] +” | “);
}

public static void main (String [] args) {
Perceptron AND = nuevo Perceptron (3);
int [] tab = {0, 0};
System.out.println (“Y”);
para (int i = 0; i <6; i ++) {
tab [0] = 0; tab [1] = 0;
AND.learn (tab, 0);
tab [0] = 0; tab [1] = 1;
AND.learn (tab, 0);
tab [0] = 1; tab [1] = 0;
AND.learn (tab, 0);
tab [0] = 1; tab [1] = 1;
AND.learn (tab, 1);
}
}

}

Bueno, esto está lejos de ser perfecto, pero funciona (solo soy un estudiante). El perceptrón sabrá ahora cómo usar una “y”. Realmente no recuerdo cómo funciona esto, debería comprobarlo. Pero sin necesidad de bibliotecas, creo que este es uno de los códigos de aprendizaje automático más cortos que se podría escribir.

(lo siento, codifiqué en francés, algunas de las variables o comentarios podrían no estar en inglés)

More Interesting

¿Qué es la indexación semántica latente?

¿Qué tan importante es el aprendizaje profundo en la conducción autónoma?

¿Habrá una demanda de aceleradores de hardware para algoritmos de aprendizaje automático en el futuro cercano?

¿Qué métrica de rendimiento debo elegir para evaluar un modelo de clasificación?

¿Cuál es la diferencia entre la agrupación de texto y la clasificación de texto?

¿Cómo podemos usar la cadena de Monte Carlo Markov y bayesiano no paramétrico para la reducción de dimensionalidad?

¿Por qué no es una buena idea tener el mismo tren y equipo de prueba?

¿Cómo se elige una función de activación? He notado que las funciones más utilizadas se parecen, especialmente cerca de 0. ¿Tienen que ajustarse a algún comportamiento específico? ¿Es este un tema de investigación abierto? ¿Hace una gran diferencia en los resultados?

¿Qué tipo de proyectos de aprendizaje automático puedo hacer? ¿Qué libros me recomiendan aprender? Estoy interesado en usar Python.

¿Puedo crear un conjunto de datos y luego usarlo para evaluar un algoritmo de clasificación?

Cómo preprocesar el conjunto de datos de correo electrónico de Enron

¿Qué es una explicación intuitiva de los coeficientes de regresión logística?

¿Cuál es el mejor enfoque e implementación para la detección y reconocimiento de objetos en la actualidad?

¿Cuándo debo coseno similitud? ¿Se puede usar para la agrupación?

¿Son los modelos de aprendizaje profundo / redes neuronales siempre superiores en las tareas de PNL?