Advertisement
Guest User

Untitled

a guest
May 6th, 2015
230
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 4.33 KB | None | 0 0
  1. # Enrico Costanzo (201124039)
  2.  
  3. import os
  4. from math import pow, sqrt, fabs
  5. from numpy import std, mean
  6.  
  7. clear = lambda: os.system('cls')
  8.  
  9. class Point:
  10.     def __init__(self, x, y, c):
  11.         self.x = x
  12.         self.y = y
  13.         self.c = c # class 1 or -1
  14.        
  15. class ResultObject:
  16.     def __init__(self,
  17.                  mean_x_class0, mean_y_class0, mean_x_class1, mean_y_class1,
  18.                  stddev_x_class0, stddev_y_class0, stddev_x_class1, stddev_y_class1):
  19.         self.mean_x_class0 = mean_x_class0
  20.         self.mean_y_class0 = mean_y_class0
  21.         self.mean_x_class1 = mean_x_class1
  22.         self.mean_y_class1 = mean_y_class1
  23.        
  24.         self.stddev_x_class0 = stddev_x_class0
  25.         self.stddev_y_class0 = stddev_y_class0
  26.         self.stddev_x_class1 = stddev_x_class1
  27.         self.stddev_y_class1 = stddev_y_class1
  28.  
  29. def die(error_message):
  30.     raise Exception(error_message)
  31.        
  32. def read_data(filename):
  33.     f = open(filename)
  34.     data_line = False
  35.     data = []
  36.     for l in f:
  37.         l = l.strip()
  38.         if data_line:
  39.             content = [float(x) for x in l.split(',')]
  40.             if len(content) == 3:
  41.                 data.append(content)
  42.         else:
  43.             if l.startswith('@DATA'):
  44.                 data_line = True
  45.     return data
  46.    
  47. def xmean(data, axis): # axis: 0=x 1=y
  48.     tmp = []
  49.     for d in data:
  50.         tmp.append(d.x) if axis == 0 else tmp.append(d.y)
  51.    
  52.     return mean(tmp)
  53.    
  54. def stddev(data, axis): # axis: 0=x 1=y
  55.     tmp = []
  56.     for d in data:
  57.         tmp.append(d.x) if axis == 0 else tmp.append(d.y)
  58.    
  59.     return std(tmp)
  60.        
  61.        
  62. def train(data):   
  63.     class0 = [] # Class 1
  64.     class1 = [] # Class -1
  65.  
  66.     for d in data:
  67.         p = Point(d[0], d[1], d[2])
  68.         class0.append(p) if(p.c > 0) else class1.append(p)
  69.    
  70.     # Mean X and Y for Class 1
  71.     mean_x_class0 = xmean(class0, 0) #x
  72.     mean_y_class0 = xmean(class0, 1)
  73.    
  74.     # Mean X and Y for Class -1
  75.     mean_x_class1 = xmean(class1, 0) #x
  76.     mean_y_class1 = xmean(class1, 1)
  77.    
  78.     # Standard Deviation X and Y for Class 1
  79.     stddev_x_class0 = stddev(class0, 0) #x
  80.     stddev_y_class0 = stddev(class0, 1)
  81.    
  82.     # Standard Deviation X and Y for Class -1
  83.     stddev_x_class1 = stddev(class1, 0) #x
  84.     stddev_y_class1 = stddev(class1, 1)
  85.  
  86.     res = ResultObject(
  87.         mean_x_class0, mean_y_class0, mean_x_class1, mean_y_class1,
  88.         stddev_x_class0, stddev_y_class0, stddev_x_class1, stddev_y_class1
  89.     )
  90.    
  91.     return res
  92.    
  93. def test(p, r):
  94.     # Vorhersage anhand der Standardabweichung
  95.     if (fabs(p.x - r.mean_x_class0) < fabs(p.x - r.mean_x_class1)) or (fabs(p.y - r.mean_y_class0) < fabs(p.y - r.mean_y_class1)):
  96.         prediction1 = 1
  97.     else:
  98.         prediction1 = -1
  99.        
  100.     # Vorhersage anhand des Durchschnittswertes
  101.     l1 = sqrt(fabs(pow(p.x - r.mean_x_class1, 2)) + pow(fabs(p.y - r.mean_y_class1), 2))
  102.     l2 = sqrt(fabs(pow(p.x - r.mean_x_class0, 2)) + pow(fabs(p.y - r.mean_y_class0), 2))   
  103.    
  104.     prediction2 = -1 if l1 <= l2 else 1
  105.    
  106.     if prediction1 == prediction2:
  107.         # 2/2 richtige Vorhersagen
  108.         # Egal welche, da beide gleich sind
  109.         prediction = prediction1
  110.     elif prediction1 != prediction2:
  111.         # 1/2 richtige Vorhersagen
  112.         #Im Zweifel verlassen wir uns auf den Durchschnittswert
  113.         prediction = prediction2
  114.    
  115.     return prediction == p.c
  116.    
  117. def print_results(r):
  118.     clear()
  119.     print
  120.     print "Class -1"
  121.     print
  122.     print "Attribute X"
  123.     print "Mean:   ", r.mean_x_class1
  124.     print "StdDev: ", r.stddev_x_class1
  125.     print
  126.     print "Attribute Y"
  127.     print "Mean:   ", r.mean_y_class1
  128.     print "StdDev: ", r.stddev_y_class1
  129.     print
  130.     print
  131.     print "Class 1"
  132.     print
  133.     print "Attribute X"
  134.     print "Mean:   ", r.mean_x_class0
  135.     print "StdDev: ", r.stddev_x_class0
  136.     print
  137.     print "Attribute Y"
  138.     print "Mean:   ", r.mean_y_class0
  139.     print "StdDev: ", r.stddev_y_class0
  140.    
  141. def eval_data(data, r):
  142.     error_count = 0
  143.     num_samples = 0
  144.    
  145.     for d in data:
  146.         p = Point(d[0], d[1], d[2])
  147.        
  148.         num_samples += 1
  149.        
  150.         if not test(p, r):
  151.             error_count += 1
  152.        
  153.     return error_count, num_samples
  154.    
  155. if __name__ == "__main__":
  156.     train_data = read_data("train.arff")
  157.     train_results = train(train_data)
  158.     print_results(train_results)
  159.    
  160.     test_data = read_data("eval.arff")
  161.     error_absolute, num_samples = eval_data(test_data, train_results)
  162.     error_quota = ((100 * error_absolute) / num_samples)
  163.    
  164.     print
  165.     print "Correctly Classified Instances\t\t"  ,num_samples - error_absolute, "\t", 100 - error_quota ,"%"
  166.     print "Incorrectly Classified Instances\t",error_absolute,      "\t", error_quota,"%"
  167.     print "Number of samples\t\t\t", num_samples
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement