首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >OpenCV中的决策树?

OpenCV中的决策树?
EN

Stack Overflow用户
提问于 2018-09-20 03:20:17
回答 1查看 0关注 0票数 0

我有一张桌子,上面有关于某个地区几天内天气和森林火灾数量的信息:

代码语言:javascript
复制
 Temperature | Humidity | Wind | ... | Number of forest fires

所有数据均以数字表示。

有必要使用这些数据来构建决策树,并使用它和输入参数(温度,湿度,风速等)来预测森林火灾的数量。

对于在OpenCV中使用决策树,有一个类CvDTree。在此类中构造决策树有一种方法train

代码语言:javascript
复制
boolean train (Mat trainData, int tflag, Mat responses)

如何转换我的输入(温度,湿度,风,......,森林火灾的数量)Mat trainData

添加:

编译此代码时出错:

代码语言:javascript
复制
package com.selw;
import org.opencv.core.Core;
import org.opencv.core.CvType;
import org.opencv.core.Mat;
import org.opencv.core.Scalar;
import org.opencv.ml.DTrees;
import org.opencv.ml.Ml;

public class Main {

static{ System.loadLibrary(Core.NATIVE_LIBRARY_NAME); }

public static void main(String[] args) {
    Mat data = new Mat(5, 3, CvType.CV_32FC1, new Scalar(0));
    data.put(0, 0, new float[]{1.69f, 1, 0});
    data.put(1, 0, new float[]{1.76f, 0, 0});
    data.put(2, 0, new float[]{1.80f, 0, 0});
    data.put(3, 0, new float[]{1.77f, 0, 0});
    data.put(4, 0, new float[]{1.83f, 0, 1});

    Mat responses = new Mat(5, 1, CvType.CV_32SC1, new Scalar(0));
    responses.put(0, 0, new int[]{0, 1, 1, 0, 1});

    DTrees tree = DTrees.create();
    tree.train(data, Ml.ROW_SAMPLE, responses);
    }
}

错误(在线tree.train(data, Ml.ROW_SAMPLE, responses);):

Exception in thread "main" java.lang.Exception: std::exception: vector too long at org.opencv.ml.StatModel.train_0(Native Method) at org.opencv.ml.StatModel.train(StatModel.java:95) at com.selw.Main.main(Main.java:35) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:497) at com.intellij.rt.execution.application.AppMain.main(AppMain.java:140)

EN

回答 1

Stack Overflow用户

发布于 2018-09-20 13:09:53

Mat数据对象包含树将训练的样本数据。一行对应一个样本。你拥有的样本越多,树木的训练就越好。您可以在Mat数据对象中包含任意数量的列。每列对应不同的样本特征。

Mat响应对象包含树旨在预测的值。这是一个列列矩阵,其行数与Mat数据对象相同。Mat响应对象中的每个行号对应于Mat数据对象中具有相同行号的样本。

对于您根据区域的温度,湿度和风测量值预测森林火灾的示例...需要将每个区域的测量值转换为浮点值。每个区域在Mat数据对象中都有一行,在Data响应对象中有一行。Mat数据行将填充表示为浮点值的区域测量值。Mat响应行将是森林火灾的数量(或者正如Nicholas在您的评论中指出的那样,将森林火灾的数量放入索引直方图中可能更好)。

您可以通过更改以下设置来修复代码中的当前错误:

代码语言:javascript
复制
    tree.setCVFolds(1); // opencv has not implemented pruning with cross-validation yet
    tree.setMaxDepth(10); // there is currently a bug that will run the depth of the tree to infinity if you do not set a max

更改后,我能够无错误地编译和运行。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/-100008867

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档