张量流随机森林回归

Posted

技术标签:

【中文标题】张量流随机森林回归【英文标题】:tensorflow random forest regression 【发布时间】:2018-06-24 20:43:07 【问题描述】:

我想实现一个简单的随机森林回归来预测一个值。输入是一些具有多个特征的样本,标签是一个值。但是,我找不到关于随机森林回归问题的简单示例。于是,我看到tensorflow的文档发现:

可以训练和评估随机森林的估计器。 示例:

  python
  params = tf.contrib.tensor_forest.python.tensor_forest.ForestHParams(
      num_classes=2, num_features=40, num_trees=10, max_nodes=1000)
  # Estimator using the default graph builder.
  estimator = TensorForestEstimator(params, model_dir=model_dir)
  # Or estimator using TrainingLossForest as the graph builder.
  estimator = TensorForestEstimator(
      params, graph_builder_class=tensor_forest.TrainingLossForest,
      model_dir=model_dir)
  # Input builders
  def input_fn_train: # returns x, y
    ...
  def input_fn_eval: # returns x, y
    ...
  estimator.fit(input_fn=input_fn_train)
  estimator.evaluate(input_fn=input_fn_eval)
  # Predict returns an iterable of dicts.
  results = list(estimator.predict(x=x))
  prob0 = results[0][eval_metrics.INFERENCE_PROB_NAME]
  prediction0 = results[0][eval_metrics.INFERENCE_PRED_NAME]

但是,当我按照示例进行时,我得到了错误,prob0 = results[0][eval_metrics.INFERENCE_PROB_NAME],错误显示:

Example conversion:
est = Estimator(...) -> est = SKCompat(Estimator(...))
Traceback (most recent call last):
  File "RF_2.py", line 312, in <module>
    main()
  File "RF_2.py", line 298, in main
    train_eval(x_train, y_train, x_validation, y_validation, x_test, y_test, num_tree)
  File "RF_2.py", line 221, in train_eval
    prob0 = results[0][eval_metrics.INFERENCE_PROB_NAME]
KeyError: 'probabilities'

我认为错误发生在INFERENCE_PROB_NAME,我看到了document。不过还是不知道用什么词代替INFERENCE_PROB_NAME

我试过get_metric('accuracy')替换INFERENCE_PROB_NAME,返回错误:KeyError: &lt;function _accuracy at 0x11a06eaa0&gt;

我也试过get_prediction_key('accuracy')替换INFERENCE_PROB_NAME,它返回错误:KeyError: 'classes'

如果你知道可能的答案,请告诉我。提前谢谢你。

【问题讨论】:

【参考方案1】:

我认为您通过提供错误的num_classes=2 而没有更改regression=False 的默认值,是在无意中进行分类问题。请参阅 参数 部分 here。作为快速测试,设置num_classes=0regression=True,然后重新运行您的代码。

【讨论】:

num_classes=0 不适用于 v1.3。【参考方案2】:

num_classes=0 在 tensorflow 1.3.0 中是错误的。

来自 Mehdi Rezaie 的链接,num_classes 是回归问题输出中的维数。

您必须为 num_classes 使用 num_classes=1 或更大的值。 或者你会得到像ValueError: Invalid logits_dimension 0.这样的错误

【讨论】:

以上是关于张量流随机森林回归的主要内容,如果未能解决你的问题,请参考以下文章

随机森林原理

随机森林(分类与回归)

随机森林回归器的特征选择

R语言随机森林回归(randomforest)模型构建

随机森林

随机森林回归严重过拟合单变量数据