Advertisement
Guest User

Untitled

a guest
Nov 22nd, 2019
164
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.62 KB | None | 0 0
  1. Własność Kamila Kubicy wszelkie prawa zastrzeżone, wzory są zapewne te same więc korzystajcie z tego wszyscy :)
  2. using System;
  3. using System.Collections;
  4. using System.Linq;
  5. using System.Xml.XPath;
  6.  
  7. namespace VectorDistanceMeasures
  8. {
  9. class Program
  10. {
  11. static void Main(string[] args)
  12. {
  13. var v1 = new float[] { 13, 22, 43, 54, 25, 46, 17 };
  14. var v2 = new float[] { 6, 16, 21, 54, 33, 20, 17 };
  15. var w = new float[] { 1, 2, 3, 4, 5, 6, 7 };
  16.  
  17. var vb1 = new int[] {1, 0, 1, 1, 0, 0, 1, 1, 0};
  18. var vb2 = new int[] {0, 1, 0, 1, 1, 0, 0, 1, 1};
  19.  
  20. var vs1 = new string[] {"Kamil","Ala","Domek","Samochod","Kolo","Okno","Drzwi"};
  21. var vs2 = new string[] { "Ala", "Kamil", "Kolo", "Samochod", "Drzwi", "Alina", "Fotel" };
  22.  
  23.  
  24. WriteLineVector(v1);
  25. WriteLineVector(v2);
  26.  
  27. Console.WriteLine($"Dystans Minkowski: {DistanceForNumericAtributes(v1,v2)}");
  28. Console.WriteLine($"Dystans Minkowski z wagami: {DistanceForNumericAtributesWithWages(v1, v2,w)}");
  29. Console.WriteLine();
  30.  
  31. WriteLineVector(vb1);
  32. WriteLineVector(vb2);
  33. Console.WriteLine($"Dystans Binarny: {DistanceForBinaresAttributes(vb1, vb2)}");
  34. Console.WriteLine($"DystansJaccard: {DistanceForBinaresAttributesJaccard(vb1, vb2)}");
  35. Console.WriteLine();
  36.  
  37. WriteLineVector(vs1);
  38. WriteLineVector(vs2);
  39. Console.WriteLine($"Dystans Nominalny kolejność: {DistanceForNominalAttributes(vs1, vs2)}");
  40. Console.WriteLine($"Dystans Nominaly zawartosć: {DistanceForNominalAttributesContains(vs1,vs2)}");
  41. Console.WriteLine();
  42.  
  43. }
  44.  
  45. private static void WriteLineVector(IEnumerable vector)
  46. {
  47. Console.Write("[");
  48. foreach (var item in vector)
  49. {
  50. Console.Write($" {item}");
  51. }
  52. Console.WriteLine("] ");
  53. }
  54.  
  55. private static double DistanceForNumericAtributes(float [] xi,float [] xj)
  56. {
  57. double d = 0;
  58. var g = xi.Length;
  59.  
  60. for (int i = 0; i < g; i++)
  61. {
  62. d += Math.Pow(Math.Abs(xi[i]-xj[i]),g);
  63. }
  64. return Math.Pow(d, 1.0/g);
  65. }
  66. private static double DistanceForNumericAtributesWithWages(float[] xi, float[] xj,float [] wp)
  67. {
  68. double d = 0;
  69. var g = xi.Length;
  70.  
  71. for (int i = 0; i < g; i++)
  72. {
  73. d += wp[i]*Math.Pow(Math.Abs(xi[i] - xj[i]), g);
  74. }
  75. return Math.Pow(d, 1.0 / g);
  76. }
  77. private static double DistanceForBinaresAttributes(int[] xi, int[] xj)
  78. {
  79. var noEqual = 0;
  80. var q = 0;
  81. var t = 0;
  82. var n= xi.Length;
  83.  
  84. for (int i = 0; i < n; i++)
  85. {
  86. if (xi[i]==0&&xj[i]==0)
  87. {
  88. t++;
  89. }
  90. if (xi[i] == 1 && xj[i] == 1)
  91. {
  92. q++;
  93. }
  94. else
  95. {
  96. noEqual++; //r+s
  97. }
  98. }
  99. return (1.0*noEqual/(noEqual+q+t));
  100. }
  101. private static double DistanceForBinaresAttributesJaccard(int[] xi, int[] xj)
  102. {
  103. var noEqual = 0;
  104. var q = 0;
  105. var n = xi.Length;
  106.  
  107. for (int i = 0; i < n; i++)
  108. {
  109. if (xi[i] == 1 && xj[i] == 1)
  110. {
  111. q++;
  112. }
  113. else
  114. {
  115. noEqual++; //r+s
  116. }
  117. }
  118. return (1.0*noEqual / (noEqual + q));
  119. }
  120. private static double DistanceForNominalAttributes(string[] xi, string[] xj)
  121. {
  122. var p = xi.Length;
  123. var m = 0;
  124.  
  125. for (int i = 0; i < p; i++)
  126. {
  127. if (xi[i] == xj[i])
  128. {
  129. m++;
  130. }
  131. }
  132. return (1.0*(p-m)/p);
  133. }
  134. private static double DistanceForNominalAttributesContains(string[] xi, string[] xj)
  135. {
  136. var p = xi.Length;
  137. var m = 0;
  138.  
  139. for (int i = 0; i < p; i++)
  140. {
  141. if ( xj.Contains(xi[i]))
  142. {
  143. m++;
  144. }
  145. }
  146. return (1.0*(p - m) / p);
  147. }
  148. }
  149. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement