精华内容
下载资源
问答
  • 再次,基于建立的HSMM模型,给出了两阶段设备缺陷状态早期识别的计算公式及步骤,通过对状态停留时间的概率估计实现了对缺陷状态的早期识别;最后,通过计算机仿真方法模拟了HSMM模型的建模、参数估计及缺陷状态识别...
  • 首先根据模型的对称结构设计试验环境和方案,其次采用数值计算方法探究最佳固定重量的影响机制,然后基于挖掘的信息采用回归方法给出经验计算公式。结果表明:最优重量比例和车流到达频率比例之间存在明显的线性相关...
  • 从优化国防经费投资决策的角度, 结合“渐进式采办”的思想和实物期权的理论, 构建了装备采办最优投资决策模型, 分装备研发和装备应用阶段对军方最佳的投资时机进行了...
  • 贝叶斯分类器的分类原理是通过某对象的先验...应用贝叶斯网络分类器进行分类主要分成两阶段。第一阶段是贝叶斯网络分类器的学习,即从样本数据中构造分类器,包括结构学习和CPT学习;第二阶段是贝叶斯网络分类器的...

     贝叶斯分类器的分类原理是通过某对象的先验概率,利用贝叶斯公式计算出其后验概率,即该对象属于某一类的概率,选择具有最大后验概率的类作为该对象所属的类。目前研究较多的贝叶斯分类器主要有四种,分别是:NaiveBayes、TAN、BAN和GBN。应用贝叶斯网络分类器进行分类主要分成两阶段。第一阶段是贝叶斯网络分类器的学习,即从样本数据中构造分类器,包括结构学习和CPT学习;第二阶段是贝叶斯网络分类器的推理,即计算类结点的条件概率,对分类数据进行分类。这两个阶段的时间复杂性均取决于特征值间的依赖程度,甚至可以是NP完全问题,因而在实际应用中,往往需要对贝叶斯网络分类器进行简化。根据对特征值间不同关联程度的假设,可以得出各种贝叶斯分类器,NaiveBayes、TAN、BAN、GBN 就是其中较典型、研究较深入的贝叶斯分类器。
     

    内容:

       NaiveBayes(朴素贝叶斯,下面简称NB)是ML中的一个非常基础和简单的算法,常常用它来做分类,我用它做过文本分类。现在的研究中大概已经很少有人用它来实验了(除非是做baseline),但确实是个很好的入门的算法,来帮助自己更加深刻的理解ML的本质。

     

    首先从Bayes公式开头:

                  P(C/W) = P(C) * P(W/C) / P(W)

       这个公式是ML中最基本也是最常用到的公式,怎么强调它的重要性都不过分。为了更容易理解这个公式,我将bayes公式放在文本分类问题中进行解释。

       公式的左边,C代表的是文本的类别(例如是体育或者娱乐),W往往是一个测试样本(例如某篇新闻),P(C/W)代表的是这个样本归属于该类别的概率,我们实际中的任务常常就是要得到样本归属各个类别的概率值P(C1/W),P(C2/W)...P(CN/W),然后最大概率值所对应的类别Ci就是该样本被分配的类。


       计算这个概率值的方法就是bayes公式的右边。P(C)表示C这个类别在所有文本中的概率,是先验概率。  实际中,这个值往往通过训练语料计算得到,例如,将训练语料中所有的体育文本数除以训练语料总的文本数,就是体育这个类别的先验概率。
       P(W)则是通过这个公式计算:
               P(W) =  ∑P(W/Ci) * P(Ci)
    可以看出,P(W)的计算可以通过 P(C)和P(W/C)得到。
    P(W/C)的计算下面将重点介绍:

       现在的问题是怎样计算P(W/C)。在现实中,W这个样本往往是用向量表示的,包括了很多的分量 W = (w1, w2,w3,  ... wn), 所以 P(W/C) = P(w1,w2, w3,  ... wn / C),NB的核心在于它假设向量的所有分量之间是独立的。
                       Wi is independent of Wj, if i != j
    对!这个假设就是NB的全部内容了,是不是很简单。有了这个假设,P(W/C)的计算就变为:
                          P(W/C) = ∏ P(wi / C), <成立的条件就是每个分量之间相互独立>
    有人可能会问,那么 P(Wi /C)怎么求呢。以文本分类为例,将文本作为一个向量,那么?
    的分量就是一个词在这个文本中是否存在。例如:
         Wi=  1   if  "乔丹"在文本中出现 0   otherwise
    对于这个Wi,它的P(Wi / C体育) 就是统计所有的体育文章中有多少篇出现了“乔丹”这个词,然后用 出现篇章数 /所有体育篇章数就是我们要的概率值了。回过头看,其实NB很简单,就是在bayes公式的基础上多了一个独立性假设,很好理解的。

     

     比较:

        分类是将一个未知样本分到几个预先已知类的过程。数据分类问题的解决是一个两步过程:第一步,建立一个模型,描述预先的数据集或概念集。通过分析由属性描述的样本(或实例,对象等)来构造模型。假定每一个样本都有一个预先定义的类,由一个被称为类标签的属性确定。为建立模型而被分析的数据元组形成训练数据集,该步也称作有指导的学习。
      在众多的分类模型中,应用最为广泛的两种分类模型是决策树模型(Decision TreeModel)和朴素贝叶斯模型(NaiveBayesianModel,NBC)。决策树模型通过构造树来解决分类问题。首先利用训练数据集来构造一棵决策树,一旦树建立起来,它就可为未知样本产生一个分类。在分类问题中使用决策树模型有很多的优点,决策树便于使用,而且高效;根据决策树可以很容易地构造出规则,而规则通常易于解释和理解;决策树可很好地扩展到大型数据库中,同时它的大小独立于数据库的大小;决策树模型的另外一大优点就是可以对有许多属性的数据集构造决策树。决策树模型也有一些缺点,比如处理缺失数据时的困难,过度拟合问题的出现,以及忽略数据集中属性之间的相关性等。
      和决策树模型相比,朴素贝叶斯模型发源于古典数学理论,有着坚实的数学基础,以及稳定的分类效率。同时,NBC模型所需估计的参数很少,对缺失数据不太敏感,算法也比较简单。理论上,NBC模型与其他分类方法相比具有最小的误差率。但是实际上并非总是如此,这是因为NBC模型假设属性之间相互独立,这个假设在实际应用中往往是不成立的,这给NBC模型的正确分类带来了一定影响。在属性个数比较多或者属性之间相关性较大时,NBC模型的分类效率比不上决策树模型。而在属性相关性较小时,NBC模型的性能最为良好
    --------------------- 
    作者:zhangtian6691844 
    来源:CSDN 
    原文:https://blog.csdn.net/zhangtian6691844/article/details/53432920 
    版权声明:本文为博主原创文章,转载请附上博文链接!

    展开全文
  • 利用复利摩尔定律和BSM模型公式计算出IaaS云服务在种定价方法(pay-per-use和subscription)下相对应的价格范围,并分析了种定价方法的适应范围,更好地解决了现阶段对于IaaS云服务定价中只有云计算服务提供商...
  • (20) 数据库设计包括个方面的设计内容,它们是(A) A. 概念设计和逻辑设计 B. 模式设计和内模式设计 C. 内模式设计和物理设计 D. 结构特性设计和行为特性设计 (21) 下列叙述中正确的是(A) A. 线性表是线性结构 B. ...
  • 分析了模型的扰动界,并对一阶反向累加NHGM(1,1,k)模型和分数阶反向累加NHGM(1,1,k)模型计算公式进行了推导,给出了模型适用于小样本建模的原因.由于充分利用了系统的新信息,分数阶反向累加NHGM(1,1,k)模型...
  •  为了进一步验证测试模型的独立性,引入皮尔逊模型来验证模型在时间上的独立性,利用统计学中皮尔逊模型计算相关度,该相关系数是判断两组数据与某一直线拟合程度的一种度量.它以用户为坐标轴,将评价的物品绘制到...
  • SSD算法评估:AP, mAP和Precision-Recall曲线

    万次阅读 热门讨论 2018-01-27 23:28:51
    这里博主不再赘述mAP的概念及其计算公式,只说怎么修改caffe-ssd的代码。 模型测试 SSD算法的模型测试主要有种方式,一种是训练中每间隔一定的迭代次数进行测试,一种是在模型训练结束后,针对某个caffemo...

    前言

    对于目标检测算法来说,最终模型的评价至关重要。本文将针对SSD检测框架,简要叙述如何在模型的测试阶段,针对标注好的测试集,得到mAP,每一类的AP,以及画出P-R曲线。这里博主不再赘述mAP的概念及其计算公式,只说怎么修改caffe-ssd的代码。

    模型测试

    SSD算法的模型测试主要有两种方式,一种是训练中每间隔一定的迭代次数进行测试,一种是在模型训练结束后,针对某个caffemodel进行测试。第一种很简单,可以直接在solver.prototxt中指定test_interval等参数即可。

    第二种也很容易,只需要准备好如下文件即可:train.prototxt,test.prototxt,solver.prototxt,test.sh,训练好的caffemodel以及标注的测试集lmdb。

    博主选择在其他地方单独开了一个文件夹,因此需要修改以上文件里面的路径信息,为了直观,我都是用绝对路径。首先是脚本文件test.sh,这个很好写,类似下面就行:

    /home/mx/paper-use/caffe/build/tools/caffe train \
    --solver='solver.prototxt' \
    --weights='KITTI_SSD_300x300_ft_iter_61000.caffemodel' \
    --gpu 0 2>&1 | tee test_result.log

    然后是solver.prototxt文件,大致不变,需要指定训练和测试的网络文件,然后把最大迭代次数max_iter设置为0,把test_iter设置为测试图片数量除以测试的batchsize,这样就可以直接进入测试阶段。

    模型测试中会用到train.prototxt和test.prototxt文件,其中需要修改的地方只是所有的路径,列举如下:

    # train.prototxt
     data_param {
        source: "/home/mx/paper-use/caffe/examples/KITTI/KITTI_trainval_lmdb"
        batch_size: 1 # 根据显卡调整,越大越好
        backend: LMDB
      }
    
    label_map_file: "/home/mx/paper-use/caffe/data/KITTI/labelmap_kitti.prototxt"
    
    # test.prototxt
    data_param {
        source: "/home/mx/paper-use/caffe/examples/KITTI/KITTI_test_lmdb"
        batch_size: 1
        backend: LMDB
      }
    annotated_data_param {
        batch_sampler {
        }
        label_map_file: "/home/mx/paper-use/caffe/data/KITTI/labelmap_kitti.prototxt"
      }
    
    save_output_param {
          output_directory: "/home/mx/paper-use/test-kitti-model/main"
          output_name_prefix: "comp4_det_test_"
          output_format: "VOC"
          label_map_file: "/home/mx/paper-use/caffe/data/KITTI/labelmap_kitti.prototxt"
          name_size_file: "/home/mx/paper-use/caffe/data/KITTI/test_name_size.txt"
          num_test_image: 899 # 测试图片的数量
        }  
    
    name_size_file: "/home/mx/paper-use/caffe/data/KITTI/test_name_size.txt"

    最后直接执行./test.sh 命令来执行测试过程,打印的重要信息如下所示:

    I0127 20:25:05.363581  9889 solver.cpp:332] Iteration 0, loss = 1.2211
    I0127 20:25:05.363626  9889 solver.cpp:433] Iteration 0, Testing net (#0)
    I0127 20:25:05.376278  9889 net.cpp:693] Ignoring source layer mbox_loss
    I0127 20:25:16.671056  9889 solver.cpp:553]     Test net output #0: detection_eval = 0.774722
    I0127 20:25:16.671093  9889 solver.cpp:337] Optimization Done.
    I0127 20:25:16.671098  9889 caffe.cpp:254] Optimization Done.

    detection_eval就是mAP,表明本次训练的KITTI模型,其mAP是77.4%。

    输出详细的AP信息

    刚才简单回顾了SSD模型的测试过程,可知模型的测试阶段,solver.cpp一般只会打印mAP信息,但是我们还想知道每一类的AP信息,而且如果能画出P-R曲线就更好了,这都有利于分析模型好坏。

    事实上,在仔细看过solver.cpp的源代码后,可发现如下语句:

    ...
    if (param_.show_per_class_result()) {
            LOG(INFO) << "class" << label << ": " << APs[label];
          }
    ...

    什么意思?这就是说,只要在solver.prototxt中加入如下命令,同时令ap_version: "11point",就能在终端中打印每一类的AP信息。

    show_per_class_result: true

    于是做了实验,发现果然打印了每一类的检测精度:

    I0127 20:43:58.062511 13937 solver.cpp:332] Iteration 0, loss = 1.22286
    I0127 20:43:58.062556 13937 solver.cpp:433] Iteration 0, Testing net (#0)
    I0127 20:43:58.074950 13937 net.cpp:693] Ignoring source layer mbox_loss
    I0127 20:44:09.344396 13937 solver.cpp:540] class1: 0.722297
    I0127 20:44:09.344655 13937 solver.cpp:540] class2: 0.878479
    I0127 20:44:09.344856 13937 solver.cpp:540] class3: 0.723391
    I0127 20:44:09.344866 13937 solver.cpp:553]     Test net output #0: detection_eval = 0.774722
    I0127 20:44:09.344885 13937 solver.cpp:337] Optimization Done.
    I0127 20:44:09.344889 13937 caffe.cpp:254] Optimization Done.

    car的精度最高,达到了87.8%,而person和cyclist则要低一些,说明我们可以在后两类的提升上想想办法。

    进一步看,SSD源码中涉及到mAP计算的部分在bbox_util.cpp中,可以发现一个ComputeAP函数,粘贴如下:

    void ComputeAP(const vector<pair<float, int> >& tp, const int num_pos,
                   const vector<pair<float, int> >& fp, const string ap_version,
                   vector<float>* prec, vector<float>* rec, float* ap) {
      const float eps = 1e-6;
      CHECK_EQ(tp.size(), fp.size()) << "tp must have same size as fp.";
      const int num = tp.size();
      // Make sure that tp and fp have complement value.
      for (int i = 0; i < num; ++i) {
        CHECK_LE(fabs(tp[i].first - fp[i].first), eps);
        CHECK_EQ(tp[i].second, 1 - fp[i].second);
      }
      prec->clear();
      rec->clear();
      *ap = 0;
      if (tp.size() == 0 || num_pos == 0) {
        return;
      }
    
      // Compute cumsum of tp.
      vector<int> tp_cumsum;
      CumSum(tp, &tp_cumsum);
      CHECK_EQ(tp_cumsum.size(), num);
    
      // Compute cumsum of fp.
      vector<int> fp_cumsum;
      CumSum(fp, &fp_cumsum);
      CHECK_EQ(fp_cumsum.size(), num);
    
      // Compute precision.
      for (int i = 0; i < num; ++i) {
        prec->push_back(static_cast<float>(tp_cumsum[i]) /
                        (tp_cumsum[i] + fp_cumsum[i]));
      }
    
      // Compute recall.
      for (int i = 0; i < num; ++i) {
        CHECK_LE(tp_cumsum[i], num_pos);
        rec->push_back(static_cast<float>(tp_cumsum[i]) / num_pos);
      }
    
      if (ap_version == "11point") {
        // VOC2007 style for computing AP.
        vector<float> max_precs(11, 0.);
        int start_idx = num - 1;
        for (int j = 10; j >= 0; --j) {
          for (int i = start_idx; i >= 0 ; --i) {
            if ((*rec)[i] < j / 10.) {
              start_idx = i;
              if (j > 0) {
                max_precs[j-1] = max_precs[j];
              }
              break;
            } else {
              if (max_precs[j] < (*prec)[i]) {
                max_precs[j] = (*prec)[i];
              }
            }
          }
        }
        for (int j = 10; j >= 0; --j) {
          *ap += max_precs[j] / 11;
        }
      } else if (ap_version == "MaxIntegral") {
        // VOC2012 or ILSVRC style for computing AP.
        float cur_rec = rec->back();
        float cur_prec = prec->back();
        for (int i = num - 2; i >= 0; --i) {
          cur_prec = std::max<float>((*prec)[i], cur_prec);
          if (fabs(cur_rec - (*rec)[i]) > eps) {
            *ap += cur_prec * fabs(cur_rec - (*rec)[i]);
          }
          cur_rec = (*rec)[i];
        }
        *ap += cur_rec * cur_prec;
      } else if (ap_version == "Integral") {
        // Natural integral.
        float prev_rec = 0.;
        for (int i = 0; i < num; ++i) {
          if (fabs((*rec)[i] - prev_rec) > eps) {
            *ap += (*prec)[i] * fabs((*rec)[i] - prev_rec);
          }
          prev_rec = (*rec)[i];
        }
      } else {
        LOG(FATAL) << "Unknown ap_version: " << ap_version;
      }
    }

    从函数可知,SSD计算AP的方法有三种:一种是VOC2007的11point方法,一种是VOC2012的最大值积分法,最后是普通积分方法,可以通过超参数ap_version来控制,默认是”Integral”。其中区别可以参考这篇文章:ap、mAP多标签图像分类任务的评价方法。根据高等数学原理,11point使用简单的均值计算,而最大值积分则要精细一些,因此后者测出来的AP值要高于前者,而且我认为也要准确一些。

    目前来看,如果想要作出简单的P-R曲线,还是要使用11point的方法,我们只需要打印出recall为0,0.1,0.2,…,1.0这11个recall值之下的precision值就可以。这需要修改4个文件:solver.cpp,caffe.prototxt,bbox_util.hpp和bbox_util.cpp。

    首先修改bbox_util.hpp和bbox_util.cpp中的ComputeAP函数声明,增加一个vector动态数组变量来存储11个精度值,这需要在函数体的for循环中使用push_back()语句。

    void ComputeAP(const vector<pair<float, int> >& tp, const int num_pos,
                   const vector<pair<float, int> >& fp, const string ap_version,
                   vector<float>* prec, vector<float>* rec, float* ap, vector<float> *temp) // add temp parameter          
    ...
    for (int j = 10; j >= 0; --j) {
        *ap += max_precs[j] / 11;
        temp->push_back(max_precs[j]); // save max_precs
    }

    然后在solver.cpp中添加相应的打印语句。

      vector<float> prec, rec, p_r; // add p_r vector
          ComputeAP(label_true_pos, label_num_pos, label_false_pos,
                    param_.ap_version(), &prec, &rec, &(APs[label]), &p_r); // add parameters
          mAP += APs[label];
          if (param_.show_per_class_result()) {
            LOG(INFO) << "class" << label << ": " << APs[label];
            if(param_.show_pr_value()) // add bool parameter
            {
              for(int i=0;i<p_r.size();i++)
              {
                LOG(INFO) << "p-r value: " << p_r[i]; // print p_r value(11points)
              }
            }  
          }

    我们在solver.cpp中使用了show_pr_value这个bool变量来控制是否打印信息。因此需要在caffe.proto中增加一条,以便solver.prototxt可以解析该信息,我这里最新的可用编号是45。

       ...
    // If true, display per class result.
      optional bool show_per_class_result = 44 [default = false]; 
    
    // If true, display pr value of per class
      optional bool show_pr_value = 45 [default = false]; # add a line

    可能有同学觉得自己加语句有些麻烦,也可以到这里下载:修改SSD源码打印AP,然后替换原有的文件,接下来需要重新编译caffe-ssd,最后呢,我们就在solver.prototxt中添加show_pr_value: true 语句,同时注意ap_version: "11point"

    运行命令执行测试过程,我们可以得到以下信息:

    I0127 21:33:55.290652 22867 solver.cpp:332] Iteration 0, loss = 0.735246
    I0127 21:33:55.290686 22867 solver.cpp:433] Iteration 0, Testing net (#0)
    I0127 21:33:55.302778 22867 net.cpp:693] Ignoring source layer mbox_loss
    I0127 21:34:06.567648 22867 solver.cpp:540] class1: 0.722297
    I0127 21:34:06.567668 22867 solver.cpp:545] p-r value: 0
    I0127 21:34:06.567674 22867 solver.cpp:545] p-r value: 0
    I0127 21:34:06.567679 22867 solver.cpp:545] p-r value: 0.5
    I0127 21:34:06.567693 22867 solver.cpp:545] p-r value: 0.657895
    I0127 21:34:06.567698 22867 solver.cpp:545] p-r value: 0.84
    I0127 21:34:06.567703 22867 solver.cpp:545] p-r value: 0.947368
    I0127 21:34:06.567706 22867 solver.cpp:545] p-r value: 1
    I0127 21:34:06.567720 22867 solver.cpp:545] p-r value: 1
    I0127 21:34:06.567725 22867 solver.cpp:545] p-r value: 1
    I0127 21:34:06.567729 22867 solver.cpp:545] p-r value: 1
    I0127 21:34:06.567734 22867 solver.cpp:545] p-r value: 1
    I0127 21:34:06.567929 22867 solver.cpp:540] class2: 0.878479
    I0127 21:34:06.567936 22867 solver.cpp:545] p-r value: 0
    I0127 21:34:06.567940 22867 solver.cpp:545] p-r value: 0.793226
    I0127 21:34:06.567955 22867 solver.cpp:545] p-r value: 0.945498
    I0127 21:34:06.567960 22867 solver.cpp:545] p-r value: 0.969359
    I0127 21:34:06.567975 22867 solver.cpp:545] p-r value: 0.984076
    I0127 21:34:06.567979 22867 solver.cpp:545] p-r value: 0.986207
    I0127 21:34:06.567984 22867 solver.cpp:545] p-r value: 0.99
    I0127 21:34:06.567989 22867 solver.cpp:545] p-r value: 0.994898
    I0127 21:34:06.567994 22867 solver.cpp:545] p-r value: 1
    I0127 21:34:06.567999 22867 solver.cpp:545] p-r value: 1
    I0127 21:34:06.568004 22867 solver.cpp:545] p-r value: 1
    I0127 21:34:06.568164 22867 solver.cpp:540] class3: 0.723391
    I0127 21:34:06.568184 22867 solver.cpp:545] p-r value: 0
    I0127 21:34:06.568190 22867 solver.cpp:545] p-r value: 0
    I0127 21:34:06.568204 22867 solver.cpp:545] p-r value: 0.353846
    I0127 21:34:06.568212 22867 solver.cpp:545] p-r value: 0.786408
    I0127 21:34:06.568228 22867 solver.cpp:545] p-r value: 0.8625
    I0127 21:34:06.568233 22867 solver.cpp:545] p-r value: 0.954545
    I0127 21:34:06.568239 22867 solver.cpp:545] p-r value: 1
    I0127 21:34:06.568244 22867 solver.cpp:545] p-r value: 1
    I0127 21:34:06.568249 22867 solver.cpp:545] p-r value: 1
    I0127 21:34:06.568255 22867 solver.cpp:545] p-r value: 1
    I0127 21:34:06.568260 22867 solver.cpp:545] p-r value: 1
    I0127 21:34:06.568267 22867 solver.cpp:553]     Test net output #0: detection_eval = 0.774722
    I0127 21:34:06.568280 22867 solver.cpp:337] Optimization Done.
    I0127 21:34:06.568286 22867 caffe.cpp:254] Optimization Done.

    画P-R曲线

    有了每一个类别的Precision和Recall信息,很容易画出P-R曲线,一个简单的python程序就可以了,这个程序比较简陋,以后有机会再把它优化下。

    # pr_curve.py
    # coding:utf-8
    
    import numpy as np
    import matplotlib.pyplot as plt
    
    data=np.loadtxt('pr.txt')
    mean=np.mean(data[:,1:],axis=1)
    tick=[0,0.1,0.2,0.3,0.4,0.5,0.6,0.7,0.8,0.9,1.0]
    
    plt.figure()
    plt.subplot(2,2,1)
    plt.title('Cyclist, AP=0.722')
    plt.xlabel('Recall')
    plt.ylabel('Precision')
    plt.axis([0, 1, 0, 1.05])
    plt.xticks(tick)
    plt.yticks(tick)
    plt.plot(data[:,0],data[:,1])
    
    plt.subplot(2,2,2)
    plt.title('Car, AP=0.878')
    plt.xlabel('Recall')
    plt.ylabel('Precision')
    plt.axis([0, 1, 0, 1.05])
    plt.xticks(tick)
    plt.yticks(tick)
    plt.plot(data[:,0],data[:,2])
    
    plt.subplot(2,2,3)
    plt.title('Person, AP=0.723')
    plt.xlabel('Recall')
    plt.ylabel('Precision')
    plt.axis([0, 1, 0, 1.05])
    plt.xticks(tick)
    plt.yticks(tick)
    plt.plot(data[:,0],data[:,3])
    
    plt.subplot(2,2,4)
    plt.title('Overall, mAP=0.774')
    plt.xlabel('Recall')
    plt.ylabel('Precision')
    plt.axis([0, 1, 0, 1.05])
    plt.xticks(tick)
    plt.yticks(tick)
    plt.plot(data[:,0],mean)
    plt.show()

    画出的曲线如下所示:

    这里写图片描述

    KITTI官网中画AP图像用了41个点,而这个仅仅11个点,曲线看起来并不平滑,有时间再研究下怎么得到更精确的数据。

    展开全文
  • 然后采用二阶拉格朗日方程,对其进行相应的动力学分析和比较,求出模型的动力学标准状态方程和弹跳高度的计算公式;并通过计算机模拟结果和试验结果的对比说明了分析的正确性。本文的分析结果同时适用于连续型和间隙...
  • 本系列基于自然资源部2019年6月和2020年1月印发的版《资源环境承载能力和国土空间开发适宜性评价指南(试行)》(简称“双评价”),因为计算公式与方法在2020.1月版的少之又少,可以说不限制模型方法,只有规定...

    图片

    本系列基于自然资源部2019年6月和2020年1月印发的两版《资源环境承载能力和国土空间开发适宜性评价指南(试行)》(简称“双评价”),因为计算公式与方法在2020.1月版的少之又少,可以说不限制模型方法,只有规定大体的方向,但是都可以基于2019.6月的指标、模型、方法进行计算,因此一些定义、目标、流程、制图规范都基于新版的,但是方法都基于旧版的。
    首先说明基于2020.1月版的“双评价”的定义、目标:
    定义:
    (1)“资源环境承载力评价”:在一定发展阶段,经济技术水平和生产生活方式,一定地域范围内资源环境要素能够支撑的农业生产、城镇建设等人类活动的最大规模。
    (2)“国土空间开发适宜性评价”: 在维系生态系统健康的前提下,综合考虑资源环境要素和区位条件以及特定国土空间,进行农业生产城镇建设等人类活动的适宜程度。
    目标:
    分析区域资源禀赋与环境条件,研判国土空间开发利用问题和风险,识别生态保护极重要区(含生态系统服务功能极重要区和生态极脆弱区),明确农业生产、城镇建设的最大合理规模和适宜空间,为编制国土空间规划,优化国土空间开发保护格局,完善区域主题功能定位,划定三条控制线,实施国土空间生态修复和国土综合整治重大工程提供基础依据,促成形成以生态优先、绿色发展为导向的高质量发展新路子。

    然后说明于2020.1月版的“双评价”的工作流程以及要求:

    工作流程:

    图片

    通过工作流程可看出,本系列将分为五大步:

    第一步:首先要进行本底评价,也就是以往版本双评价中的1土地资源评价、2水资源评价、3气候评价、4生态评价、5环境评价、6灾害评价六个单项评价。需要提出的是,虽然新版的双评价似乎可以直接开始生态保护重要性评价,但是本系列依然先从6个本底评价开始,各位可以当作一个旧版的研究评价。

    第二步:生态保护重要性评价。生态保护省级评价从区域生态安全底线出发,在陆海全域,评价水源涵养、水土保持、生物多样性维护、防风固沙、海岸防护等生态系统服务功能重要性,以及水土流失、石漠化、土地沙化、海岸侵蚀及沙源流失等生态敏感性,综合形成极重要区和重要区。

    第三步:农业生产适宜性评价。省级在生态保护极重要区以外的区域,开展种植业、畜牧业、渔业等农业生产适宜性评价,识别农业生产适宜区和不适宜区。
    城镇建设适宜性评价。省级在生态保护极重要区以外的区域,优先考虑环境安全、粮食安全和地质安全等底线要求,识别城镇建设不适宜区。沿海地区针对海洋开发利用活动开展评价。

    第四步:承载规模评价。基于现有经济技术水平和生产生活方式,以水资源、空间约束等为主要约束,缺水地区重点考虑水平衡,分别评价各评价单元可承载农业生产、城镇建设的最大合理规模。各地可结合环境质量目标、污染物排放标准和总量控制等因素,评价环境容量对农业生产、城镇建设约束要求。按照短板原理,取各约束条件下的最小值作为可承载的最大合理规模。

    第五步:综合分析,如资源禀赋分析、问题和风险识别、潜力分析和情景分析等。

    最后说明于2020.1月版的“双评价”的制图规范:
    要求:评价统一使用2000国家大地坐标系(CGCS2000),高斯-克吕格投影,陆域部分采用1985国家高程基准,海域部分采用理论深度基准面高程基准。制图规范、精度等参考省级国土空间规划要求。
    制图规范:
    在这里插入图片描述

    那么再参考《省级国土空间规划编制指南》,明确制图规范与精度的要求:
    字体:汉字宋体,西字Times New Roma。
    比例尺:1:50万或1:100万。
    在这里插入图片描述

    指北针:
    图例:图幅内左下角或右下角。

    因为本系列只是起研究模拟作用,因此以广东省(省级)为例,地理坐标系使用WGS1984(许多网上得到的数据都是WGS84,所以不使用CGCS2000),投影使用WGS_1984_UTM_Zone_49N,空间分辨率设为90m。

    首先,对广东省水资源、土地资源、气候、生态、环境、灾害进行评价。

    那么我们先从土地资源评价开始,这样第一步就开始了!

    1-1-1 广东省农业土地资源评价

    公式:农业指向的土地资源评价:[农业耕作条件]=f ([坡度], [土壤质地])
    农业指向的步骤要求(坐标系与精度与双评价要求不同,主要操作步骤相同):
    坡度:利用 DEM,计算地形坡度,按≤2°、26°、615°、15~25°、>25°划分为平地、平坡地、缓坡地、缓陡坡地、陡坡地 5 个等级,生成坡度分级图。
    土壤质地:将土壤的粉砂含量≥80%区域,农业土地资源直接取最低等;60%≤粉砂土含量<80%的区域,将坡度分级降 1 级作为农业土地资源等级。

    首先我们需要的数据:DEM数据、土壤质地数据。
    广东省DEM数据如下,空间分辨率为90m:
    在这里插入图片描述

    首先坡度分析,得到slope:

    重分类,(至于为什么取50,40,30,20,10,在土壤质地分类后会讲到)得到nyslope,那么50,40,30,20,10依次代表平地、平坡地、缓坡地、缓陡坡地、陡坡地:

    在这里插入图片描述

    接下来需要根据土壤质地进行分类,那么在2020.1月版的双评价中,没有指明划分标准,因此参照2019.6月版的:

    在这里插入图片描述

    可以看出主要是从粉砂的含量进行划分,那么需要使用到HWSD世界土壤数据库,然后使用到其中的clay字段,clay指黏土,那么粗略的可以认为,土壤中若粉砂≥80%,则黏土≤20%,若粉砂≥60%,则黏土≤40%,因此,将土壤质地按照黏土含量进行分级,≤20%,取最低,20%<clay<40%降一级,≥40%不降级。HWSD世界土壤数据库如下:

    在这里插入图片描述

    首先按掩膜提取广东省域的,然后需要进行投影以及重采样至90m分辨率,再次不重复类似操作:

    在这里插入图片描述

    然后进行连接,连接HWSD_DATA的MU_GLOBAL:

    在这里插入图片描述

    HWSD_DATA中的CLAY就是我们所需的黏土含量,然后我们新建字段,赋值后移除连接:

    在这里插入图片描述

    然后我们就可以根据得到的CLAY字段进行重分类了:

    在这里插入图片描述

    然后基于土壤质地,我们将坡度分级的农业资源等级进行降级,我们使用栅格计算器进行相加:

    在这里插入图片描述

    那么很明显的,我们会得到11,12,13,21,22,23…51,52,53这样的数值,那么个位数为1的,很明显就是黏土含量最少,也就是粉砂含量最多的,直接取最低等级;个位数为2的,降一级处理;个位数为3的,不降级,懂了吧!因此再进行一个重分类:

    在这里插入图片描述

    在这里插入图片描述

    那么很明显的,5-1就是农业指向的土地资源等级从高-低了,我们根据制图规范、配色以及比例尺、指北针,进行一个出图:
    在这里插入图片描述

    这样我们就得到了农业指向的土地资源分级图,当然由于坐标、数据精度等问题,与实际情况可能有很大出入,因此本文只是步骤流程的演示,并不对结果的准确性进行保证哦!

    在这里插入图片描述

    展开全文
  • 数学模型、决策变量、目标函数、约束条件、标准型、图解法、基矩阵、基变量、非基变量、可行解、基解、基可行解、最优解、基最优解、唯一解、多重解、无界解、无可行解、单纯形法、最小比值、入基变量、出基变量、解...
  • 为明确土体应变范围,通过三维物理模拟加载系统开展4组不同桩基埋深下的单桩水平静载试验,通过桩前土压力数据引入最大应变截面积S0和最远应变距离L个参数,并以此为基础,在已有应变楔形模型上,通过公式推算,得出桩周...
  • 使用我们新颖的LRP公式计算每个关注矩阵的相关性。 每个注意力矩阵的梯度反向传播与可视化类有关。渐变用于平均注意力头。 具有推出功能的图层聚合。 请注意我们的,您可以在其中运行本文中的个班级特定示例。 要...
  • 软件工程知识点

    2012-12-02 21:34:25
    (1)特点:线性化模型阶段具有里程碑特征、基于文档的驱动、阶段评审机制。 (2)作用:为软件项目按规程管理提供了便利,为其他过程模型的推出提供了一个良好的 拓展平台。 (3)局限性:主要适合于需求明确且无...
  • 2019数据运营思维导图

    2019-03-29 21:34:09
    活跃用户留存 一般不分析活跃用户留存,而是通过DAU观察活跃用户流失数据 留存是评定游戏综合质量的最佳指标 5、平均使用时长和平均使用次数 可以使用柱状图来展现 项宏观行为指标可反映出用户对app的依赖程度 ...
  • 数据运营思维导图

    2018-04-26 14:24:22
    项宏观行为指标可反映出用户对app的依赖程度 如果留存较好,但时长和次数均不高,则可能是因过于强调每日登录奖励,但持续的app内容用户家缺乏吸引力所致 用户分析 用户规模 下载数量 新增用户 定义:每日...
  • 软件设计规范

    2015-03-11 11:57:50
    比如数学公式计算、图形图象的处理、频谱分析、词法和语法分析。因此算法不是通用的软件算法。也因此软件构造是软件规范的一部分,因为它是通用的软件构造技术。 计算技术和应用之间有明显的区别,是种不同的...

空空如也

空空如也

1 2 3 4 5
收藏数 97
精华内容 38
关键字:

两阶段模型计算公式