• Pandas数据分析33——数据多条件筛选(点估计和区间估计评价指标)


    本次是写论文代码区间估计评价指标有感.....


    数据框有两列的时候,我们想筛选A列大于B列的样本出来时,只需要用布尔值索引就行:

    df[df['A']>df['B]]

    可是多条件的筛选的时候怎么办,比如我需要A大于B列,还有A小于C列。

    可以写多条件的索引:

    df[(df['actual']>df['Low']) &(df['actual']'Upper'])]

    在做区间估计的评价指标的时候,我想找出预测的真实值小于最大值和大于最小值的情况的个数,可以用上面的方法,还可以用一个更加简单的方法:

    df.query('Low)

    也可以复杂点,用新增列布尔值去逻辑运算,多条件判断,找到不符合情况的样本的布尔值,然后去索引。

    df[df.assign(up=df.Upperdf.actual).assign(bo=lambda d:d[['up','lo']].any(axis=1))['bo']]

     

     区间估计指标

    这里给出论文里面的四个区间估计的评价指标公式:

    PICP:

     PINAW:

     CWC:

     还有一个新指标PIEE:

     他们各有各的优缺点,要结合起来看,


    下面给出他们的计算代码函数:

     

    1. import numpy as np
    2. import pandas as pd
    3. def PICP(df_alltau,y_test,u=0.9):
    4. df=pd.DataFrame()
    5. df['Low']=np.array(df_alltau.T.min())
    6. df['Upper']=np.array(df_alltau.T.max())
    7. df['actual']=np.array(y_test)
    8. picp=len(df.query('Low))/len(y_test)
    9. df['inter']=df['Upper']-df['Low']
    10. rax=df['actual'].max()-df['actual'].min()
    11. pinaw=df['inter'].mean()/rax
    12. gama=np.greater(0,(picp-u))*1
    13. #print(gama)
    14. cwc=pinaw*(1+gama*np.exp(-(picp-u)))
    15. eup=df[df.assign(up=df.Upper'inter2'].sum()
    16. elo=df[df.assign(up=df.Low>df.actual).up].assign(inter2=df.Low-df.actual)['inter2'].sum()
    17. piee=(eup+elo)/(len(y_test)*rax)
    18. return picp,pinaw,cwc,piee

     

     df_alltau就是预测的区间估计值(对一个y预测了很多可能性),y_test就是测试集数据。

    u是CWC的PICP阈值,这里取了0.9。  aita为了方便取1了。

    最难整的就是PIEE,我筛选了很久.....


    点估计评价指标

    回归问题的点估计评价指标很常用,通常是MAE,RMSE,MAPE,r/R^{2}等,给出他们四个的计算代码:

    1. import numpy as np
    2. import pandas as pd
    3. from sklearn.metrics import mean_absolute_error
    4. from sklearn.metrics import mean_squared_error,r2_score
    5. def evaluation(y_test, y_predict):
    6. y_test=np.array(y_test);y_predict=np.array(y_predict)
    7. mae = mean_absolute_error(y_test, y_predict)
    8. mse = mean_squared_error(y_test, y_predict)
    9. rmse = np.sqrt(mean_squared_error(y_test, y_predict))
    10. mape=(abs(y_predict -y_test)/ y_test).mean()
    11. r_2=r2_score(y_test, y_predict)
    12. return mae, rmse, mape,r_2

  • 相关阅读:
    springboot毕设项目车辆道路管理系统qy68y(java+VUE+Mybatis+Maven+Mysql)
    「学习笔记」平衡树基础:Splay 和 Treap
    关于winform的chart--x轴时间格式的显示,以及x轴放大缩小的例子
    yolov5系列-yolov5模型部署到web端
    C#学习笔记---异常捕获和变量运算符
    前端时间分片渲染
    【Linux集群教程】08 部署分布式存储Ceph高可用集群
    sed命令在Mac和Linux下的不同
    5. 基于Embedding实现超越elasticsearch高级搜索
    AFUDOS命令
  • 原文地址:https://blog.csdn.net/weixin_46277779/article/details/127909686