Это простое решение моего вопроса.Он имеет дело только с двумя моделями и двумя переменными, но вы могли бы легко иметь списки с именами классификаторов и метрик, которые вы хотите проанализировать.Для моих целей я просто изменяю значения COI
, ROI_1
и ROI_2
соответственно.
ПРИМЕЧАНИЕ. Это решение также можно обобщать. Как?Просто измените значения COI
, ROI_1
, ROI_2
и , чтобы загрузить любой выбранный набор данных в df = pandas.read_csv("FILENAME.csv, ...)
.Если вам нужна другая визуализация, просто измените настройки pyplot
ближе к концу.
Ключ назначал новый DataFrame
исходному DataFrame
и реализовывал метод .loc["SOMESTRING"]
.Он удаляет все строки в данных, КРОМЕ для той, которая указана в качестве параметра.
Помните, однако, что включает index_col=0
при чтении файла ИЛИ использует некоторыедругой метод для установки индекса из DataFrame
.Без этого ваши значения row
будут просто индексами, начиная с 0 to MAX_INDEX
.
# Written: April 4, 2019
import pandas # for visualizations
from matplotlib import pyplot # for visualizations
from scipy.stats import ks_2samp # for 2-sample Kolmogorov-Smirnov test
import os # for deleting CSV files
# Functions which isolates DataFrame
def removeColumns(DataFrame, typeArray, stringOfInterest):
for i in range(0, len(typeArray)):
if typeArray[i].find(stringOfInterest) != -1:
continue
else:
DataFrame.drop(typeArray[i], axis = 1, inplace = True)
# Get the whole DataFrame
df = pandas.read_csv("ExperimentResultsCondensed.csv", index_col=0)
dfCopy = df
# Specified metrics and models for comparison
COI = "Area_under_PRC"
ROI_1 = "weka.classifiers.meta.AdaBoostM1[DecisionTable]"
ROI_2 = "weka.classifiers.meta.AdaBoostM1[DecisionStump]"
# Lists of header and row in dataFrame
# `rows` may act strangely
headers = list(df.dtypes.index)
rows = list(df.index)
# remove irrelevant rows
df1 = dfCopy.loc[ROI_1]
df2 = dfCopy.loc[ROI_2]
# remove irrelevant columns
removeColumns(df1, headers, COI)
removeColumns(df2, headers, COI)
# Make CSV files
df1.to_csv(str(ROI_1 + "-" + COI + ".csv"), index=False)
df2.to_csv(str(ROI_2 + "-" + COI) + ".csv", index=False)
results = pandas.DataFrame()
# Read CSV files
# The CSV files can be of any netric/measure, F-measure is used as an example
results[ROI_1] = pandas.read_csv(str(ROI_1 + "-" + COI + ".csv"), header=None).values[:, 0]
results[ROI_2] = pandas.read_csv(str(ROI_2 + "-" + COI + ".csv"), header=None).values[:, 0]
# Kolmogorov-Smirnov test since we have Non-Gaussian, independent, distinctive variance datasets
# Test configurations
value, pvalue = ks_2samp(results[ROI_1], results[ROI_2])
# Corresponding confidence level: 95%
alpha = 0.05
# Output the results
print('\n')
print('\033[1m' + '>>>TEST STATISTIC: ')
print(value)
print(">>>P-VALUE: ")
print(pvalue)
if pvalue > alpha:
print('\t>>Samples are likely drawn from the same distributions (fail to reject H0 - NOT SIGNIFICANT)')
else:
print('\t>>Samples are likely drawn from different distributions (reject H0 - SIGNIFICANT)')
# Plot files
df1.plot.density()
pyplot.xlabel(str(COI + " Values"))
pyplot.ylabel(str("Density"))
pyplot.title(str(COI + " Density Distribution of " + ROI_1))
pyplot.show()
df2.plot.density()
pyplot.xlabel(str(COI + " Values"))
pyplot.ylabel(str("Density"))
pyplot.title(str(COI + " Density Distribution of " + ROI_2))
pyplot.show()
# Delete Files
os.remove(str(ROI_1 + "-" + COI + ".csv"))
os.remove(str(ROI_2 + "-" + COI + ".csv"))