Files
Stomach_Cancer_Pytorch/Calculate_Process/Calculate.py

69 lines
3.3 KiB
Python

import numpy as np
import pandas as pd
from decimal import Decimal, ROUND_HALF_UP
class Calculate():
def __init__(self) -> None:
self.Loss, self.Accuracy, self.Precision, self.Recall, self.F1, self.AUC = 0, 0, 0, 0, 0, 0
self.Loss_Record, self.Accuracy_Record, self.Precision_Record, self.Recall_Record, self.F1_Record, self.AUC_Record = [], [], [], [], [], []
self.History = []
pass
def Append_numbers(self, Loss, Accuracy, Precision, Recall, AUC, F1):
self.Loss_Record.append(Loss)
self.Accuracy_Record.append(Accuracy)
self.Precision_Record.append(Precision)
self.Recall_Record.append(Recall)
self.F1_Record.append(F1)
self.AUC_Record.append(AUC)
pass
def Construction_To_DataFrame(self, Loss, Accuracy, Precision, Recall, F1, AUC):
DataFrame = pd.DataFrame(
{
"loss" : "{:.2f}".format(Loss),
"precision" : "{:.2f}".format(Precision * 100),
"recall" : "{:.2f}".format(Recall * 100),
"accuracy" : "{:.2f}".format(Accuracy * 100),
"f1" : "{:.2f}".format(F1 * 100),
"AUC" : "{:.2f}".format(AUC * 100)
}, index = [0]
)
self.History.append(DataFrame)
return DataFrame
def Calculate_Mean(self):
Loss_Mean = np.mean(self.Loss_Record)
Accuracy_Mean = np.mean(self.Accuracy_Record)
Precision_Mean = np.mean(self.Precision_Record)
Recall_Mean = np.mean(self.Recall_Record)
F1_Mean = np.mean(self.F1_Record)
AUC_Mean = np.mean(self.AUC_Record)
Mean_DataFram = self.Construction_To_DataFrame(Loss_Mean, Accuracy_Mean, Precision_Mean, Recall_Mean, F1_Mean, AUC_Mean)
return Mean_DataFram
def Calculate_Std(self):
Loss_Std = Decimal(str(np.std(self.Loss_Record))).quantize(Decimal('0.01'), rounding=ROUND_HALF_UP)
Accuracy_Std = Decimal(str(np.std(self.Accuracy_Record))).quantize(Decimal('0.01'), rounding=ROUND_HALF_UP)
Precision_Std = Decimal(str(np.std(self.Precision_Record))).quantize(Decimal('0.01'), rounding=ROUND_HALF_UP)
Recall_Std = Decimal(str(np.std(self.Recall_Record))).quantize(Decimal('0.01'), rounding=ROUND_HALF_UP)
F1_Std = Decimal(str(np.std(self.F1_Record))).quantize(Decimal('0.01'), rounding=ROUND_HALF_UP)
AUC_Std = Decimal(str(np.std(self.AUC_Record))).quantize(Decimal('0.01'), rounding=ROUND_HALF_UP)
Std_DataFram = self.Construction_To_DataFrame(Loss_Std, Accuracy_Std, Precision_Std, Recall_Std, F1_Std, AUC_Std)
return Std_DataFram
def Output_Style(self):
Result = pd.DataFrame(
{
"loss" : "{}%±{}".format(self.History[0]["loss"][0], self.History[1]["loss"][0]),
"precision" : "{}%±{}".format(self.History[0]["precision"][0], self.History[1]["precision"][0]),
"recall" : "{}%±{}".format(self.History[0]["recall"][0], self.History[1]["recall"][0]),
"accuracy" : "{}%±{}".format(self.History[0]["accuracy"][0], self.History[1]["accuracy"][0]),
"f1" : "{}%±{}".format(self.History[0]["f1"][0], self.History[1]["f1"][0]),
"AUC" : "{}%±{}".format(self.History[0]["AUC"][0], self.History[1]["AUC"][0])
}, index = [0]
)
return Result