Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import java.util.Random;
- public class LVQ {
- public double [][] matrizDePesos,treinamento;
- public double [] classes;
- // recebe a matriz de treinamento, suas classes, o numero de epocas, a taxa de aprendizado e o decremento
- public LVQ(double [][] treinamento, double [] classes, int epocas , double decremento, double taxaDeAprendizado){
- this.treinamento = treinamento;
- this.classes = classes;
- treinamento(epocas, decremento, taxaDeAprendizado, treinamento);
- }
- // inicia a matirz de pesos com pesos aleatórios, e treina a rede para um determinado conjunto de treinamento
- public void treinamento(int epocas, double decremento, double taxaDeAprendizado, double [][] treinamento){
- matrizDePesos = gerarPesosAleatórios();
- for (int e = 0; e<epocas; e++){
- for(int i = 0; i<treinamento.length;i++){
- double distancia;
- double distanciaVencedora = calculaDistanciaEuclidiana(treinamento[i],matrizDePesos[0]);
- int classeVencedora = 0;
- for(int j=0; j<10;j++){
- distancia = calculaDistanciaEuclidiana(treinamento[i],matrizDePesos[j]);
- if (distancia <distanciaVencedora){
- distanciaVencedora = distancia;
- classeVencedora = j;
- }
- }
- if (classeVencedora == classes[i]){
- for (int k = 0; k< treinamento[k].length ;k++){
- }
- }
- else {
- for (int k = 0; k< treinamento[k].length ;k++){
- }
- }
- }
- taxaDeAprendizado = diminuiTaxaAprendizado(decremento, taxaDeAprendizado);
- }
- }
- // retorna a matriz de confusao para os dados de teste
- public int [][] matrizDeConfusao(double [][] testes, double [] classe){
- int [][] confusao = new int [10][10];
- for(int i = 0; i<testes.length;i++){
- double distancia;
- double distanciaVencedora = calculaDistanciaEuclidiana(testes[i],matrizDePesos[0]);
- double classeVencedora = 0;
- for(int j=0; j<10;j++){
- distancia = calculaDistanciaEuclidiana(testes[i],matrizDePesos[j]);
- if (distancia <distanciaVencedora){
- distanciaVencedora = distancia;
- classeVencedora = j;
- }
- }
- int linha = (int)( classe[i]*10);
- int coluna = (int)classeVencedora;
- confusao[linha][coluna]++;
- }
- return confusao;
- }
- //gera pesos aleatórios para todas as classes
- public double [][] gerarPesosAleatórios(){
- Random numero = new Random();
- double pesos [][] = new double [10][treinamento[0].length];
- for (int i = 0; i<pesos.length; i++){
- for (int j = 0; j< pesos[i].length; j++){
- pesos[i][j] = numero.nextDouble();
- }
- }
- return pesos;
- }
- // calcula a distancia euclidiana entre dois vetores
- public double calculaDistanciaEuclidiana(double [] treinamento, double [] pesos){
- double distancia = 0;
- for (int i=0; i<treinamento.length;i++){
- distancia = distancia + Math.pow(treinamento[i]-pesos[i], 2);
- }
- return Math.sqrt(distancia);
- }
- //diminui a taxa de aprendizado com uma constante chamada decremento
- public double diminuiTaxaAprendizado(double decremento, double taxaDeAprendizado){
- return taxaDeAprendizado *= decremento;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement