import numpy as np
import pandas as pd
import random
from sklearn.metrics import accuracy_score, matthews_corrcoef, confusion_matrix
from evidential_random_forest import ERF
from sklearn.model_selection import KFold
from utils import output_time
import fuzzy_feature_construct
ROUND_NUM = 1
FOLD_NUM = 10
def convert_to_mass(labels):
unique_labels = sorted(list(set(labels)))
num_classes = len(unique_labels)
n = len(labels)
mass_functions = []
if n == 0:
mass_function = np.full(num_classes, 1 / num_classes)
mass_functions.append(mass_function)
else:
for label in labels:
mass_function = np.zeros(num_classes + 1)
if label in unique_labels:
index = unique_labels.index(label)
mass_function[index] = random.uniform(0.5, 1.0)
mass_function[1 - index] = random.uniform(0, 0.5)
mass_function[2] = (mass_function[0] + mass_function[1]) / 2
mass_functions.append(mass_function)
mass_functions = np.array(mass_functions)
sums = np.sum(mass_functions, axis=1, keepdims=True)
mass_functions_normalized_array = mass_functions / sums
return mass_functions_normalized_array
def sen(Y_test, Y_pred):
con_mat = confusion_matrix(Y_test, Y_pred)
tp = con_mat[0][0]
fn = con_mat[0][1]
sen1 = tp / (tp + fn)
return sen1
def spe(Y_test, Y_pred):
con_mat = confusion_matrix(Y_test, Y_pred)
fp = con_mat[1][0]
tn = con_mat[1][1]
spe1 = tn / (tn + fp)
return spe1
def train_test(train_set, test_set):
clf = ERF(n_estimators=100, min_samples_leaf=4, criterion="conflict", rf_max_features="sqrt", n_jobs=1)
y_train_belief = convert_to_mass(train_set[:, 0])
clf.fit(train_set[:, 1:], y_train_belief)
An = []
for row in test_set[