TensorFlow和Keras中的随机森林:为什么只有两个值的分类变量会以不同的方式处理?

dffbzjpn  于 2023-05-18  发布在  其他
关注(0)|答案(1)|浏览(236)

我想在TensorFlow / Keras中使用随机森林对一些分类变量进行预测。我期望输出应该是概率的向量,并且如果至少有三个可能的输出值,则是这种情况。令人惊讶的是,如果可能值的集合仅由两个元素组成,则答案似乎是 * 单个数字 *。
如果我不需要单独处理这些特殊情况,我的代码会更容易,所以我的问题是:为什么TensorFlow以一种特殊的方式处理这一点,是否有某种方法可以以统一的方式处理这两种情况?
下面你可以找到最小的例子。

import tensorflow as tf
import keras
import tensorflow_decision_forests as tfdf
import pandas as pd

def train_and_predict(multi, values):
    train_pd=pd.DataFrame( [ {"key":v, "value":v} for _ in range(multi) for v in values ] )
    train_tf = tfdf.keras.pd_dataframe_to_tf_dataset(train_pd,  label= "value")

    rf = tfdf.keras.RandomForestModel()
    rf.fit(x=train_tf)

    to_guess =pd.DataFrame( [ {"key":v} for v in values]  )
    guess_tf = tfdf.keras.pd_dataframe_to_tf_dataset(to_guess)
    return rf.predict(guess_tf )

print(train_and_predict(500, ["a", "b"]      ) )
print(train_and_predict(500, ["a", "b", "c"] ) )

对于输入

print(train_and_predict(500, [3, 5] )

我们得到了一个概率向量

[[0.         0.         0.         0.99999917 0.         0.        ]
 [0.         0.         0.         0.         0.         0.99999917]]

不幸的是,对于分类变量

print(train_and_predict(500, ["a", "b"] )

我们得到一个数字作为答案

[[0.        ]
 [0.99999917]]

而如果存在至少三个可能值:

print(train_and_predict(500, ["a", "b", "c"] )

我们得到一个很好的概率列表:

[[0.99999917 0.         0.        ]
 [0.         0.99999917 0.        ]
 [0.         0.         0.99999917]]

我在Kaggle上使用TensorFlow和Keras版本“2.11.0”。

bsxbgnwa

bsxbgnwa1#

**简短回答:**如果您的分类问题(带有字符串标签)在标签中只有两个值(即二进制分类),TF-DF仅输出正标签的概率P,即具有较大的字典序的一个。另一个标签的概率可以用1-p计算。
详情:
字符串标签:Keras本身不支持字符串标签-对于Keras,标签必须是(正)整数。由于TF-DF是通过Keras API使用的,因此函数tfdf.keras.pd_dataframe_to_tf_dataset()通过对标签列中的字符串进行排序并分配标签0,1,...,n-1将它们转换为整数,其中n是标签列中唯一值的数量。

对于n=2,该问题被识别为二进制分类问题,TF-DF仅输出正类(Map到1的类)的概率,即根据Python对字符串值的排序的第二个字符串。

整型标签:如果标签已经是整数,tfdf.keras.pd_dataframe_to_tf_dataset()不会修改它们。TF-DF还将整数标签识别为“已经整数化”,并且不应用任何Map以保存空间/复杂性。相反,它假设可能的标签是0,1,...,max_label,其中max_label是标签列中最大标签的值。因此,输出向量具有max_label+1维度。如果你的标签是[0,1],你也会看到只有标签1的概率被返回。

完整披露:Tensorflow Decision Forests的作者之一。

相关问题