机器学习相关指标计算

机器学习相关的科学计算指标

其实本人也不精通

上代码:

#!/usr/bin/env python

# coding=utf-8

import numpyas np

from sklearn.metricsimport *

import matplotlib.pyplotas plt


def mathematical_calculation(data_list1,data_list2=[]):

    """

        1.误差errors:x1-x2

        2.误差均值mean errors:所以误差值和的均值        

        3.平均差average deviation:每个数据与该组数据平均数之差绝对值的算数平均数        

        4.方差Variance:每个数据与该组数据平均数之差乘方后的均值,用来度量随机变量和其数学期望(即均值)之间的偏离程度       

         5.标准差Standard Deviation:方差平方根

    """

    if data_list2 == []:

        mean_errors= np.mean(data_list1)# 误差均值 是一个数值

        variance= np.var(data_list1)# 方差  是一个数值

        standard_deviation= np.std(data_list1,ddof=1)# 标准差 是一个数值

        average_deviation= (data_list1 - mean_errors).sum()/ data_list1.size# 平均差 是一个数值

        return mean_errors, average_deviation, variance, standard_deviation

    if len(data_list1)== len(data_list2):

        errors= np.array(data_list1)- np.array(data_list2)# 误差 是一个数组

        mean_errors= np.mean(errors)# 误差均值 是一个数值

        variance= np.var(errors)# 方差  是一个数值

        standard_deviation= np.std(errors,ddof=1)# 标准差 是一个数值

        average_deviation= (errors- mean_errors).sum()/ errors.size# 平均差 是一个数值

        return mean_errors, average_deviation, variance, standard_deviation

"""

    | 真 实 |  预  测  结  果|

    | 情 况 |  正  例  |  反 例|

———————————————————————————

    |正  例 |TP(真正例)|FN(假反例)|

    |反  例 |FP(假正例)|TN(真反例)|

"""

def pre_re_ac(y_true,y_pred):  # y_true是真实数据 y_pred是预测数据

    """

    1.precision:查准率 & recall:查全率    

     precision = TP/(TP+FP) 查准率,各类分开计算,再平均   

     recall = TP/(TP+FN) 查全率,各类分开计算,再平均    

     accuracy = (TP + TN) /(TP+TN+FP+FN) 准确率,综合各类来计算不平均

    """

    Precision= precision_score(y_true,y_pred,labels=None, pos_label=1, average='binary', sample_weight=None)

    Recall= recall_score(y_true,y_pred,labels=None,pos_label=1, average='binary',sample_weight=None)

    Accuracy= accuracy_score(y_true,y_pred,normalize=True,sample_weight=None)

    return Precision, Recall, Accuracy


def F1(y_true,y_pred):  # y_true是真实数据 y_pred是预测数据

    """

        4.F1(F1-score) *需要计算结果 - 值       

         F1-score = 2*precision*recall/(precision+recall) # 每个类别的F1

        f_1 = 所有F1和/n

    """

    f_1= f1_score(y_true,y_pred,average='binary')

    # print 2 * Precision * Recall / (Precision + Recall)  也可以根据pre和rec值求F1

    return f_1


def mean_AP(y_true,y_pred):

    """ AP:单个类别的precision的均值        

        mAP:m个类别的AP的平均值(目前只要求单个类计算)

    """


def PR_curve(y_true,y_scores):  # y_true是真实值的array;y_score是阀值array()

    """

        3.PR曲线 *需要绘图,需要计算结果        

        1. F1是基于查准率与查全率的调和平均        

        2. Fβ​是基于查准率与查全率的加权平均1/F1 = 1/2*(1/precision + 1/recall)  # F1 = F1(y_true, y_pred)

        1/Fβ = 1/(1+β**2)*(1/precision + β**2/recall)

    """

    pre_arr, rec_arr, thresholds= precision_recall_curve(y_true,y_scores,pos_label=None, sample_weight=None)

    return pre_arr, rec_arr, thresholds


