在统计学中,线性回归(Linear Regression)是利用称为线性回归方程的最小平方函数对一个或多个自变量和因变量之间关系进行建模的一种回归分析。其中只有一个自变量的情况称为简单回归,大于一个自变量情况的叫做多元回归。

一、梯度下降算法实现线性回归

首先我们载入奥运马拉松数据。这是从1896年第一届奥运会到2012年伦敦奥运会男子马拉松比赛的奥运马拉松时间数据。

import podsdata = pods.datasets.olympic_marathon_men()x = data['X']y = data['Y']

并打印数据集

import pylab as pltplt.plot(x, y, 'rx')plt.xlabel('year')plt.ylabel('pace in min/km')

现在,我们将采用我们最大似然法,将一条线

与绘制的数据拟合,并尽量减少误差函数:

关于其中变量m和c,我们可以先初始化一个假设值m,之后利用最大似然法迭代更新从而得到c。

m = -0.4c = 80 

对于c求偏导,可得

而我们想要一个最小值,即是该函数值等于0的时候的点,通过求解

得到下列方程:

将其带入代码

# set c to the minimumc = (y - m*x).mean()print(c)

之后同理,可以得到m*

所以有

m = ((y - c)*x).sum()/(x**2).sum()print(m)

然后我们需要创建一个测试点向量,以便将预测结果输入空间来了解拟合程度。

import numpy as npx_test = np.linspace(1890, 2020, 130)[:, None]f_test = m*x_test + c

之后将之前设定的m和c带入,可以看到拟合的结果

plt.plot(x_test, f_test, 'b-')plt.plot(x, y, 'rx')

可以看出拟合的成果并不是很理想。我们尝试给他外面再加一层循环,使其迭代十次。

for i in np.arange(10):    m = ((y - c)*x).sum()/(x*x).sum()    c = (y-m*x).sum()/y.shape[0]print(m)print(c)f_test = m*x_test + cplt.plot(x_test, f_test, 'b-')plt.plot(x, y, 'rx')最后拟合的效果还是不理想,目标函数的值依旧很大。所以我们需要用目标函数的变化率为基础,直到目标函数找到最小值为止。E1=100000 #尽量大的数E2=((y-m*x-c)**2).sum()while ((E1-E2)/E1)>0.0001:    E1=E2    m = ((y-c)*x).sum()/(x*x).sum()    c = (y-m*x).sum()/y.shape[0]    E2=((y-m*x-c)**2).sum()print(E2)f_test = m * x_test + cplt.plot(x_test, f_test, 'b-')plt.plot(x, y, 'rx')plt.show()

这也就是基于梯度下降算法所优化目标函数而作出的拟合直线。可以看到这是一条符合规律的直线。

二、特解法

基于历史的马拉松数据,设立拟合直线

,所以可设向量矩阵

# define the vector ww = np.zeros(shape=(2, 1))w[0] = mw[1] = c

这给了我们原始运算和向量空间中的运算之间的等价性。一般来说,我们现在正转向一个系统,在这个系统中,我们的每一个预测都是由一个内积给出的。当我们想在线性代数中表示一个线性积时,我们倾向于用转置运算来表示,所以我们有

,可以写作

之后我们假设每个数据点xi,都是通过在原始向量上附加1来编写的,从而有

然后我们将所有数据归到矩阵X,有

在代码中可以写成

X = np.hstack((np.ones_like(x), x))print(X)

则有目标函数

其中

,那么

对应的,可以yi被表示成

误差公式原式为,现在可写为,其中

,故代码有

f = np.dot(X, w) # np.dot does matrix multiplication in pythonresid = (y-f)E = np.dot(resid.T, resid) # matrix multiplication on a single vector is equivalent to a dot product.print("Error function is:", E)

为了优化目标函数,需要将目标函数化简,即

有向量矩阵公式

而其中a=c=y以及b=d=Xw,并将其带入原式替换,得到

对w求偏导,可得

为了最小化目标函数,所以会在为0时,有

从而得到

故而拟合的结果如下图所示。可以看出这是一条符合规律的曲线。

w = np.linalg.solve(np.dot(X.T, X), np.dot(X.T, y))print(w)m = w[1]; c=w[0]f_test = m*x_test + cprint(m)print(c)plt.plot(x_test, f_test, 'b-')plt.plot(x, y, 'rx')

三、多元线性回归

以上方法简单的讲述了在一元线性回归中的应用。而此方法也可以建立在多元线性回归上,因为矩阵演算没有指定向量x的长度。首先,我们导入电影数据,并打印电影数据中的列。

import podsdata = pods.datasets.movie_body_count()movies = data['Y']print(', '.join(movies.columns))

现在我们将建立一个基于数字特征的设计矩阵:Year、Body_Count、Length_Minutes,以及IMDB_Rating。我们构建设计矩阵如下:

select_features = ['Year', 'Body_Count', 'Length_Minutes']X = movies.loc[:, select_features]X['Eins'] = 1 # add a column for the offsety = movies[['IMDB_Rating']]

之后根据公式

可得

