Advertisement
Guest User

Untitled

a guest
May 24th, 2015
222
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.01 KB | None | 0 0
  1. import java.util.Random;
  2. public class LVQ {
  3. public double [][] matrizDePesos,treinamento;
  4. public double [] classes;
  5. // recebe a matriz de treinamento, suas classes, o numero de epocas, a taxa de aprendizado e o decremento
  6. public LVQ(double [][] treinamento, double [] classes, int epocas , double decremento, double taxaDeAprendizado){
  7. this.treinamento = treinamento;
  8. this.classes = classes;
  9. treinamento(epocas, decremento, taxaDeAprendizado, treinamento);
  10. }
  11. // inicia a matirz de pesos com pesos aleatórios, e treina a rede para um determinado conjunto de treinamento
  12. public void treinamento(int epocas, double decremento, double taxaDeAprendizado, double [][] treinamento){
  13. matrizDePesos = gerarPesosAleatórios();
  14. for (int e = 0; e<epocas; e++){
  15. for(int i = 0; i<treinamento.length;i++){
  16. double distancia;
  17. double distanciaVencedora = calculaDistanciaEuclidiana(treinamento[i],matrizDePesos[0]);
  18. int classeVencedora = 0;
  19. for(int j=0; j<10;j++){
  20. distancia = calculaDistanciaEuclidiana(treinamento[i],matrizDePesos[j]);
  21. if (distancia <distanciaVencedora){
  22. distanciaVencedora = distancia;
  23. classeVencedora = j;
  24. }
  25. }
  26. if (classeVencedora == classes[i]){
  27. for (int k = 0; k< treinamento[k].length ;k++){
  28. }
  29. }
  30. else {
  31. for (int k = 0; k< treinamento[k].length ;k++){
  32. }
  33. }
  34. }
  35. taxaDeAprendizado = diminuiTaxaAprendizado(decremento, taxaDeAprendizado);
  36. }
  37. }
  38. // retorna a matriz de confusao para os dados de teste
  39. public int [][] matrizDeConfusao(double [][] testes, double [] classe){
  40. int [][] confusao = new int [10][10];
  41. for(int i = 0; i<testes.length;i++){
  42. double distancia;
  43. double distanciaVencedora = calculaDistanciaEuclidiana(testes[i],matrizDePesos[0]);
  44. double classeVencedora = 0;
  45. for(int j=0; j<10;j++){
  46. distancia = calculaDistanciaEuclidiana(testes[i],matrizDePesos[j]);
  47. if (distancia <distanciaVencedora){
  48. distanciaVencedora = distancia;
  49. classeVencedora = j;
  50. }
  51. }
  52. int linha = (int)( classe[i]*10);
  53. int coluna = (int)classeVencedora;
  54. confusao[linha][coluna]++;
  55.  
  56. }
  57. return confusao;
  58. }
  59. //gera pesos aleatórios para todas as classes
  60. public double [][] gerarPesosAleatórios(){
  61. Random numero = new Random();
  62. double pesos [][] = new double [10][treinamento[0].length];
  63. for (int i = 0; i<pesos.length; i++){
  64. for (int j = 0; j< pesos[i].length; j++){
  65. pesos[i][j] = numero.nextDouble();
  66. }
  67. }
  68. return pesos;
  69. }
  70.  
  71. // calcula a distancia euclidiana entre dois vetores
  72. public double calculaDistanciaEuclidiana(double [] treinamento, double [] pesos){
  73. double distancia = 0;
  74. for (int i=0; i<treinamento.length;i++){
  75. distancia = distancia + Math.pow(treinamento[i]-pesos[i], 2);
  76. }
  77. return Math.sqrt(distancia);
  78.  
  79. }
  80. //diminui a taxa de aprendizado com uma constante chamada decremento
  81. public double diminuiTaxaAprendizado(double decremento, double taxaDeAprendizado){
  82. return taxaDeAprendizado *= decremento;
  83. }
  84. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement