我们应该如何解释H2O预测函数的结果?

时间:2017-08-05 16:15:57

标签: python-3.x h2o

我已经训练并存储了随机森林二进制分类模型。现在,我正在尝试使用此模型模拟处理新的(样本外)数据。我的Python(Anaconda 3.6)代码是:

import h2o
import pandas as pd
import sys

localH2O = h2o.init(ip = "localhost", port = 54321, max_mem_size = "8G", nthreads = -1)
h2o.remove_all()

model_path = "C:/sm/BottleRockets/rf_model/DRF_model_python_1501621766843_28117";
model = h2o.load_model(model_path)

new_data = h2o.import_file(path="C:/sm/BottleRockets/new_data.csv")
print(new_data.head(10))

predict = model.predict(new_data)  # predict returns a data frame
print(predict.describe())
predicted = predict[0,0]
probability = predict[0,2]  # probability the prediction is a "1"

print('prediction: ', predicted, ', probability: ', probability)

当我运行此代码时,我得到:

>>> import h2o
>>> import pandas as pd
>>> import sys
>>> localH2O = h2o.init(ip = "localhost", port = 54321, max_mem_size = "8G", nthreads = -1)
Checking whether there is an H2O instance running at http://localhost:54321. connected.
--------------------------  ------------------------------
H2O cluster uptime:         22 hours 22 mins
H2O cluster version:        3.10.5.4
H2O cluster version age:    18 days
H2O cluster name:           H2O_from_python_Charles_0fqq0c
H2O cluster total nodes:    1
H2O cluster free memory:    6.790 Gb
H2O cluster total cores:    8
H2O cluster allowed cores:  8
H2O cluster status:         locked, healthy
H2O connection url:         http://localhost:54321
H2O connection proxy:
H2O internal security:      False
Python version:             3.6.1 final
--------------------------  ------------------------------
>>> h2o.remove_all()
>>> model_path = "C:/sm/BottleRockets/rf_model/DRF_model_python_1501621766843_28117";
>>> model = h2o.load_model(model_path)
>>> new_data = h2o.import_file(path="C:/sm/BottleRockets/new_data.csv")

Parse progress: |█████████████████████████████████████████████████████████| 100%
>>> print(new_data.head(10))
  BoxRatio    Thrust    Velocity    OnBalRun    vwapGain
----------  --------  ----------  ----------  ----------
     1.502    55.044        0.38          37       0.845

[1 row x 5 columns]

>>> predict = model.predict(new_data)  # predict returns a data frame

drf prediction progress: |████████████████████████████████████████████████| 100%
>>> print(predict.describe())
Rows:1
Cols:3


         predict    p0                  p1
-------  ---------  ------------------  -------------------
type     enum       real                real
mins                0.8849431818181818  0.11505681818181818
mean                0.8849431818181818  0.11505681818181818
maxs                0.8849431818181818  0.11505681818181818
sigma               0.0                 0.0
zeros               0                   0
missing  0          0                   0
0        1          0.8849431818181818  0.11505681818181818
None
>>> predicted = predict[0,0]
>>> probability = predict[0,2]  # probability the prediction is a "1"
>>> print('prediction: ', predicted, ', probability: ', probability)
prediction:  1 , probability:  0.11505681818181818
>>> 

我对“预测”数据框的内容感到困惑。请告诉我标有“p0”和“p1”的列中的数字是什么意思。我希望它们是概率,正如你可以通过我的代码看到的那样,我试图得到预测的分类(0或1)以及这种分类正确的概率。我的代码是否正确地执行了此操作?

任何评论都将不胜感激。 查尔斯

2 个答案:

答案 0 :(得分:4)

p0是选择0级的概率(在0和1之间)。

p1是选择第1类的概率(在0和1之间)。

要记住的是,通过对p1应用阈值来进行“预测”。根据您是否要减少误报或漏报来选择该阈值点。这不仅仅是0.5。

为“预测”选择的阈值是max-F1。但是你可以自己提取p1并以你喜欢的方式对其进行阈值处理。

答案 1 :(得分:0)

Darren Cook让我发布我的训练数据的前几行。这是:

   BoxRatio  Thrust  Velocity  OnBalRun  vwapGain  Altitude
0     0.000   0.000     2.186     4.534     0.361         1
1     0.000   0.000     0.561     2.642     0.909         1
2     2.824   2.824     2.199     4.748     1.422         1
3     0.442   0.452     1.702     3.695     1.186         0
4     0.084   0.088     0.612     1.699     0.700         1

响应列标有" Altitude"。第1类是我想从新的"样本外"数据。 " 1"很好,这意味着" Altitude"达到了(真正的积极)。 " 0"意味着" Altitude"未达到(真阴性)。在上面的预测表中," 1"预测的概率为0.11505681818181818。这对我没有意义。

查尔斯