Python 3.x 如果glmnet确实需要浮动,为什么在我提供浮动时glmnet.py会在cvglmnet抛出TypeError?
我正在尝试在Glmnet Vignette之后使用Glmnet包运行glm for logistic回归,我的响应变量“y”的类型有问题。 我想同时执行glmnet函数和cvglmnet函数。vignette说,“对于二项逻辑回归,响应变量y应该是两个水平的因子,或者是计数或比例的两列矩阵。”。 我从一个数据帧的一列中得到y值。类似地,我的输入矩阵x来自一个数据帧的几列。所以我的y.values是一个形状为(290)的numpy.ndarray,由1和2组成,是一个整数数组 若要检查我的类型,请执行以下操作:Python 3.x 如果glmnet确实需要浮动,为什么在我提供浮动时glmnet.py会在cvglmnet抛出TypeError?,python-3.x,typeerror,Python 3.x,Typeerror,我正在尝试在Glmnet Vignette之后使用Glmnet包运行glm for logistic回归,我的响应变量“y”的类型有问题。 我想同时执行glmnet函数和cvglmnet函数。vignette说,“对于二项逻辑回归,响应变量y应该是两个水平的因子,或者是计数或比例的两列矩阵。”。 我从一个数据帧的一列中得到y值。类似地,我的输入矩阵x来自一个数据帧的几列。所以我的y.values是一个形状为(290)的numpy.ndarray,由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
我发现他们试图解决这个问题,提到任何对scipy float 64 ndarray的搜索都会返回numpy float ndarray结果,因为它们基本上是相同的对象类型,所以我转换为numpy float:
fit = glmnet(x = fold1_sp.copy(), y = np.float64(y.values), family = 'binomial')
它运行得很好。
但这样我的y数组是由浮点数1'和浮点数2'组成的
如果我现在尝试使用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作为整数使用原始的y.values,那么它再次抱怨它需要scipy float64
那么我如何克服这个类型错误问题呢
非常感谢这有用吗
cvglmnet(x = fold1_sp.copy(), y = np.int64(y.values), family = 'binomial', ptype = 'class')
没有@MLS,它会抛出类似的错误消息:
ValueError:y输入必须是scipy float64 ndarray
我发现glmnet_python的github存储库中存在一个问题,该问题显然已关闭,没有解决问题。