def experiment_anomaly_detection(train, test, comb, num_train, anom_prob, labels): phi = calc_feature_vecs(comb.X) print phi.size # bayes classifier (DIMS, N) = phi.size w_bayes = co.matrix(1.0, (DIMS, 1)) pred = w_bayes.trans()*phi[:,num_train:] (fpr, tpr, thres) = metric.roc_curve(labels[num_train:], pred.trans()) bayes_auc = metric.auc(fpr, tpr) # train one-class svm kern = Kernel.get_kernel(phi[:,0:num_train], phi[:,0:num_train]) ocsvm = OCSVM(kern, C=1.0/(num_train*anom_prob)) ocsvm.train_dual() kern = Kernel.get_kernel(phi, phi) (oc_as, foo) = ocsvm.apply_dual(kern[num_train:,ocsvm.get_support_dual()]) (fpr, tpr, thres) = metric.roc_curve(labels[num_train:], oc_as) base_auc = metric.auc(fpr, tpr) if (base_auc<0.5): base_auc = 1.0-base_auc # train structured anomaly detection #sad = StructuredOCSVM(train, C=1.0/(num_train*anom_prob)) sad = StructuredOCSVM(train, C=1.0/(num_train*0.5)) (lsol, lats, thres) = sad.train_dc(max_iter=50) (pred_vals, pred_lats) = sad.apply(test) (fpr, tpr, thres) = metric.roc_curve(labels[num_train:], pred_vals) auc = metric.auc(fpr, tpr) if (auc<0.5): auc = 1.0-auc return (auc, base_auc, bayes_auc)
def experiment_anomaly_detection(train, test, comb, num_train, anom_prob, labels): # train one-class svm phi = calc_feature_vecs(comb.X) kern = Kernel.get_kernel(phi[:,0:num_train], phi[:,0:num_train]) ocsvm = OCSVM(kern, C=1.0/(num_train*anom_prob)) ocsvm.train_dual() kern = Kernel.get_kernel(phi, phi) (oc_as, foo) = ocsvm.apply_dual(kern[num_train:,ocsvm.get_support_dual()]) (fpr, tpr, thres) = metric.roc_curve(labels[num_train:], oc_as) base_auc = metric.auc(fpr, tpr) # train structured anomaly detection sad = StructuredOCSVM(train, C=1.0/(num_train*anom_prob)) (lsol, lats, thres) = sad.train_dc(max_iter=40) (pred_vals, pred_lats) = sad.apply(test) (fpr, tpr, thres) = metric.roc_curve(labels[num_train:], pred_vals) auc = metric.auc(fpr, tpr) return (auc, base_auc)
def experiment_anomaly_detection(train, test, comb, num_train, anom_prob, labels): # train one-class svm phi = calc_feature_vecs(comb.X) kern = Kernel.get_kernel(phi[:, 0:num_train], phi[:, 0:num_train]) ocsvm = OCSVM(kern, C=1.0 / (num_train * anom_prob)) ocsvm.train_dual() kern = Kernel.get_kernel(phi, phi) (oc_as, foo) = ocsvm.apply_dual(kern[num_train:, ocsvm.get_support_dual()]) (fpr, tpr, thres) = metric.roc_curve(labels[num_train:], oc_as) base_auc = metric.auc(fpr, tpr) # train structured anomaly detection sad = StructuredOCSVM(train, C=1.0 / (num_train * anom_prob)) (lsol, lats, thres) = sad.train_dc(max_iter=40) (pred_vals, pred_lats) = sad.apply(test) (fpr, tpr, thres) = metric.roc_curve(labels[num_train:], pred_vals) auc = metric.auc(fpr, tpr) return (auc, base_auc)
fig = plt.figure() for i in xrange(4): plt.subplot(2,4,i+1) if i==0: plt.title("LatentSVDD") lsvdd.train_dc() (scores,lats) = lsvdd.apply(predsobj) if i==1: plt.title("StructPCA") spca.train_dc() (scores,lats) = spca.apply(predsobj) if i==2: plt.title("StructOCSVM") socsvm.train_dc() (scores,lats) = socsvm.apply(predsobj) if i==3: plt.title("SSVM") ssvm.train() (scores,lats) = ssvm.apply(predsobj) # plot scores Z = np.reshape(scores,(sx,sy)) plt.contourf(X, Y, Z) plt.scatter(Dtrain[0,:],Dtrain[1,:],10) # plot latent variable Z = np.reshape(lats,(sx,sy)) plt.subplot(2,4,i+4+1) plt.contourf(X, Y, Z) plt.scatter(Dtrain[0,:],Dtrain[1,:],10)
fig = plt.figure() for i in xrange(4): plt.subplot(2, 4, i + 1) if i == 0: plt.title("LatentSVDD") lsvdd.train_dc() (scores, lats) = lsvdd.apply(predsobj) if i == 1: plt.title("StructPCA") spca.train_dc() (scores, lats) = spca.apply(predsobj) if i == 2: plt.title("StructOCSVM") socsvm.train_dc() (scores, lats) = socsvm.apply(predsobj) if i == 3: plt.title("SSVM") ssvm.train() (scores, lats) = ssvm.apply(predsobj) # plot scores Z = np.reshape(scores, (sx, sy)) plt.contourf(X, Y, Z) plt.scatter(Dtrain[0, :], Dtrain[1, :], 10) # plot latent variable Z = np.reshape(lats, (sx, sy)) plt.subplot(2, 4, i + 4 + 1) plt.contourf(X, Y, Z) plt.scatter(Dtrain[0, :], Dtrain[1, :], 10)