Esempio n. 1
0
def tms_analysis(filename,
                 output_file="",
                 indexes=[0, 1, 2],
                 step=1,
                 predicted_label_index=0,
                 predicted_value_index=1,
                 true_label_index=2,
                 threshold=0.0,
                 label=1,
                 min=0,
                 max=1):
    '''多模型结果分析程序。输入已经预测好的文件对分类准确率、Macro、Micro、F值、Recall、Precision进行计算,并会计算特定阈值下的各指标。
    以及计算阈值区间内所有阈值的各指标,可以进行合适阈值的选择。
    必要参数:
    filename:输入的文件。通常文件包括3个字段:预测label,预测分数,真实label
    可选参数:
    output_file :分析结果输出文件。默认为"",即输出在屏幕上。
    indexes:即从文件中读入的数据,考虑到最终预测结果可能包含多个字段,所以可以指定具体需要读入的字段。默认为前3列。
    step:选择进行分析的步骤:
        1为多分类以及二分类的微观分类准确率,宏观分类准确率,所有类的分类准确率。
        2为多分类以及二分类中各个类别的F值、召回率、准确率。
        3为计算多分类以及二分类中对指定的类别,对特定阈值下的F值、召回率、准确率。
        4为多分类以及二分类中计算所有类别的在阈值区间中的每个阈值每个类别的F值、召回率、准确率,旨在为用户分析出每个类别最好的阈值。
    predicted_label_index:文件中预测标签的字段号,默认为0.
    predicted_value_index:文件中预测分数的字段号,默认为1.
    true_label_index:文件中真实标签的字段号,默认为2.
    threshold=0.0:如果step=3,可以设定特定的阈值。默认为0.0
    label=1:如果step=3:可以设定对特定类别特定阈值进行计算F值、Recall、Precision。默认为类标签为1
    min:如果step=4.设定阈值区间的最小值。默认情况下搜索区间为[0,0.1,...0.9],所以该值默认为0
    max:如果step=4.设定阈值区间的最大值,所以该值默认为1.
'''
    output = False
    if len(output_file) > 1:
        output = True
        f = file(output_file, 'w')
    min = min * 10
    max = max * 10
    X = result_analysis.read_result(filename, indexes)
    if step == 1:
        rate, micro, macro = result_analysis.cal_rate(
            [y[true_label_index] for y in X],
            [y[predicted_label_index] for y in X])
        if output == False:
            print "micro = %g,macro = %g" % (micro, macro)
            result_analysis.print_result(rate)
        else:
            f.write("micro = %g,macro = %g\n" % (micro, macro))
            f.write("各个类别的分类准确率")
            result_analysis.save_result(f, rate)

    if step == 2:
        rate = result_analysis.cal_f([y[true_label_index] for y in X],
                                     [y[predicted_label_index] for y in X])
        if output == False:
            result_analysis.print_result(rate)
        else:
            f.write("各个类别的F值、召回率、准确率")
            result_analysis.save_result(f, rate)

    if step == 3:
        rate = result_analysis.cal_f_by_threshold(
            [y[true_label_index]
             for y in X], [y[predicted_label_index] for y in X],
            [y[predicted_value_index] for y in X], label, threshold)
        if output == False:
            result_analysis.print_result(rate)
        else:
            f.write("对特定类别的F值、召回率、准确率")
            result_analysis.save_result(f, rate)

    if step == 4:
        rate = result_analysis.threshlod_anlysis(
            [y[true_label_index]
             for y in X], [y[predicted_label_index] for y in X],
            [y[predicted_value_index] for y in X],
            first_range=[i / 10.0 for i in range(min, max)])
        if output == False:
            result_analysis.print_result(rate)
        else:
            f.write("所有类别各个阈值下得F值、召回率、准确率")
            result_analysis.save_result(f, rate)

    if output == True:
        f.close()
Esempio n. 2
0
def tms_analysis(filename,output_file="",indexes=[0,1,2],step=1,predicted_label_index=0,predicted_value_index=1,true_label_index=2,threshold=0.0,label=1,min=0,max=1):
    '''多模型结果分析程序。输入已经预测好的文件对分类准确率、Macro、Micro、F值、Recall、Precision进行计算,并会计算特定阈值下的各指标。
    以及计算阈值区间内所有阈值的各指标,可以进行合适阈值的选择。
    必要参数:
    filename:输入的文件。通常文件包括3个字段:预测label,预测分数,真实label
    可选参数:
    output_file :分析结果输出文件。默认为"",即输出在屏幕上。
    indexes:即从文件中读入的数据,考虑到最终预测结果可能包含多个字段,所以可以指定具体需要读入的字段。默认为前3列。
    step:选择进行分析的步骤:
        1为多分类以及二分类的微观分类准确率,宏观分类准确率,所有类的分类准确率。
        2为多分类以及二分类中各个类别的F值、召回率、准确率。
        3为计算多分类以及二分类中对指定的类别,对特定阈值下的F值、召回率、准确率。
        4为多分类以及二分类中计算所有类别的在阈值区间中的每个阈值每个类别的F值、召回率、准确率,旨在为用户分析出每个类别最好的阈值。
    predicted_label_index:文件中预测标签的字段号,默认为0.
    predicted_value_index:文件中预测分数的字段号,默认为1.
    true_label_index:文件中真实标签的字段号,默认为2.
    threshold=0.0:如果step=3,可以设定特定的阈值。默认为0.0
    label=1:如果step=3:可以设定对特定类别特定阈值进行计算F值、Recall、Precision。默认为类标签为1
    min:如果step=4.设定阈值区间的最小值。默认情况下搜索区间为[0,0.1,...0.9],所以该值默认为0
    max:如果step=4.设定阈值区间的最大值,所以该值默认为1.
'''
    output=False
    if len(output_file)>1:
        output=True
        f = file(output_file,'w')
    min = min*10
    max = max*10
    X = result_analysis.read_result(filename,indexes)
    if step==1:
        rate,micro,macro = result_analysis.cal_rate([y[true_label_index] for y in X ],[y[predicted_label_index] for y in X ])
        if output==False:
            print "micro = %g,macro = %g" %(micro,macro)
            result_analysis.print_result(rate)
        else:
            f.write("micro = %g,macro = %g\n" %(micro,macro))
            f.write("各个类别的分类准确率")
            result_analysis.save_result(f,rate)
            
    if step==2:
        rate  = result_analysis.cal_f([y[true_label_index] for y in X ],[y[predicted_label_index] for y in X ])
        if output==False:
            result_analysis.print_result(rate)
        else:
            f.write("各个类别的F值、召回率、准确率")
            result_analysis.save_result(f,rate)

    if step==3:
        rate  = result_analysis.cal_f_by_threshold([y[true_label_index] for y in X ],[y[predicted_label_index] for y in X ],[y[predicted_value_index] for y in X],label,threshold)
        if output==False:
            result_analysis.print_result(rate)
        else:
            f.write("对特定类别的F值、召回率、准确率")
            result_analysis.save_result(f,rate)
            
    if step==4:
        rate = result_analysis.threshlod_anlysis([y[true_label_index] for y in X ],[y[predicted_label_index] for y in X ],[y[predicted_value_index] for y in X],first_range=[i/10.0 for i in range(min,max)])
        if output==False:
            result_analysis.print_result(rate)
        else:
            f.write("所有类别各个阈值下得F值、召回率、准确率")
            result_analysis.save_result(f,rate)
        
    if output ==True:
        f.close()