svm.py 1.1 KB

123456789101112131415161718192021222324252627282930313233343536
  1. import numpy as np
  2. from sklearn import svm
  3. def get_one_hot(targets, nb_classes):
  4. res = np.eye(nb_classes)[np.array(targets).reshape(-1)]
  5. return res.reshape(list(targets.shape)+[nb_classes])
  6. def load(file):
  7. raw_data = np.loadtxt(file, delimiter=',')
  8. data_size = len(raw_data)
  9. np.random.shuffle(raw_data)
  10. ret = np.split(raw_data, [1,], axis=1)
  11. return ret
  12. train_pieces = load('SPECT.train')
  13. train_label = train_pieces[0]
  14. train_data = train_pieces[1]
  15. train_label = train_label.flatten().astype(int)
  16. val_pieces = load('SPECT.test')
  17. val_label = val_pieces[0]
  18. val_data = val_pieces[1]
  19. val_label = val_label.flatten().astype(int)
  20. clf = svm.SVC(gamma='scale')
  21. clf.fit(train_data, train_label)
  22. pred = clf.predict(val_data)
  23. TP = sum(pred[i] == 1 and val_label[i] == 1 for i in range(len(val_label)))
  24. FP = sum(pred[i] == 1 and val_label[i] == 0 for i in range(len(val_label)))
  25. FN = sum(pred[i] == 0 and val_label[i] == 1 for i in range(len(val_label)))
  26. P = TP / (TP + FP)
  27. R = TP / (TP + FN)
  28. print('val_acc', sum(pred == val_label) / len(val_label))
  29. print('F1', 2 * P * R / (P + R))