今天在跑机器学习实战里的对数几率回归时,遇到了一个奇怪的错误:
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。
尝试了*上的将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的,直接在返回时就完成数据类型转换,免得后面出错。