机器学习实战——Logistic回归 实现记录

问题:NameError: name 'weights' is not defined

属于作者的排版错误;

weights = logRegres.gradAscent(dataArr,labelMat)

所以:        weights.getA()是什么?

matrix.getA()

Return self as an ndarray object.
Equivalent to np.asarray(self).
Parameters: None 
Returns: ret : ndarrayself as an ndarray 

也就是说矩阵通过这个getA()这个方法可以将自身返回成一个n维数组对象为什么要这样做呢?

因为plotBestFit()函数中有计算散点x,y坐标的部分,其中计算y的时候用到了weights,如果weights是矩阵的话,weights[1]就是[[0.48007329]](注意这里有中括号!),就不是一个数了,最终你会发现y的计算结果的len()只有1,而x的len()则是60

问题:AttributeError: 'numpy.ndarray' object has no attribute 'getA'

究其原因,还是因为原书中代码有错误(翻遍了整个CSDN都没有结果,最后还是翻了原作者提供的代码明白的,作者也把代码更正过来了 )

weights = wei.getA()

这行可以去掉,然后把def中的 wei改成  weights  。。。然后完美运行~!

问题:TypeError: 'range' object doesn't support item deletion

#原代码
def stocGradAscent1(dataMatrix,classLabels,numIter=150):
    m,n = shape(dataMatrix)
    weights = 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

给range 加  list()即可解决 。原因:python3.x   range返回的是range对象,不返回数组对象

def stocGradAscent1(dataMatrix,classLabels,numIter=150):
    m,n = shape(dataMatrix)
    weights = 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

问题:UnboundLocalError: local variable 'numTestVec' referenced before assignment

这是我遇到过最迷的问题了!!!

原答案:

numTestVect = 0.0 

改正后:

numTestVec = 0.0

就因为多了一个字母,在那对了半天 = =眼盲两小时

问题:UnboundLocalError: local variable 'xxx' referenced before assignment

在函数外部已经定义了变量n,在函数内部对该变量进行运算,运行时会遇到了这样的错误:

主要是因为没有让解释器清楚变量是全局变量还是局部变量。

猜你喜欢

转载自blog.csdn.net/ihiefoxboq/article/details/82873163