Reducción Dimensiones Usando Entropía

30 Ene

Para este algoritmo se utilizó el algoritmo de Distancia de Hamming y se realizaron todas las adecuaciones para ir buscando la mínima entropía eliminando columnas de datos hasta al final tener solamente 2 columnas. Tener en cuenta que como el desarrollo se realizo en c# las columnas inician en 0.
Para ayuda de vectores se usó la librería Math.Net Numerics

  1. public static string Entropy(ArrayList arrText)
  2. {
  3. string retorno = “”;
  4. //Total de columnas
  5. string sT = arrText[0].ToString();
  6. double F = (double)Tools.ContarEjemplos(sT, “,”);
  7. double E = 0;
  8. int i, j = 0;
  9. DenseMatrix S = new DenseMatrix(arrText.Count, arrText.Count, 0);
  10. for (i = 0; i < arrText.Count; i++)
  11. {
  12. for (j = i + 1; j < arrText.Count; j++)
  13. {
  14. S[i, j] = Tools.HammingDistance(arrText[i].ToString().Replace(“,”, “”), arrText[j].ToString().Replace(“,”, “”)) / F;
  15. }
  16. }
  17. //A diferencia de la formula en c# la matrix inicia en 0, 0
  18. for (i = 0; i < arrText.Count – 1; i++)
  19. {
  20. for (j = i + 1; j < arrText.Count; j++)
  21. {
  22. if (S[i, j] > 0 && S[i, j] < 1)
  23. {
  24. E += (S[i, j] * Math.Log10(S[i, j]) + (1 – S[i, j]) * Math.Log10(1 – S[i, j]));
  25. }
  26. }
  27. }
  28. E = -1 * E;
  29. //Calcular las entropias eliminando una columna. Se guarda la minima.
  30. double MinE = E;
  31. double NewE = E;
  32. int indiceMinE = 0;
  33. double TempE = 0;
  34. int totalF = (int)F;
  35. for (int features = totalF; features >= 2; features–)
  36. {
  37. F = features;
  38. indiceMinE = 0;
  39. for (int f = 0; f < F; f++)
  40. {
  41. S.Clear();
  42. TempE = 0;
  43. for (i = 0; i < arrText.Count; i++)
  44. {
  45. for (j = i + 1; j < arrText.Count; j++)
  46. {
  47. S[i, j] = Tools.HammingDistance(arrText[i].ToString().Replace(“,”, “”).Remove(f, 1), arrText[j].ToString().Replace(“,”, “”).Remove(f, 1)) / (F – 1);
  48. }
  49. }
  50. //A diferencia de la formula en c# la matrix inicia en 0, 0
  51. for (i = 0; i < arrText.Count – 1; i++)
  52. {
  53. for (j = i + 1; j < arrText.Count; j++)
  54. {
  55. if (S[i, j] > 0 && S[i, j] < 1)
  56. {
  57. TempE += (S[i, j] * Math.Log10(S[i, j]) + (1 – S[i, j]) * Math.Log10(1 – S[i, j]));
  58. }
  59. }
  60. }
  61. TempE = -1 * TempE;
  62. if (Math.Abs(E – TempE) < MinE)
  63. {
  64. MinE = Math.Abs(E – TempE);
  65. NewE = TempE;
  66. indiceMinE = f;
  67. }
  68. }
  69. //Se suma 1 al indice porque en c# los indices inician en 0
  70. retorno += “Columna con Entropia minima: ” + (indiceMinE + 1).ToString() + “\n”;
  71. //Eliminar la caracteristica del conjunto de datos
  72. for (i = 0; i < arrText.Count; i++)
  73. {
  74. arrText[i] = arrText[i].ToString().Replace(“,”, “”).Remove(indiceMinE, 1);
  75. }
  76. //Asignar el nuevo E
  77. E = NewE;
  78. MinE = E;
  79. }
  80. return retorno;
  81. }
Anuncios

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

Psyche's Circuitry

Thoughts on growing up and growing old in the digital age

digiphile

We're already living in the future. It's just not evenly distrbuted yet.

TED Blog

The TED Blog shares interesting news about TED, TED Talks video, the TED Prize and more.

Why? Because Science.

Combating Stupidity Since 2012

TechCrunch

Startup and Technology News

Skeptical Software Tools

Applying the power of the programmable web to the purposes of skepticism.

CNNEspañol.com

Ultimas Noticias de Estados Unidos, Latinoamérica y el Mundo, Opinión y Videos

Negocios, Mujer y Tecnología

Desde una perspectiva diferente

MSexcel

Un pequeño aporte para todos :)

Omar Barrera

whats are you doing?

Era 2.0

Mi rincón sobre marketing y nuevas tecnologías

Desarrollo e ingeniería

Desarrollo de soluciones en informática

A %d blogueros les gusta esto: