【问题标题】:create 1-D numpy.ndarray instead of 2 dimensional创建一维 numpy.ndarray 而不是二维
【发布时间】:2021-06-04 23:10:51
【问题描述】:

我正在尝试使用 Python 进行分类。 我有一些输入列(让 k 个变量)和一个输出列。

Let inputfeatures 
  = array([[ 0, 0,  0, ...,  0,  0,  0],
           [ 1, 0,  0, ...,  0,  0,  0],
           [ 1, 0,  0, ...,  0,  0,  0],
           ...,
           [ 0, 0,  0, ...,  0,  0,  0],
           [ 1, 0,  0, ...,  0,  0,  0],
           [ 0, 0,  0, ...,  0,  1,  0]], dtype=int64)
target_array
= array([0, 0, 0, ..., 0, 0, 1], dtype=int64)

我将模型拟合为,

trainedModel = model.fit(inputfeatures,target_array)

我使用的分类器需要所有数据实例的数据表型由长度为 n 的一维 numpy.ndarray 表示

我在拟合时没有出错,因为 target_array 是长度为 n 的一维 numpy.ndarray。

假设,我需要两个输出变量,我如何创建一个长度为 n 的一维 numpy.ndarray 以适应模型?

我刚刚尝试如下:

target_array=data[data.columns[data.columns.isin(['var1', 'var2'])]].values
target_array
array([[1, 1],
       [0, 1],
       [1, 1],
       ...,
       [1, 0],
       [0, 0],
       [0, 0]], dtype=int64)

但它是二维的。如何使其成为长度为 n 的一维 numpy.ndarray?

【问题讨论】:

  • 您是否尝试进行多元预测(目标不止一维)?这是可能的,并且有几种方法可以做到这一点,但需要仔细考虑。这不仅仅是一些机械设置问题。
  • 是的,有多个变量作为目标......目前我有 var1 作为输出变量。我不知道如何将 var1 和 var 2 添加为单个 1-D numpy.ndarray。我需要使用一个特定的分类器,它需要目标变量为一维 numpy.ndarray。
  • 您无法将 2D 目标输出转换为 1D 目标。想一想:如果您的 2D 输出分布是 L 形表面,那么 1D 投影会是什么,以及它如何适合分类器的目标?
  • 好的,知道了,所以我想我应该选择多类端点......目标变量中有 4 个值而不是二进制......

标签: python arrays numpy classification


【解决方案1】:

您不能简单地将n 维标签(或“目标输出”)转换为一维标签。在某些情况下,输出分布是嵌入到n 维空间中的m 维流形,您可以尝试先进行投影(包括,如有必要,非线性投影),但您必须非常仔细地考虑你希望你的分类器或回归器学习什么。

一个简单的策略是每个输出标签都有一个专门的学习器。这将在机械意义上“起作用”,您将能够预测与输入分布一致的任何输入的输出。但它会忽略输出变量之间可能的相互作用。想象一下这样的二维输出分布:

两个学习者,每个人只看到一个输出变量,将没有机会了解该输出结构,并且可能(并且错误地)预测应该为空的正象限中的一些输出点。

一种策略是从您的输入X 中学习第一个变量y_0。然后在使用来自第一个分类器的预测 y_0_hat 扩充您的输入 X 后,学习第二个变量 y_1。以此类推。

一般来说,看看:

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-04-03
    • 2023-01-11
    • 1970-01-01
    • 2012-05-01
    • 2016-12-27
    • 1970-01-01
    • 2018-12-11
    相关资源
    最近更新 更多