代码之家  ›  专栏  ›  技术社区  ›  Jorge Leitao

为什么Keras在二元分类中使用目标特征的搜索排序?

  •  0
  • Jorge Leitao  · 技术社区  · 7 年前

    在…上 keras source code ,当准备来自sklearn的数据进行拟合时,我们阅读:

    if len(y.shape) == 2 and y.shape[1] > 1:
        self.classes_ = np.arange(y.shape[1])
    elif (len(y.shape) == 2 and y.shape[1] == 1) or len(y.shape) == 1:
        self.classes_ = np.unique(y)
        y = np.searchsorted(self.classes_, y)
    else:
        raise ValueError('Invalid shape for y: ' + str(y.shape))
    

    第一个 if 对于多类分类,第一个 elif 用于二进制分类。我不明白的是为什么是线

    y = np.searchsorted(self.classes_, y)
    

    需要。不是吗 lambda x: np.searchsorted(np.unique(x), x) 身份功能?

    1 回复  |  直到 7 年前
        1
  •  2
  •   javidcf    7 年前

    不是lambda x:np吗。searchsorted(np.unique(x),x)标识函数?

    y 0 1 . 调用这些函数可以确保最终 y 0 ,与用于表示二进制类的存在或不存在的符号无关;例如,一些输入可以用 -1 1. 相反,或者别的什么。

    我不认为,正如你所说,条件的第一个分支适用于多类问题,第二个分支适用于二进制问题。我认为第二个分支也可以用于多类问题,其中类表示为数字,而不是一个热编码的类。在这种情况下,同样,这种预处理将允许您为类使用任意符号(例如,任意非连续正整数和负整数),并将其“翻译”到范围中 [0, num_classes - 1]