def roc_Auc(y_true,y_scores):

    """

        5.ROC(Receiver Operating Characteristic) *需要画图 需要结果

        每次计算出假正例率(FPR)与真正例率(TPR),分别以他们作为横纵坐标进行作图       

        TPR = TP/(TP+FN) # 等同于recall  

        FPR = FP/(FP+TN)

        6.AUC(area under curve):roc曲线下的面积,介于0.1和1之间。

         Auc作为数值可以直观的评价分类器的好坏,值越大越好。

    """

    #y = np.array(y_true)

    #scores = np.array(y_scores)

    # scores = model.get_prob(x)

    fpr, tpr, thresholds= roc_curve(y_true,y_scores,pos_label=1)

    Auc= auc(fpr, tpr)

    return fpr, tpr, Auc


def compute_iou(box1,box2,wh=False):  # Intersection over Union

    """

    compute the iou of two boxes.

    Args:

        box1, box2: [xmin, ymin, xmax, ymax] (wh=False) or [xcenter, ycenter, w, h] (wh=True)

        wh: the format of coordinate.

    Return:

        iou: iou of box1 and box2.

    """

    if wh == False:

        xmin1, ymin1, xmax1, ymax1= box1

        xmin2, ymin2, xmax2, ymax2= box2

    else:

        xmin1, ymin1= int(box1[0]- box1[2]/ 2.0),int(box1[1]- box1[3]/ 2.0)

        xmax1, ymax1= int(box1[0]+ box1[2]/ 2.0),int(box1[1]+ box1[3]/ 2.0)

        xmin2, ymin2= int(box2[0]- box2[2]/ 2.0),int(box2[1]- box2[3]/ 2.0)

        xmax2, ymax2= int(box2[0]+ box2[2]/ 2.0),int(box2[1]+ box2[3]/ 2.0)

    # 获取矩形框交集对应的左上角和右下角的坐标(intersection)

    xx1= np.max([xmin1, xmin2])

    yy1= np.max([ymin1, ymin2])

    xx2= np.min([xmax1, xmax2])

    yy2= np.min([ymax1, ymax2])

    # 计算两个矩形框面积

    area1= (xmax1- xmin1)* (ymax1- ymin1)

    area2= (xmax2- xmin2)* (ymax2- ymin2)

    inter_area= (np.max([0, xx2- xx1]))* (np.max([0, yy2- yy1]))# 计算交集

    iou= inter_area/ (area1+ area2- inter_area+ 1e-6)# 计算交并比

    # iou大于0.5算合格

    return iou


if __name__== '__main__':

    # 这些分数和预值是我构造的,原来检查写函数正确性

    y_scores= [0.2,0.4,0.4,0.5,0.5,0.6,0.8,0.9]

    y_pred= [0,1,1,0,1,1,0,1]

    y_true= [1,1,0,0,1,0,1,1]

    Precision, Recall, Accuracy= pre_re_ac(y_true, y_pred)

    F1(y_true, y_pred)

    pre_arr, rec_arr, thresholds= PR_curve(y_true, y_scores)

    fpr, tpr, Auc= roc_Auc(y_true, y_scores)

    # iou = compute_iou(box1, box2, wh=False)


    plt.figure(figsize=(8,10))

    plt.suptitle('Curve Image',fontsize=20,color='teal')

    title= 'Precision:{}; Recall:{}; Accuracy:{}'.format(Precision, Recall, Accuracy)


    plt.subplot(211)

    plt.title(title)

    plt.xlabel('Recall array')

    plt.ylabel('Precision array')

    plt.grid(True)

    plt.plot(rec_arr, pre_arr,marker='o',label='PR Curve')

    plt.legend()

    # plt.savefig('roc.png')


    plt.subplot(212)

    plt.title('auc:{}'.format(Auc))

    plt.xlabel('fpr')

    plt.ylabel('tpr')

    plt.grid(True)

    plt.plot(fpr, tpr,marker='o',label='ROC Curve')

    plt.legend()

    plt.subplots_adjust(wspace=3,hspace=0.3)

    plt.show()


这些方法功能我已经验证过了,但是没有大规模应用到数据分析,当时算法还没学习出结果,就gg了。

请大神批评指正!

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 220,295评论 6 512
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,928评论 3 396
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 166,682评论 0 357
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 59,209评论 1 295
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 68,237评论 6 397
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,965评论 1 308
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,586评论 3 420
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,487评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 46,016评论 1 319
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 38,136评论 3 340
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,271评论 1 352
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,948评论 5 347
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,619评论 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,139评论 0 23
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,252评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,598评论 3 375
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,267评论 2 358

推荐阅读更多精彩内容