Utilizando la libreria de weka.jar, la pueden descargar en Pagina Oficial Weka
Weka es un software programado en Java que está orientado a la extracción de conocimientos desde bases de datos con grandes cantidades de información, se tiene mucho algoritmos echos para Redes Neuronales, Minería de Datos, Problemas de Clasificación, Redes Bayesianas, entre otras…
En este caso voy a poner el código de un ejemplo donde utilizo la librería weka.jar llamada desde JAVA
En este caso utilizo 5 algoritmos que son usados para clasificación: Ridor, ZeroR, PART, NNge, M5Rules
CODIGO:
/* * To change this template, choose Tools | Templates * and open the template in the editor. */ package wekadatamining; /** * * @author ING.HENRY.PAZ * @correo ing.henry.14@gmail.com * @https://publicacioneshenry.wordpress.com * */ import javax.swing.JOptionPane; import weka.classifiers.Classifier; import weka.classifiers.Evaluation; import weka.classifiers.rules.M5Rules; import weka.classifiers.rules.NNge; import weka.classifiers.rules.PART; import weka.classifiers.rules.Ridor; import weka.classifiers.rules.ZeroR; import weka.core.Debug.Random; import weka.core.Instances; import weka.core.converters.ConverterUtils.DataSource; public class Algoritmos { //variable de resultados String resultado = "\n"; //variable de datos del archivo xxxx.arff String datosarchivo = "\n"; //variable de la ruta del archivo String ruta; //variable de las Instances del archivo Instances coleccion; //variable del fold del cross-validation int crossValidation; //variable de tipo de evaluacion int tipo; public int getTipo() { return tipo; } public void setTipo(int tipo) { this.tipo = tipo; } public int getCrossValidation() { return crossValidation; } public void setCrossValidation(int crossValidation) { this.crossValidation = crossValidation; } public Algoritmos(String ruta) { this.ruta = ruta; } //Conjunto de datos del archivo .arrf public String datos() { try { DataSource ar = new DataSource(ruta); coleccion = ar.getDataSet(); coleccion.setClassIndex(coleccion.numAttributes() - 1); //presentar la coleccion de entrenamiento datosarchivo = datosarchivo + "\nColeccion de entrenamiento:\n"; datosarchivo = datosarchivo + coleccion.toString(); } catch (Exception ex) { datosarchivo = ex.toString(); } return datosarchivo; } //algoritmo RIDOR public String ejecutarRidor() { resultado = "\n"; Ridor ridor = new Ridor(); try { //Construyendo el clasificador ridor.buildClassifier(coleccion); //llama al metodo para obtener la matrixConfusion String matrix = matrixConfusion(ridor); resultado = resultado + ridor.toString(); resultado = resultado + matrix; } catch (Exception exception) { resultado = exception.toString(); mostrarMsj(); } return resultado; } //algoritmo ZeroR public String ejecutarZeroR() { resultado = "\n"; ZeroR zeror = new ZeroR(); try { zeror.buildClassifier(coleccion); String matrix = matrixConfusion(zeror); resultado = resultado + zeror.toString(); resultado = resultado + matrix; } catch (Exception exception) { resultado = exception.toString(); mostrarMsj(); } return resultado; } //algoritmo Part public String ejecutarPart() { resultado = "\n"; PART part = new PART(); try { part.buildClassifier(coleccion); String matrix = matrixConfusion(part); resultado = resultado + part.toString(); resultado = resultado + matrix; } catch (Exception exception) { resultado = exception.toString(); mostrarMsj(); } return resultado; } //algoritmo NNge public String ejecutarNNge() { resultado = "\n"; NNge nnge = new NNge(); try { nnge.buildClassifier(coleccion); String matrix = matrixConfusion(nnge); resultado = resultado + nnge.toString(); resultado = resultado + matrix; } catch (Exception exception) { resultado = exception.toString(); mostrarMsj(); } return resultado; } //algoritmo M5Rules public String ejecutarM5Rules() { resultado = "\n"; M5Rules m5rules = new M5Rules(); try { m5rules.buildClassifier(coleccion); String matrix = matrixConfusion(m5rules); resultado = resultado + m5rules.toString(); resultado = resultado + matrix; } catch (Exception exception) { resultado = exception.toString(); mostrarMsj(); } return resultado; } public void mostrarMsj() { JOptionPane.showMessageDialog(null, "Trate de ejecutar con otro algoritmo", "Error", JOptionPane.ERROR_MESSAGE); } //Metodo para matrixConfusion public String matrixConfusion(Classifier classifier) { String matrix = "\n"; //Modelo de Test Evaluation eTest; try { eTest = new Evaluation(coleccion); // es 1 si utiliza cross validation caso contrario utiliza todo // el conjungo de datos para evaluar el modelo if (tipo != 1) { Random rand = new Random(1); //los FOLDS para cross-validation int folds = getCrossValidation(); //llamando al metodo cross-validation eTest.crossValidateModel(classifier, coleccion, folds, rand); } else { eTest.evaluateModel(classifier, coleccion); } //Muestra el resumen de la evaluacion String strSummary = eTest.toSummaryString(); matrix = matrix + " ===== SUMARY =====\n" + strSummary; // obtener confusion matrix matrix = matrix + eTest.toMatrixString(); } catch (Exception ex) { JOptionPane.showMessageDialog(null, ex.toString(), "ERROR", JOptionPane.ERROR_MESSAGE); } return matrix; } }
En uno de los métodos se está obteniendo la matriz de Confusión (CONFUSION MATRIX), una de las partes muy importantes al momento de clasificar.
Y también algo importante es la obtención de las reglas de decisión (el conocimiento extraído de la BD para tomar decisiones).
Tendrán que ejecutarlo para que puedan ver los resultados, son diferentes algoritmos para que se pueda utilizar el mejor.
La aplicación que hice fue muy pequeña, pero lo importante es que funciona y se pueden ver los resultados del clasificador.
A los que les interesa el tema y si quieres todo el sistema completo esta aquí DataMining pesa 5.6MB subido en MediaFire
Fuentes:
Este es un ejemplo de un Sistema experto, con su respectivo grado de certidumbre en sus reglas de producción, ya que sin este grado de certidumbre no tiene sentido llamar Sistema Experto: Sistema Experto
It is a detailed consultation on Knowledge-Based Systems.
Es una consulta pequeña acerca de los Sistemas Basados en Conocimiento.
Después he de subir más información
Bueno aca les dejo una aplicación con J2ME, lo que hago es conectar una aplicación móvil mediante un servlets que este se coneta a MySQL, y una pequeña pagina JSP… por cierto todo esta en NetBeans, es algo muy sencillo, luego estaré subiendo todo un sistema Midlet completo.
Acá el código
copyright
BD:
GRANT ALL PRIVILEGES ON servidorlaptop.* TO ‘TuUser’@’localhost’ IDENTIFIED BY ‘TuPass’ WITH GRANT OPTION;
JSP:
<%– Document : index Created on : 29/11/2010, 10:04:46 PM
Author : Henry Paz –%>
<%@page contentType=»text/html» pageEncoding=»UTF-8″%>
<!DOCTYPE HTML PUBLIC «-//W3C//DTD HTML 4.01 Transitional//EN»
«http://www.w3.org/TR/html4/loose.dtd»>
<html>
<head>
<meta http-equiv=»Content-Type» content=»text/html; charset=UTF-8″>
<title>JSP Page</title>
</head>
<body>
<form action=»HelloServlets» method=»POST»>
Ingrese su nombre: <input type=»text» name=»nombre» value=»» size=»45″ />
Ingrese su password: <input type=»text» name=»pass» value=»» size=»45″ />
<input type=»submit» value=»Enviar» name=»enviar» />
</form>
</body>
</html>
SERVLETS:
//supongo que ya saben como cargar los Servlet, pero el nombre de la clase es: HelloServlets extends HttpServlet
protected void processRequest(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setContentType(«text/html;charset=UTF-8»);
PrintWriter out = response.getWriter();
String usuario = request.getParameter(«nombre»);
String clave = request.getParameter(«pass»);
String respuesta = «»;
try {
Class.forName(«com.mysql.jdbc.Driver»);
Connection conexion = DriverManager.getConnection(«jdbc:mysql://» +
«localhost:3306/ServidorLaptop», «root», «root»);
Statement sentencia = conexion.createStatement();
ResultSet rs = sentencia.executeQuery(«SELECT idUser FROM » +
«user WHERE User='» + usuario + «‘ AND password='» + clave + «‘»);
rs.last();
if (rs.getRow() == 0) {
respuesta = «0»;
} else {
respuesta = String.valueOf(rs.getInt(1));
}
conexion.close();
sentencia.close();
} catch (Throwable t) {
out.println(«Error. » + t.toString()); //mensaje = «Error. » + t.toString();
} finally {
out.println(respuesta);
out.close();
}
MIDLET:
Bueno se puede correr con ToolKit para celulares, y por cierto para hacer correr desde el celular y conectarse con la laptop se tiene que configurar la red.
http://www.4shared.com/file/_tfbtGy-/Coneccion.html
http://www.4shared.com/file/lMXDyVVV/Coneccion.html
copyright
Tienen que bajarlo(.jad y .jar), pasarlo al celular por Bluetooth por cable o como quiera, celulares que soporte Java, por lo regular palm, lo probé en mi Samsung y si funciona…
Ahi les muestro el codigo del Midlet, es algo simple solo verifica el user y password y enlaza otra ventana, luego subo la conección con un servidor web echo con JSP y JSF, autentificando el usuario desde el servidor.
Por lo pronto el primero, por cierto la configuracion del Midlet esta en DefaultColorPhone con CLDC-1.1 y MIDP-2.0, es para q funcione en mi samsung, supongo que si soporta y funciona en la mayoría.
el User y password para login es » h » » h »
CODIGO:
En este portafolio de evidencias se presenta diferentes temas para entender el comportamiento aprendizaje de las redes neuronales, tanto de manera supervisada como no supervisada.
Redes Neuronales (Supervisado y no Supervisado)
Aprendizaje supervisado de Redes Neuronales, todo esta codificado en Matlab, al menos los algoritmos básicos para que se entienda el funcionamiento.
Algo parecido a las redes Competitivas, la diferencia radica en que también se modifican los pesos de las neuronas vecinas.
Otro tipo de Redes Neuronales Artificiales
Ahi esta la libreria, es para utilizar matrices (Las clases son Matrix)TomaDecisionesAHP
No olviden mencionar las fuentes