def LOF(dataset): data = get_table_content(dataset) model = LocalOutlierFactor(n_neighbors=4, contamination=0.1, novelty=True) model.fit(numpy.array(data)[:, 0:2]) y = model._predict(numpy.array(data)[:, 0:2]) # 若样本点正常,返回1,不正常,返回-1 print(y) pass
def LOF(Data): model = LocalOutlierFactor(n_neighbors=10, contamination='auto', novelty=True) #定义一个LOF模型,异常比例是10% model.fit(Data) z = model._predict(Data) #若样本点正常,返回1,不正常,返回-1 index = z == 1 P = Data[index, :] #剩余点 P = np.array(list(set([tuple(t) for t in P]))) D = np.array([z]) return P, D
def lof_see(X, test_bi_pca, labels, min_samples): for mSample in min_samples: clf = LocalOutlierFactor(n_neighbors=mSample, contamination=0.1) clf_predict = LocalOutlierFactor(n_neighbors=mSample, contamination=0.1, novelty=True).fit(bi_df_pca_unique) test_labels = clf_predict._predict(test_bi_pca) test_labels[test_labels > -1] = 0 print(mSample) print(data_utils.show_performance(labels, test_labels)) print("Silhouette Coefficient: %0.3f" % metrics.silhouette_score(X, clf.fit_predict(X))) print("Calinski-Harabaz Index: %0.3f" % metrics.calinski_harabaz_score(X, clf.fit_predict(X))) print('--')
return None feature_set.append(dsc) print("features extraction: %d/%d" % (i, len(image_set))) i += 1 return np.asarray(feature_set) if __name__ == "__main__": train, test, test_label, num_test_norm, num_test_anom = load_data() train = extract_feature(train) test = extract_feature(test) clf = LocalOutlierFactor(n_neighbors=10, leaf_size=50) clf.fit(train) pred_train = clf._predict(train) pred_test = clf._predict(test) print(pred_train) print(pred_test) tp, fp, tn, fn = 0., 0., 0., 0. for i in range(len(test)): if (test_label[i] == 1): if (pred_test[i] == -1): tp += 1 elif (pred_test[i] == 1): fn += 1 elif (test_label[i] == 0): if (pred_test[i] == -1): fp += 1 elif (pred_test[i] == 1):
test = extract_feature(TEST_FOLDER) # train = train.astype('float32') / 255. # test = test.astype('float32') / 255. # train = train.reshape((len(train), np.prod(train.shape[1:]))) # test = test.reshape((len(test), np.prod(test.shape[1:]))) num_test_anom = len(test_label) train, test_norm, train_name, test_name_norm = train_test_split( train, train_name, test_size=0.2, random_state=30) num_test_norm = len(test_name_norm) test = np.concatenate((test, test_norm), axis=0) test_label = np.concatenate((test_label, np.zeros(len(test_norm))), axis=0) clf = LocalOutlierFactor(n_neighbors=20) clf.fit(train) pred_test = clf._predict(test) print(pred_test) tp, fp, tn, fn = 0., 0., 0., 0. for i in range(0, len(test) - len(test_norm)): if (pred_test[i] == -1): tp += 1 elif (pred_test[i] == 1): fn += 1 for i in range(len(test) - len(test_norm), len(test)): if (pred_test[i] == -1): fp += 1 elif (pred_test[i] == 1): tn += 1 print('\nPrecesion: %.3f' % (tp / (tp + fp)))