svm.py 1.1 KB

12345678910111213141516171819202122232425262728293031323334353637
  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. data_slice = 5
  7. val_idx = 0
  8. def load():
  9. raw_data = np.loadtxt('car.data', delimiter=',')
  10. data_size = len(raw_data)
  11. np.random.shuffle(raw_data)
  12. data = np.array_split(raw_data, data_slice)
  13. ret = [np.split(i, [1,], axis=1) for i in data]
  14. return ret
  15. data_pieces = load()
  16. train_label = np.concatenate(
  17. [data_pieces[i][0] for i in list(range(data_slice))[:val_idx] + list(range(data_slice))[val_idx+1:]]
  18. )
  19. train_label = train_label - 1
  20. train_label = train_label.flatten().astype(int)
  21. train_data = np.concatenate(
  22. [data_pieces[i][1] for i in list(range(data_slice))[:val_idx] + list(range(data_slice))[val_idx+1:]]
  23. )
  24. val_label = data_pieces[val_idx][0]
  25. val_data = data_pieces[val_idx][1]
  26. val_label = val_label - 1
  27. val_label = val_label.flatten().astype(int)
  28. clf = svm.SVC(gamma='scale')
  29. clf.fit(train_data, train_label)
  30. print('val_acc', sum(clf.predict(val_data) == val_label) / len(val_label))