精华内容
下载资源
问答
  • 预测对了,预测了“Positive” FN False Negative 预测错了,预测了“Negetive” FP False Positive 预测错了,预测了“Positive” TN True Negtive 预测对了,预测了“Negtive” 2.指标...

    混淆矩阵

    在这里插入图片描述

    1. 前提概念
    缩写全拼含义
    TPTrue Positive预测对了,预测了“Positive”
    FNFalse Negative预测错了,预测了“Negetive”
    FPFalse Positive预测错了,预测了“Positive”
    TNTrue Negtive预测对了,预测了“Negtive”

    2.指标定义

    指标定义备注
    Accuracy在这里插入图片描述
    PrecisionTP /(TP+FP)对于模型标记为无误的样本中,它有多大比重是实际上也正确的
    Recall / Sensitivity= TP /(TP+FN)对于实际上是正确的样本,它有多大比重被模型无误的找出来了
    F1 - Score2*Precision*Recall / (Precision + Recall)取值范围是从-到1的。1是最好,0是最差

    ROC曲线

    Receiver Operating Characteristic Curve / 感受性曲线 / 受试者工作特征曲线

    在这里插入图片描述
    ROC曲线越向左上角凸,其效果越好;

    AUC:即ROC曲线下的阴影部分的面积,故不展开;

    注:以_score结尾的,值越大说明模型越好,以_error_loss结尾的 越小越好。


    Sklearn示例

    by oopcode in stackoverflow.(有改动)

    import numpy as np
    from sklearn.linear_model import LogisticRegression
    from sklearn.metrics import roc_curve, auc, roc_auc_score
    
    lr = LogisticRegression()
    X = np.random.rand(20, 2)
    y = np.random.randint(2, size=20)
    lr.fit(X, y)
    
    FP_rate, TP_rate, thresholds = roc_curve(y, lr.predict(X))
    print(auc(FP_rate, TP_rate))
    # 0.5
    print(roc_auc_score(y, lr.predict(X)))
    # 0.5
    

    附注:sklearn的评价指标(官网链接

    指标函数备注
    分类
    ‘accuracy’metrics.accuracy_score
    ‘balanced_accuracy’metrics.balanced_accuracy_score
    ‘average_precision’metrics.average_precision_score
    ‘brier_score_loss’metrics.brier_score_loss
    ‘f1’metrics.f1_score用于二分类
    'f1_micrometrics.f1_score
    ‘f1_macro’metrics.f1_score
    ‘f1_weighted’metrics.f1_score
    ‘f1_samples’metrics.f1_score
    ‘precision’ etcmetrics.precision_scoref1搭配使用
    ‘recall’ etcmetrics.recall_scoref1搭配使用
    ‘jaccard’ etcmetrics.jaccard_scoref1搭配使用
    ‘neg_log_loss’metrics.log_loss需要 predict_proba支持
    ‘roc_auc’metrics.roc_auc_score
    聚类
    ‘adjusted_mutual_info_score’metrics.adjusted_mutual_info_score
    ‘adjusted_rand_score’metrics.adjusted_rand_score
    ‘completeness_score’metrics.completeness_score
    ‘fowlkes_mallows_score’metrics.fowlkes_mallows_score
    ‘homogeneity_score’metrics.homogeneity_score
    ‘mutual_info_score’metrics.mutual_info_score
    ‘normalized_mutual_info_score’metrics.normalized_mutual_info_score
    ‘v_measure_score’metrics.v_measure_score
    回归
    ‘explained_variance’metrics.explained_variance_score
    ‘r2’metrics.r2_score
    ‘max_error’metrics.max_error
    ‘neg_mean_absolute_error’metrics.mean_absolute_error
    ‘neg_mean_squared_error’metrics.mean_squared_error
    ‘neg_mean_squared_log_error’metrics.mean_squared_log_error
    ‘neg_median_absolute_error’metrics.median_absolute_error
    展开全文
  • sklearn.metrics.precision_score()召回率:真的是1的数据中 ,被预测为1的比例 sklearn.metrix.recall_score()F1Score=2*PR/(P+R) 来判断模型好坏;sklearn.metrix.f1score() 理想状态是预测是1的全部真的是1...

    查准率:预测为1的数据中,真的是1的比例。sklearn.metrics.precision_score()

    召回率:真的是1的数据中 ,被预测为1的比例 sklearn.metrix.recall_score()

    F1Score=2*PR/(P+R) 来判断模型的好坏;sklearn.metrix.f1score() 

    理想状态是预测是1的全部真的是1(即查准率=1)&真的是1的全部被预测是1,(即召回率=1);此时F1Score=1,模型完美;最差的状态是查准率或召回率都趋近于0;F1Score也→0;若P=0.4,R=0.6,F1Score=2*0.4*0.6/(0.4+0.6)=0.48;


    展开全文
  • 怎样判断一个诊断(风险预测模型好坏

    万次阅读 多人点赞 2017-12-20 16:13:16
    比如你觉得前列腺特异性抗原(PSA)用来筛查前列腺癌不准确,你收集临床样本做了个癌和癌旁组织的lncRNA检测,筛选出差异表达的,建立回归模型,看它们对前列腺癌的预测作用,再做个ROC曲线,哎哟,AUC > 0.75,太棒...

    有一类研究看似简单,其实水挺深的。

    比如你觉得前列腺特异性抗原(PSA)用来筛查前列腺癌不准确,你收集临床样本做了个癌和癌旁组织的lncRNA检测,筛选出差异表达的,建立回归模型,看它们对前列腺癌的预测作用,再做个ROC曲线,哎哟,AUC > 0.75,太棒了3-5分在握!

    但是转眼看别人好像也差不多嘛,对某现有诊断或风险预测方法不满意,根据既往零散报道的风险因素收集一些临床资料,建立回归模型然后ROC一下,为什么人家能冲上四大医刊,甚至被迫不及待写进指南呢?仅仅因为人家有N个中心上万个样本量吗?不,你肯定没在意另一些分析方法。

    人家的诊断(预测)模型好,你的可能也不赖,但人家把它的好处说得很清楚、很有技术范呀,编辑和审稿人就喜欢这样。

    评价一个模型的好坏,不仅关乎能发多少分的文章,也关乎临床医生的决策。近期JAMA上的一篇文章专门讨论了这个问题,我们一起来琢磨一下。

    模型的区分度和校准度

    一个好的预测模型应该能针对某个结局,把一群人的风险高低区分开来,这就是区分度(discrimination)。它跟患者在人群中的分布特征有关,模型中纳入的自变量(如性别、年龄、某些实验室检查等)如果有异质性,那么模型的区分度就好,否则就差。

    区分度一般以我们熟悉的ROC曲线下面积(AUC)来评价,或称C统计量(C-statistics)。AUC越高,模型对高低风险人群的区分度越好。一个广泛接受的评判标准是,AUC在0.6以下为低区分度,0.6 – 0.75 是中区分度,0.75以上为高区分度。

    但一个区分度很好的模型,却可能有着较差的校准度(calibration),或称拟合优度(Goodness of fit)。比如它能判断一个人发生某疾病的风险是另一个人的5倍,它判断这两人的风险分别为5%和1%,而实际上两人的风险是50%和10%,那这个模型也挺离谱的,这就是校准度不好。

    模型的校准度可以用Hosmer-Lemeshow检验(H-L检验),若结果得到显著统计学意义,则表明预测值与观测值之间(即模型和真实之间)有差异。

    但H-L检验有其不足。有统计学差异只能提示这个模型整体上跟观测值有差异,却无法展示更多细节。做出校准曲线来有可能会看到这样一种情况:

    这是MAGGIC心衰风险评分量表的校准曲线,其用于评价心衰1年死亡风险。黄色曲线为模型预测值,蓝色带有误差线的点为观测值。可见它们前面一段低风险时吻合得不错,而有轻微高估;但30%开始,模型预测的风险低于实际观察值10%左右,自此拉开差距。

    这个模型在外部验证集中检测的时候,AUC为0.77。像这种情况的模型是否毫无用处呢?

    如果有其他研究表明(或行业内达成共识),风险高于20%的时候就一定要采取某种干预,那么后面的差异其实影响不大,这都是可以在讨论中Argue一下的,深入分析自己的模型的价值和适用范围,也可圈可点。

    区分度和校准度对一个模型来说都是很重要的评价,许多新开发的模型没有得到充分的评价,就只好流散于苍茫文献海,泯然一滴水,后人遇到了还要辛苦甄别。有一项关于心血管系统风险预测模型研究的系统综述发现,只有63%的模型汇报了区分度,而汇报校准度的更少,才36%。

    你的模型要和别人的模型来一场PK

    如果你开发的风险预测模型是为了解决一个全新的问题,展示自己好也就够了。但更多时候是希望能改进现有的解决方案,那么当然还要表明它比现有的好(至少某一方面),才能有发表的机会呀。

    区分度比较两者的AUC是可以的,但没什么细节。校准度的比较则可用赤池信息准则(Akaike Index Criterion, AIC)或贝叶斯信息准则(Bayesian Index Criterion, BIC),其值越低,校准度越好,但同样没什么细节,可能相对较好的那个模型离真实情况还是挺远的。但AIC和BIC见得更少了。

    这里再重点介绍一种近年来应用愈发增多的指标,听说有的小伙伴已经遇到过审稿人要求返修做这个分析了,就是净重新分类指数(Net Reclassification Index, NRI)

    听名字,这意思就是旧模型把一群人分为高风险和低风险,新模型会把其中几个人挪挪窝,有的挪对了有的挪错了,“挪对的 – 挪错的”就是净重分类。指数嘛,再除以总人数的百分比咯。

    但还要分成两拨来看,即观测发生结局事件的和未发生结局事件的,因为它们分别代表假阴性和假阳性的概率。还是在一个情景中说明吧。

    相加NRI(additive NRI)的值可以从200 ~ -200,即新模型完全分类正确(所有低风险的人都未发生结局事件,且所有高风险的人都发生了结局事件)为200,反之完全分类错误为-200。

    它主要的局限性就是没有考虑发生与不发生事件的两拨人在总体中的分布情况。绝对NRI(absolute NRI)以总体为分母,则回避了这个局限。

    相加NRI用得多一点,但其实它们各有意义,应该兼看。再看两个例子来理解它俩的差别吧。

    例1: 样本20000人,观察下来,发生与未发生结局事件的两拨人各有10000。下图绿色表示正确重新分类,粉色表示错误重新分类,灰色表示没有重新分类。

    计算下来,相加NRI为12,是正值;绝对NRI是6%,也是正值,如图下方的表格所示。也就是说,虽然未发生结局事件的有300人被错误重新分类,但总体上来说还是利大于弊的。

    例2:样本是11000人,观察下来,发生与未发生结局事件的人比例不再是1:1了,分别为1000人与10000人。

    如表所示,这回相加NRI和上边一样是12,还是正值。如果光看相加NRI,似乎新模型还是个好模型。但看绝对NRI,原来是个负值。

    再看看细节,新模型对发生了结局事件的人做了更好的重分类,可遗憾的是,这拨人所占比例更小;而对于未发生结局事件的人,其重分类效果并不好,这部分人占的比例又比较大,最终绝对NRI是负的,暴露了新模型的局限性。

    下面是一个研究中的真实案例,情况跟上边的例2差不多。评价术后发生心梗或心源性死亡的风险,原来有一个评分量表(Revised Cardiac Risk Index, RCRI),此为旧模型。研究者想看看加上冠脉造影(CCTA)能不能更好地预测风险,即CCTA + RCRI为新模型。

    观察下来,结局发生与不发生在总体中的分布为7.7% : 92.3%,统计重新分类的情况,计算两个NRI,出现了相加NRI为正值、绝对NRI为负值的情况。

    发生这种情况,又要拋弃新模型咯?粗看或许的是,但其实还有另一个讨论思路,这个思路在许多研究中都适用,就是假阴性与假阳性哪个后果更严重。

    发生结局事件的人,当初被错误地分到低风险组,就是假阴性,让病人和医生都放松警惕,可能错过了及时干预的机会。未发生结局事件的人,当初被错误地分到高风险组,就是假阳性,让人提心吊胆草木皆兵,可能过度干预造成额外的负担。

    如果结局事件挺严重的,比如本例中的心梗或心源性死亡,就算风险低我也想要极力避免,要干预,那么假阳性较多的模型也有其价值。如果结局事件不那么严重,或者即使发生了还有较好的补救方案,那么当初测试时它低估了我的风险我也不是太介意,假阴性多一点的模型也能接受。

    总之,如果你的分析方法能看到更多细节,也就给了你更多更深入分析讨论的机会,为自己的研究成果找到亮点。

    关于假阴性与假阳性的权衡,还有其他指标,比如净受益率,可以做决策曲线来分析。这个我们之前有过介绍,这里就不多说了,自己来复习→_→《ROC曲线老了,快来围观新晋小生DCA曲线!》

    参考文献:Alba, A. C. et al. Discrimination and Calibration of Clinical Prediction Models: Users’ Guides to the Medical Literature. JAMA 318, 1377–1384 (2017).

    展开全文
  • 总第241篇/张俊红在人工智能算法大数据时代,会有各种各样的预测模型,那怎么来评判一个预测模型的准确度呢?这一篇就来聊聊常用的一些评价指标。所谓的预测准确度其实就是预测值和实际值之间的相...

    总第241篇/张俊红

    在人工智能算法大数据时代,会有各种各样的预测模型,那怎么来评判一个预测模型的准确度呢?这一篇就来聊聊常用的一些评价指标。

    所谓的预测准确度其实就是预测值和实际值之间的相近程度,预测值和实际值之间越接近,说明预测准确度越高。我们用y_{hat}表示模型的预测值,y表示模型的真实值。

    1.MSE

    MSE是Mean Square Error的缩写,表示均方误差,具体公式如下:

    该公式表示每个预测值与实际值之间距离的平方和,值越大,表示误差越大。

    2.RMSE

    RMSE表示均方根误差,是对MSE的开根号,有点类似方差与标准差的区别。人们对均方差和方差一样没有直观的理解,不知道均方差=100时到底是准确度高还是低。所以就有了均方根误差,可以将均方根误差和实际值之间去比较,就可以对预测准确度有个直观的理解。

    比如实际值基本在10左右,均方根误差是5,那么就可以感受到,预测值差不多会有一半的误差。而如果要是看均方误差25的话,可能就不太好理解。

    3.MAE

    MAE是Mean Absolute Error的缩写,表示平均绝对误差,公式如下:

    平均绝对误差就是把均方误差中对预测值与实际值之间的差值求平方改成了求绝对值。与RMSE有点类似。

    4.MAPE

    MAPE是Mean Absolute Percentage Error的缩写,表示平均绝对百分比误差,公式如下:

    MAPE对预测的准确度表示就更直观了,有点类似于增幅的概念。用预测值与实际值之间的差去与实际值相比,看其中的占比有多大。

    5.Python实现

    是不是想问,那上面这些指标用Python怎么计算呢?往下看:

    MSE的计算在Sklearn中有现成的函数可以调用,代码如下:

    from sklearn import metrics
    mse = metrics.mean_squared_error(y_test, y_pre)
    

    RMSE直接对MSE的结果开根号即可,代码如下:

    import numpy as np
    rmse = np.sqrt(mse)
    

    MAE的计算在Sklearn中也有现成的函数可以调用,代码如下:

    from sklearn import metrics
    mae = metrics.mean_absolute_error(y_test, y_pre)
    

    MAPE的计算需要我们自己写代码来实现,不过也比较简单,具体代码如下:

    def  mape(y_true, y_pred): 
        return np.mean(np.abs((y_pred - y_true) / y_true)) * 100
    mape = mape(y_true, y_pred)
    

    以上就是关于模型准确度常用的评价指标以及Python实现代码。

    展开全文
  • 训练集:用于训练模型的集合 测试集:用于测试训练模型的集合。 常见的数据集拆分方法: 1. 留出法 留出法(hold-out)直接将数据集D拆分成两个互斥的集合,其中一个作为训练集S,另一个作为测试集T。即D=S∪T,S∩...
  • 问题描述 下面提供一份判断西瓜好坏的数据集,请根据该数据集,采用神经神经网络算法训练得到模型判断西瓜的好坏。 数据集下载
  • 数学建模之预测模型总结

    万次阅读 多人点赞 2018-01-29 19:51:56
    当在使用相应的预测方法建立预测模型时,我们需要知道主要的一些预测方法的研究特点,优缺点和适用范围。下面就当下一些主要的预测方法进行总结: 预测模型名称 适用范围 优点 缺点 灰色预测模型 ...
  • test) #print(y_test,y_pred) # #输出预测结果报告 print('预测报告为:\n',classification_report(y_test,y_pred)) 西瓜数据集: 编号,色泽,根蒂,敲声,纹理,脐部,触感,密度,含糖率,好瓜与否 1,青绿,蜷缩,浊响,清晰,...
  • 如何评估模型好坏

    千次阅读 2019-06-05 20:47:47
    模型好坏评估,对于不同的模型,不同的用途,有不同的模型评价标准。 回归: MSE(均方误差)—— 判定方法:值越小越好。真实值-预测值 然后平方之后求和平均 RMSE(均根方误差)——判定方法:值越小越好。...
  • 本文旨在对刚学了一点Linear Regression理论知识, 还不知道代码如何实现,以及代码复现后查看哪些参数可以确定线性回归模型训练的好坏的同学,有些许启发. 本文参考公众号’酷酷的算法’ 一. 模型训练 一般我们需要...
  • 当在使用相应的预测方法建立预测模型时,我们需要知道主要的一些预测方法的研究特点,优缺点和适用范围。下面就当下一些主要的预测方法进行总结: 预测模型名称 适用范围 优点 缺点 灰色预测模型 ...
  • matlab评价模型和预测模型

    千次阅读 2020-10-10 22:12:59
    这篇笔记写下来,感觉似乎在我所学范围内对着两种模型简单模式的使用好像并不广泛,也不见什么复杂的例子。复杂的模式也没有去讲……看看之后还有没有相关的内容吧,之后再补。 评价模型 加权平均 适用于每一项权重...
  • 常用时序预测模型的R实现 二

    千次阅读 2018-05-01 18:10:16
    类似的,实现预测模型,第一步则是了解常用的数据预处理方法以求能让模型跑起来,学会判断模型好坏以保证预测结果是靠谱可用的。具体怎样优化模型不在这个系列里详谈。数据预处理在Python的世界里,Pandas就自带很...
  • 线性回归预测模型

    千次阅读 2019-08-09 15:36:30
    一元线性回归模型: ε:模型误差项,平衡等号两边值 import seaborn as sns income = pd.read_csv(r'Salary_Date.csv') sns.lmplot(x='YearExperience',y='Salary', data=income,ci=None) plt.show() 线性...
  • 人工智能训练模型评价好坏方法

    千次阅读 2019-04-07 18:59:44
    有三个指标判断人工智能训练模型的单方面好坏 正确率(accuracy) = TP+TN/TP+FN+FP+TN 精确率(precision) = TP/TP+FP 召回率(recall) = TP/TP+FN 一、F1值 F值是精确率和召回率的调和平均 F1值...
  • 逻辑回归模型得到两个信息,一是哪些特征是比较重要的,二是每个客户是否会违约的一个概率。至此模型并不是直接就能用了。实际我们不会直接用这个概率,而是将其映射到一些分数段当中。 (1)计算公式: 上述p:指...
  • 时间序列预测模型ARIMA浅析

    千次阅读 2019-09-27 17:20:20
    本文聊聊arima模型。ARIMA是一种比较常用的基于历史数据来做预测的时间序列模型。时间序列在商业中有很多应用,比如它可以解释销售中的季节性规律;可以预测新客或流失客户...
  • 基于Python的线性回归预测模型实践 参考自《从零开始学数据分析与挖掘》 [中]刘顺祥 著 线性回归预测模型属于经典的统计学模型,该模型的应用场景是根据已知的变量(即自变量)来预测某个连续的数值变量(因变量)。...
  • 如何判断特征工程的好坏

    千次阅读 2018-03-28 12:20:16
    那么,如何判断特征工程的好坏,这里还是有一些方法的:1:在运用特征工程之前找一个基准的模型性能作为对比。 这个基准模型如何来找,基本的思路有这些:使用随机预测的值来进行评价,准确率大约在50%左右。使用较...
  • 如果你看了前面几篇博客,我们说了决策树,说了adaboost,这次我们说下模型训练和衡量模型好坏 其实我们已经训练了模型了,例如决策树的生成时模型训练,adaboost的实现也是模型训练的过程,所以我们已经训练了好...
  • 在用模型进行预测或分类的时候,需要判断得到模型好坏,就要事先将数据分为训练集合测试集, 在sklearn中直接调用train_test_split来划分数据: from sklearn.model_selection import train_test_split X_train, ...
  • 第七章线性回归预测模型

    千次阅读 多人点赞 2019-07-29 09:22:15
    线性回归模型属于经典的统计学模型,该模型的应用场景是根据已知的变量(自变量)来预测某个连续的数值变量(因变量)。例如,餐厅根据每天的营业数据(包括菜谱价格、就餐人数、预定人数、特价菜折扣等)预测就餐...
  • MATLAB回归预测模型的结果展示和效果检验

    千次阅读 多人点赞 2020-09-25 10:07:32
    对于线性回归模型,同时计算了判定系数R方,其主要作用是评估回归模型对因变量y产生变化的解释程度,也即判定系数R方是评估回归模型好坏的指标。R平方取值范围也为0~1,通常以百分数表示。比如回归模型的R平方等于...
  • 文章目录训练数据集与测试...因为测试数据的分类是未知的,所以我们没办法来评估我们预测的精准度,即模型好坏,也就造成了我们对模型预测结果的可信度无法估计。 因此再实际应用中,我们会将真实数据集按照一定...
  • 一、基本概念上的对比解释1、偏差Bias:描述的是预测值(估计值)的期望与真实值之间的差距。偏差越大,越偏离真实数据,对象是单个模型。 2、方差Variance:描述的是预测值的变化范围,离散程度,也就是离其期望值...
  • 神经网络预测模型基本原理与编程实现

    千次阅读 多人点赞 2021-01-27 14:10:48
    == 学习内容来自科研交流公众号 == 原理 数据归一化 把数据经过处理后使之限定在一定的范围内。比如通常限制在区间[0, 1]或者[-1, 1] ...模型输入层节点数为输入特征数,输出层节点数为想要得到结果的个数。 隐层设计

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 12,189
精华内容 4,875
关键字:

判断预测模型的好坏