标准回归:预测数值型数据

回归和分类的不同,在于它的目标变量是连续数值型。它也是一种监督学习方法。

思想:最基本的回归是用普通最小二乘法(OLS)计算最佳拟合直线的系数w估计。

最小化平方误差  

对w求导等于零,得到w的求解公式  

import numpy as np
'''
回归:预测数值型数据
以下的回归方法基本都是全局线性模型(除LWLR),在数据量大且特征多而复杂时应用困难
'''
#-------------- 线性回归(普通最小二乘法,OLS) ------------
def standLinearRegression(x, y):
    xMat = np.mat(x)
    yMat = np.mat(y).T
    xTx = xMat.T * xMat
    if np.linalg.det(xTx) == 0.0:  # 计算行列式,若为0,不满秩,不可逆
        print('singular matrix cannot do inverse')
        return
    w = xTx.I * (xMat.T * yMat)
    return w

#---------------- 局部加权线性回归(LWLR) ---------------------
def localWeightLinearRegression(testPtX, x, y, k=1.0):
    xMat = np.mat(x)
    yMat = np.mat(y).T
    m = np.shape(xMat)[0]
    w = np.mat(np.eye(m))      # 对角矩阵mxm
    for j in range(m):
        diffMat = testPtX-xMat[j,:]
        w[j, j] = np.exp(diffMat*diffMat.T/(-2.0*k**2))  # 指数衰减的权重
    xTx = xMat.T * (w * xMat)  # 局部加权(权重矩阵是方阵)
    if np.linalg.det(xTx) == 0.0:
        print('singular matrix cannot do inverse')
        return
    w = xTx.I * (xMat.T * (w * yMat))
    return testPtX * w

def testLWLR(testX, x, y, k=1.0):  # 给定x空间的任意一点,该点也用于算回归
    m = np.shape(testX)[0]         # testX是用于测试的m个点
    yHat = np.zeros((m))
    for i in range(m):
        yHat[i] = localWeightLinearRegression(testX[i], x, y, k)
    return yHat

#----------------- 岭回归(在xTx加上λI使矩阵非奇异) -----------------
def ridgeRegression(xMat, yMat, lam=0.2):  # m


你可能感兴趣的:(Machine,Learning)