zoukankan      html  css  js  c++  java
  • 机器学习8回归问题

    对于之前在分类问题中有逻辑回归,而对于这个线性回归以前一般是先讲述,将线性回归的结果通过函数映射到(0,1)区间,再以0.5作为区分形成分类问题。

    具体的计算方法,在以前的blogs提到过,参考:http://www.cnblogs.com/fengbing/archive/2013/05/15/3079033.html

    下面就直接实战

    跟之前一样,第一步导入数据。

    def loadDataSet(fileName):     
        numFeat = len(open(fileName).readline().split('	')) - 1
        dataMat = []; labelMat = []
        fr = open(fileName)
        for line in fr.readlines():
            lineArr =[]
            curLine = line.strip().split('	')
            for i in range(numFeat):
                lineArr.append(float(curLine[i]))
            dataMat.append(lineArr)
            labelMat.append(float(curLine[-1]))
        return dataMat,labelMat

    下一步作者给出标准的回归函数

    clip_image012

    clip_image014

    具体代码如下:

    def standRegres(xArr,yArr):
        xMat = mat(xArr); yMat = mat(yArr).T
        xTx = xMat.T*xMat
        if linalg.det(xTx) == 0.0:
            print "This matrix is singular, cannot do inverse"
            return
        ws = xTx.I * (xMat.T*yMat)
        return ws

    这边先计算了xTx的行列式,考虑其是否可逆。对于ws的计算化简一下就是上面的式子,这边x跟θ都是向量可以互换。linalg是NumPy中提供的线性代数的库

    运行:

    >>> import regression
    >>> xArr,yArr = regression.loadDataSet('ex0.txt')
    >>> ws = regression.standRegres(xArr,yArr)
    >>> ws
    matrix([[ 3.00774324],
            [ 1.69532264]])

    这样我们的拟合函数就计算出来了.

    线性回归有一个问题就是可能出现欠拟合的问题,如果数据欠拟合的话,那就不能取得很好的预测效果,所以引入一些偏差,从而降低预测的均方误差。

    局部加权也就是给每个点赋予一定的权重,离预测点靠近的点权重大一些,采用高斯核。

    具体代码如下:

    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):                      #next 2 lines create weights matrix
            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

    线性回归比较容易,在深度学习入门的时候就是线性回归,书的后续的几个例子挺好的,后续介绍。

  • 相关阅读:
    .NET Core 5
    2018.6.5号----TeamViewer12 13 非商用出现商用限制怎么解决
    第:九课:SQL数据库___超级列表框与数据库的组合修改
    第八课:SQL数据库插入数据和更新数据
    第七课:数据库表的创建
    第六课:数据库的基本工具
    第五课: 模拟器的绑定与文本发送应用.exe
    第四课:APK的一些操作
    第三课:模拟器里安装手游APK安装
    第二课: 雷电模拟器的多开和打开
  • 原文地址:https://www.cnblogs.com/fengbing/p/3522805.html
Copyright © 2011-2022 走看看