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

今天在跑机器学习实战里的对数几率回归时,遇到了一个奇怪的错误:

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

相关代码:

def stochasticGradientAscent0(dataMatrix,classLabels):
    m,n = np.shape(dataMatrix)
    print(m,n)
    alpha = 0.01
    w = np.ones((n))
    for i in range(m):
        h = sigmoid(sum(dataMatrix[i]*w))
        error = classLabels[i]-h
        w = w+alpha*error*dataMatrix[i]
    return w

其中dataMatrix为多维list,classLabels为list。

尝试了Stackoverflow上的将numpy有1.14.0降级到1.11.0,又遇到了奇怪的错误:

ValueError: operands could not be broadcast together with shapes (3,) (0,)

之后尝试了分开乘分开加,加int(),加float(),都无果。然后根据降级后的错误提示,判断应该可能是python的list数据类型不能像numpy.array或者matrix一样进行elementwise操作。于是增加一行代码:

def stochasticGradientAscent0(dataMatrix,classLabels):
    dataMatrix=np.array(dataMatrix)
    m,n = np.shape(dataMatrix)

完美解决。其实想想就应该知道是不可以的……折腾了一个多小时,所以记录下来吧,和大家共享。

装回numpy1.14.0亲测解决问题。

以后涉及numpy.array的,直接在返回时就完成数据类型转换,免得后面出错。

你可能感兴趣的:(机器学习)