【发布时间】: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 问题呢?
非常感谢
【问题讨论】:
-
我发现 glmnet_python 的 github 存储库中存在一个问题,该问题显然已关闭,但问题并未得到解决。 github.com/bbalasub1/glmnet_python/issues/6
标签: python-3.x typeerror