123456789101112131415161718192021222324252627282930313233343536 |
- import numpy as np
- from sklearn import svm
- def get_one_hot(targets, nb_classes):
- res = np.eye(nb_classes)[np.array(targets).reshape(-1)]
- return res.reshape(list(targets.shape)+[nb_classes])
- def load(file):
- raw_data = np.loadtxt(file, delimiter=',')
- data_size = len(raw_data)
- np.random.shuffle(raw_data)
- ret = np.split(raw_data, [1,], axis=1)
- return ret
- train_pieces = load('SPECT.train')
- train_label = train_pieces[0]
- train_data = train_pieces[1]
- train_label = train_label.flatten().astype(int)
- val_pieces = load('SPECT.test')
- val_label = val_pieces[0]
- val_data = val_pieces[1]
- val_label = val_label.flatten().astype(int)
- clf = svm.SVC(gamma='scale')
- clf.fit(train_data, train_label)
- pred = clf.predict(val_data)
- TP = sum(pred[i] == 1 and val_label[i] == 1 for i in range(len(val_label)))
- FP = sum(pred[i] == 1 and val_label[i] == 0 for i in range(len(val_label)))
- FN = sum(pred[i] == 0 and val_label[i] == 1 for i in range(len(val_label)))
- P = TP / (TP + FP)
- R = TP / (TP + FN)
- print('val_acc', sum(pred == val_label) / len(val_label))
- print('F1', 2 * P * R / (P + R))
|