import pandas as pdimport numpy as npw = pd.DataFrame(data=np.linalg.solve(np.dot(X.T, X), np.dot(X.T, y)),  # solve linear regression here                 index = X.columns,  # columns of X become rows of w                 columns=['regression_coefficient']) # the column of X is the value of regression coefficient

并打印w

w

可以看到IMDB_Rating的值变化相对稳定,与年份和个体数成反比,与电影的时长成正比。而利用矩阵的除法进行w的计算并不是一直稳定的方法,毕竟要把:算出来是要把X的所有元素平方,再除到等式那边去,不仅浪费算力,还会降低数据的精确度。所以便有了QR因式分解。矩阵的QR分解是将其分解为正交矩阵Q,因此,以及一个三角矩阵R。推导公式如下,

代码即结果如下

import scipy as spQ, R = np.linalg.qr(X)w = sp.linalg.solve_triangular(R, np.dot(Q.T, y)) w = pd.DataFrame(w, index=X.columns)w

线性回归和逻辑回归的区别_线性回归相关推荐

  1. 线性回归和逻辑回归的区别_Spark实现线性回归与逻辑回归算法

    一.线性回归算法简介 线性回归(Linear Regression)是利用线性回归方程的最小平方函数对一个或多个自变量和因变量之间关系进行建模的一种回归分析.这种函数是一个或多个称为回归系数的模型参数 ...

  2. 机器学习:线性回归和逻辑回归

    线性回归和逻辑回归的区别: 两者都属于回归算法,线性回归主要用来解决连续值预测的问题,逻辑回归用来解决分类的问题,输出的属于某个类别的概率,工业界经常会用逻辑回归来做排序.在SVM.GBDT.AdaB ...

  3. 【数据分析】线性回归与逻辑回归

    文章来源:公众号-智能化IT系统. 回归模型有多种,一般在数据分析中用的比较常用的有线性回归和逻辑回归.其描述的是一组因变量和自变量之间的关系,通过特定的方程来模拟.这么做的目的也是为了预测,但有时也 ...

  4. 线性回归与逻辑回归/朴素贝叶斯

    一.线性回归与逻辑回归 (一)线性回归 1. 算法概述 回归的目的是预测数值型的目标值. 线性回归的优点:结果易于理解,计算上不复杂.缺点:对非线性的数据拟合不好.适用数据类型:数值型和标称型数据. ...

  5. 线性回归和逻辑回归损失函数推导

    线性回归和逻辑回归损失函数推导 @(数据挖掘) 线性回归和逻辑回归损失函数推导 一.线性回归最小二乘loss推导 二.logistics回归加sigmoid原因以及交叉熵损失函数推导 一.线性回归最小 ...

  6. 逻辑回归和线性回归的区别_机器学习简介之基础理论- 线性回归、逻辑回归、神经网络...

    本文主要介绍一些机器学习的基础概念和推导过程,并基于这些基础概念,快速地了解当下最热技术AI的核心基础-神经网络. 主要分为三大部分:线性回归,逻辑回归,神经网络. 首先看下机器学习的定义及常用的分类 ...

  7. python 线性回归与逻辑回归区别(有监督学习【分类、回归】、无监督学习【聚类、强化学习】、损失函数、梯度下降、学习率、过拟合、欠拟合、正则化)

    引用文章1 https://blog.csdn.net/viewcode/article/details/8794401 引用文章2:一.线性回归和逻辑回归 一.什么是机器学习 利用大量的数据样本,使 ...

  8. 语言线性拟合线对称_文科生都能看懂的机器学习教程:梯度下降、线性回归、逻辑回归...

    [新智元导读]虽然在Coursera.MIT.UC伯克利上有很多机器学习的课程,包括吴恩达等专家课程已非常经典,但都是面向有一定理科背景的专业人士.本文试图将机器学习这本深奥的课程,以更加浅显易懂的方 ...

  9. 一、线性回归和逻辑回归

    文章目录 一.什么是机器学习 二.线性回归 2.1 线性回归的表达式 三.逻辑回归 3.1 逻辑回归的损失函数 3.2 逻辑回归实现多分类 四.LR的特点 五. 为什么逻辑回归比线性回归好 六. LR ...

最新文章

  1. elasticsearch 索引 red 状态恢复 green
  2. 深入理解javascript函数进阶系列第一篇——高阶函数
  3. 她在哭,但我没资格安慰她......​
  4. springboot starter的一个问题
  5. 程序员的《学习之道》
  6. 神经网络——深度学习应用于计算机视觉
  7. 通达(极限)OA2007SE第二版开源代码,注意哦,是100%开源代码,不是破解的!!!
  8. C语言99乘法表代码案例
  9. 搜狗输入法不错,附带的进程需要一个个把exe文件重命名
  10. android主题切换框架,Prism(棱镜)——一款优秀的Android 主题动态切换框架
  11. 尤雨溪:Vue 3 将成为新的默认版本
  12. 201671010457 朱石景 实验四《英文文本词频统计分析》 结对项目报告
  13. PCB电路板如何设计散热
  14. 系统交易---战术资产配置 (Tactical Asset Allocation TAA)介绍
  15. 最重要的事和最难的事
  16. 利用matplotlib绘制圆环图的案例
  17. spring中tx:advice/tx:advice是什么意思?作用是什么?谁能简单说下
  18. 创建Maven父子项目及发布到tomat的完整过程
  19. 树莓派python版本的串口通信设置
  20. 飞思卡尔 p1010 gpio linux驱动开发

热门文章

  1. python游戏编程书籍-《Python游戏编程快速上手》一1.3 如何使用本书
  2. python语言程序设计梁勇-Python语言程序设计(美-梁勇)第1章习题解答
  3. python发声-python让程序发出声音
  4. python怎么安装jieba库-python环境jieba分词的安装
  5. Git Bash命令行基础
  6. LeetCode Path Sum III(前缀和)
  7. hdu1.3.7 Crixalis's Equipment
  8. HSHA多线程网络编程模型介绍
  9. 听大佬学长RQY报告有感
  10. python中的控制流