查看原文
其他

机器学习实战之线性回归

罗罗攀 Python爱好者社区 2019-04-07

作者:罗罗攀    《从零开始学Python网络爬虫》书籍作者
Python爱好者社区专栏作者   Python爬虫爱好者

个人公众号:罗罗攀
博客地址:http://www.jianshu.com/u/9104ebf5e177


本系列教程为《机器学习实战》的读书笔记。首先,讲讲写本系列教程的原因:第一,《机器学习实战》的代码由Python2编写,有些代码在Python3上运行已会报错,本教程基于Python3进行代码的修订;第二:之前看了一些机器学习的书籍,没有进行记录,很快就忘记掉了,通过编写教程也是一种复习的过程;第三,机器学习相对于爬虫和数据分析而言,学习难度更大,希望通过本系列文字教程,让读者在学习机器学习的路上少走弯路。

前文传送门:

机器学习实战之KNN算法

机器学习实战之Logistic回归

机器学习实战之AdaBoost元算法


之前我们学习的机器学习算法都是属于分类算法,也就是预测值是离散值。当预测值为连续值时,就需要使用回归算法。本文将介绍线性回归的原理和代码实现。

线性回归原理与推导

如图所示,这时一组二维的数据,我们先想想如何通过一条直线较好的拟合这些散点了?直白的说:尽量让拟合的直线穿过这些散点(这些点离拟合直线很近)。

目标函数

要使这些点离拟合直线很近,我们需要用数学公式来表示。首先,我们要求的直线公式为:Y = XTw。我们这里要求的就是这个w向量(类似于logistic回归)。误差最小,也就是预测值y和真实值的y的差值小,我们这里采用平方误差:

求解

我们所需要做的就是让这个平方误差最小即可,那就对w求导,最后w的计算公式为:

我们称这个方法为OLS,也就是“普通最小二乘法”

线性回归实践

数据情况

我们首先读入数据并用matplotlib库来显示这些数据。

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

回归算法

这里直接求w就行,然后对直线进行可视化。

   def standRegres(Xarr,yarr):        X = mat(Xarr);y = mat(yarr).T        XTX = X.T * X        if linalg.det(XTX) == 0:            print('不能求逆')            return        w = XTX.I * (X.T*y)        return w

算法优缺点

  • 优点:易于理解和计算

  • 缺点:精度不高


零基础如何入门学习Python网络爬虫?

小编推荐作者的好书,点击阅读原文即可购买

Python爱好者社区历史文章大合集

Python爱好者社区历史文章列表(每周append更新一次)

福利:文末扫码立刻关注公众号,“Python爱好者社区”,开始学习Python课程:

关注后在公众号内回复“课程”即可获取:

小编的Python入门免费视频课程!!!

【最新免费微课】小编的Python快速上手matplotlib可视化库!!!

崔老师爬虫实战案例免费学习视频。

陈老师数据分析报告制作免费学习视频。

玩转大数据分析!Spark2.X+Python 精华实战课程免费学习视频。


    您可能也对以下帖子感兴趣

    文章有问题?点此查看未经处理的缓存