线性回归2(局部加权回归)

上节我们讨论了标准的求回归系数的方法,今天我们来讨论使用局部加权的方法求回归系数。对于线性回归有可能出现欠拟合现象。所以为了避免这种情况的发生我们为每个数据点引入一个权重来降低误差,我们这里计算权重的方法是使用高斯核公式计算。这里使用的数据还是上一节的数据,有需要的可以到上一节下载。

def lwlr(testPoint,xArr,yArr,k=1.0):
    xMat = mat(xArr); yMat = mat(yArr).T
    m = shape(xMat)[0]
    weights = mat(eye((m)))
    for j in range(m):                     
        diffMat = testPoint - xMat[j,:]     
        weights[j,j] = exp(diffMat*diffMat.T/(-2.0*k**2))
    xTx = xMat.T * (weights * xMat)
    if linalg.det(xTx) == 0.0:
        print "This matrix is singular, cannot do inverse"
        return
    ws = xTx.I * (xMat.T * (weights * yMat))
    return testPoint * ws

def lwlrTest(testArr,xArr,yArr,k=1.0):  
    m = shape(testArr)[0]
    yHat = zeros(m)
    for i in range(m):
        yHat[i] = lwlr(testArr[i],xArr,yArr,k)
    return yHat
第一个函数有四个输入参数分别为要测试的数据点,训练数据集、标签数据集和一个关键数据这是唯一一个需要用户指定的数据,这个数据决定了对附近的点赋予多大的权重,改变它的值会改变拟合程度,在设计算法时可以改变它的值进行算法优化。下面创建一个对角权重矩阵。接下来的循环就是就是进行权重大小的计算,权重大小在计算过层中会以指数级衰减,求出权重值后面的代码和标准回归算法相似,这里不再过多解释。

第二个函数就是对整个数据集进行预测

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章