【问题标题】:Why does glmnet.py throw a TypeError at cvglmnet when I provide floats, if glmnet does require floats?如果 glmnet 确实需要浮点数,为什么当我提供浮点数时 glmnet.py 会在 cvglmnet 上抛出 TypeError?
【发布时间】:2019-07-07 09:05:43
【问题描述】:

我正在尝试使用 Glmnet 包在 Glmnet Vignette 之后使用 Python 的 Glmnet 包运行逻辑回归的 glm,但我的响应变量“y”的类型存在问题。 我想同时执行 glmnet 函数和 cvglmnet 函数。小插图说“对于二项式逻辑回归,响应变量 y 应该是具有两个水平的因子,或者是计数或比例的两列矩阵。”。 我从熊猫数据框的一列中得到了我的 y 值。同样,我的输入矩阵 x 来自熊猫数据框的几列。所以我的 y.values 是一个 numpy.ndarray 形状 (290,) 由 1 和 2 组成,所以是一个整数数组。

检查我的类型,如果我这样做:

isinstance(y.values,scipy.ndarray)
True
isinstance(y.values,np.ndarray)
True
isinstance(y.values,int)
False
type(y.values[1])
numpy.int64
isinstance(y.values, float)
False

如果我跑步

fit = glmnet(x = fold1_sp.copy(), y = y.values, family = 'binomial')

我收到一个错误

ValueError: y input must be a scipy float64 ndarray

我在https://github.com/bbalasub1/glmnet_python/issues/15 发现他们试图解决这个问题,提到任何搜索 scipy float 64 ndarrays 都会返回 numpy float ndarray 结果,因为它们基本上是相同的对象类型,所以我转换为 numpy float:

fit = glmnet(x = fold1_sp.copy(), y = np.float64(y.values), family = 'binomial')

它运行得很好。 但是这样我的 y 数组是由浮点数 1.'s 和 2.'s 组成的

如果我现在尝试使用 cvglmnet 函数,它会抱怨它需要一个整数

cvfit = cvglmnet(x = fold1_sp.copy(), y = np.float64(y.values), family = 'binomial', ptype = 'class')

抛出以下错误:

TypeError: 'numpy.float64' object cannot be interpreted as an integer

这至少对我来说很奇怪,因为它之前要求浮点数,如果我使用原始 y.values 作为整数使用我的 y,那么它再次抱怨它需要 scipy float64。

那么我该如何克服这个 TypeError 问题呢?

非常感谢

【问题讨论】:

标签: python-3.x typeerror


【解决方案1】:

这行得通吗?

cvglmnet(x = fold1_sp.copy(), y = np.int64(y.values), family = 'binomial', ptype = 'class')

【讨论】:

  • 没有@MLS,它会抛出类似的错误信息:ValueError: y input must be a scipy float64 ndarray
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-08-23
  • 1970-01-01
  • 1970-01-01
  • 2013-04-20
  • 2019-07-08
  • 1970-01-01
  • 2019-10-16
相关资源
最近更新 更多