---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-144-f67543662eb4> in <module>
----> 1 weights=logRegres.stocGradAscent1(dataArr,labelMat)
D:\maxwelllearning\maxwellhandon\machine learning in action\cp05\logRegres.py in stocGradAscent1(dataMatrix, classLabels, numIter)
88 error = classLabels[randIndex] - h
89 weights = weights + alpha * error * dataMatrix[randIndex]
---> 90 del(dataIndex[randIndex])
91 return weights
TypeError: 'range' object doesn't support item deletion
Original Code :
def stocGradAscent1(dataMatrix, classLabels,numIter=150):
dataMatrix=np.array(dataMatrix)
m,n = np.shape(dataMatrix)
weights = np.ones(n)
for j in range(numIter):
dataIndex = range(m)
for i in range(m):
alpha = 4/(1.0+j+i)+0.01
randIndex = int(random.uniform(0,len(dataIndex)))
h = sigmoid(sum(dataMatrix[randIndex]*weights))
error = classLabels[randIndex] - h
weights = weights + alpha * error * dataMatrix[randIndex]
del(dataIndex[randIndex])
return weights
Modified Code :
def stocGradAscent1(dataMatrix, classLabels,numIter=150):
dataMatrix=np.array(dataMatrix)
m,n = np.shape(dataMatrix)
weights = np.ones(n)
for j in range(numIter):
dataIndex = list(range(m))
for i in range(m):
alpha = 4/(1.0+j+i)+0.01
randIndex = int(random.uniform(0,len(dataIndex)))
h = sigmoid(sum(dataMatrix[randIndex]*weights))
error = classLabels[randIndex] - h
weights = weights + alpha * error * dataMatrix[randIndex]
del(dataIndex[randIndex])
return weights
Root cause:
Due to Python3.x range return is a object, is not array.
Solution:
Setting dataIndex = range(m) into dataIndex = list(range(m))