回归分析是用来评估变量之间关系的统计过程。用来解释自变量X与因变量Y的关系。即当自变量X发生改变时,因变量Y会如何发生改变。
线性回归是回归分析的一种,评估的自变量X与因变量Y之间是一种线性关系。当只有一个自变量时,称为简单线性回归,当具有多个自变量时,称为多元线性回归
线性关系的理解:

  • 画出来的图像是直的。
  • 每个自变量的最高次项为1。

拟合是指构建一种算法,使得该算法能够符合真实的数据。从机器学习角度讲,线性回归就是要构建一个线性函数,使得该函数与目标值之间的相符性最好。从空间的角度来看,就是要让函数的直线(面),尽可能靠近空间中所有的数据点(点到直线的平行于y轴的距离之和最短)。线性回归会输出一个连续值。

线性回归模型

简单线性回归

我们可以以房屋面积(x)与房价(y)为例,二者是线性关系,房屋价格正比于房屋面积,假设比例为w:

然而,这种线性方程一定是过原点的,即x为0时,y也一定为0。这可能并不符合现实中某些场景。为了能够让方程具有更广泛的适应性,就要再增加一个截距,设为b,则方程可以变为:

以上方程就是数据建模的模型,w与b就是模型的参数。
线性回归是用来解释自变量与因变量之间的关系,但这种关系并非严格的函数映射关系。

多元线性回归

现实中的数据可能是比较复杂的,自变量也可能不止一个,例如,影响房屋价格也很可能不止房屋面积一个因素,可能还有是否在地铁附近,房间数,层数,建筑年代等诸多因素。不过,这些因素对房价影响的权重是不同的,因此,我们可以使用多个权重来表示多个因素与房屋价格的关系:

  • x:影响因素,即特征。
  • w:每个x的影响力度。
  • n:特征的个数。
  • y^:房屋的预测价格。


这样,就可以表示为:

多元线性回归在空间中,可以表示为一个超平面,去拟合空间中的数据点。
我们的目的就是从现有的数据中,去学习w与b的值。一旦w与b的值确定,就能够确定拟合数据的线性方程,这样就可以对未知的数据x进行预测y(房价)。

损失函数与参数求解

损失函数

对于机器学习来讲,就是从已知数据去建立一个模型,使得该模型能够对未知数据进行预测。实际上,机器学习的过程就是确定模型参数的过程。
对于监督学习来说,我们可以通过建立损失函数来实现模型参数的求解,损失函数也称目标函数代价函数,简单来说就是关于误差的一个函数。损失函数用来衡量模型预测值与真实值之间的差异。机器学习的目标,就是要建立一个损失函数,使得该函数的值最小。
也就是说,损失函数是一个关于模型参数的函数(以模型参数w作为自变量的函数),自变量可能的取值组合通常是无限的,我们的目标,就是要在众多可能的组合中,找到一组最合适的自变量组合,使得损失函数的值最小。
在线性回归中,我们使用平方损失函数(最小二乘法),定义如下:

简单线性回归程序

我们以鸢尾花数据集中花瓣长度与花瓣宽度为例,通过程序实现简单线性回归。

import numpy as np
#用于线性回归的类
from sklearn.linear_model import LinearRegression
#用来切分训练集与测试集
from sklearn.model_selection import train_test_split
from sklearn.datasets import load_iris
#设置输出精度。默认为8
np.set_printoptions(precision=2)iris = load_iris()
#获取花瓣长度作为x,花瓣宽度作为y。
x, y = iris.data[:,2].reshape(-1,1), iris.data[:,3]lr = LinearRegression()
x_train, x_test, y_train, y_test = train_test_split(x, y, test_size=0.25, random_state=0)
#使用训练集数据,训练模型。
lr.fit(x_train, y_train)
print('权重:', lr.coef_)
print('截距:', lr.intercept_)
y_hat = lr.predict(x_test)
print('实际值:', y_test[:5])
print('预测值:', y_test[:5])

import matplotlib.pyplot as pltplt.rcParams['font.family'] = 'SimHei'
plt.rcParams['axes.unicode_minus'] = False
plt.rcParams['font.size'] = 15plt.figure(figsize=(10,6))
plt.scatter(x_train, y_train, c='orange', label='训练集')
plt.scatter(x_test, y_test, c='g', marker='D', label='测试集')
plt.plot(x, lr.predict(x), 'r-')
plt.legend()
plt.xlabel('花瓣长度')
plt.ylabel('花瓣宽度')

plt.figure(figsize=(15,6))
plt.plot(y_test, label='真实值', color='r', marker='o')
plt.plot(y_hat, c='g', marker='o', ls='--', label='预测值')
plt.legend()

回归模型预测

对于回归模型,我们可以采用如下指标进行衡量。

  • MSE
  • RMSE
  • MAE
  • R2

MSE

MSE(Mean Squared Error),平均平方差,为所有样本数据误差(真实值与预测值之差)的平方和,然后取均值。

RMSE

RMSE(Root Mean Squared Error),平均平方误差的平方根,即在MSE的基础上,取平方根。

MAE

MAE(Mean Absolute Error),平均绝对值误差,为所有样本数据误差的绝对值和。

R2

R2为决定系数,用来表示模型拟合性的分值,值越高表示模型拟合性越好,在训练集中,R2的取值范围为[0,1]。在R2的取值范围为[-∞,1]。
R2的计算公式为1减去RSS与TSS的商。其中,TSS(Total Sum of Squares)为所有样本数据与均值的差异,是方差的m倍。而RSS(Residual sum of Squares)为所有样本数据误差的平方和,是MSE的m倍。


从公式定义可知,最理想情况,所有的样本数据的预测值与真实值相同,即RSS为0,此时R2为1。

from sklearn.metrics import mean_squared_error, mean_absolute_error, r2_scoreprint('均方误差(MSE):',mean_squared_error(y_test,y_hat))
print('根均方误差(RMSE):',np.sqrt(mean_squared_error(y_test,y_hat)))
print('平均绝对值误差(MAE):',mean_absolute_error(y_test,y_hat))
print('训练集R^2:',r2_score(y_train,lr.predict(X_train)))
print('测试集R^2:',r2_score(y_test,y_hat))
#lr.score其实求解的就是R^2的值,但需要注意,r2_score方法与lr.score方法传递参数的内容是不同的。
print('训练集R^2:',lr.score(X_train,y_train))
print('测试集R^2:',lr.score(X_test,y_test))

多元线性回归程序

我们可以以波士顿房价为例来做程序演示

from sklearn.linear_model import LinearRegression
from sklearn.model_selection import train_test_split
from sklearn.datasets import load_boston
import pandas as pdboston = load_boston()
x, y = boston.data, boston.target
df = pd.DataFrame(np.concatenate([x, y.reshape(-1,1)], axis=1),columns = boston.feature_names.tolist()+['MEDV'])
df.head()

x_train, x_test, y_train, y_test = train_test_split(x, y, test_size=0.25, random_state=0)
lr = LinearRegression()
lr.fit(x_train, y_train)
y_hat = lr.predict(x_test)
print('权重:',lr.coef_)
print('截距:',lr.intercept_)
print('实际值:',y_test[:10])
print('测试值:',y_hat[:10])
print('训练值R^2:',lr.score(X_train, y_train))
print('测试值R^2:',lr.score(X_test, y_test))

线性回归——简单线性回归、多元线性回归相关推荐

  1. 傻瓜攻略(九)——MATLAB实现简单的多元线性回归(以炼钢转炉炉龄问题为例)

    1.多元线性回归 回归分析(Regression Analysis)是一种统计学上分析数据的方法,目的在于了解两个或多个变量间是否相关.相关方向与强度,并建立数学模型以便观察特定变量来预测研究者感兴趣 ...

  2. 二元函数求最小值 c语言,用C语言实现简单的多元线性回归算法(二)

    上一篇我们贴上了简单粗暴的线性回归的代码,里面各种参数都设置的是固定参数,不具有可扩展性,今天我们在上一篇的基础上做了部分改进,当然对于熟悉C语言的大侠来说可能这篇博客会太low了,您完全可以跳过.我 ...

  3. 多重线性回归 多元线性回归_了解多元线性回归

    多重线性回归 多元线性回归 Video Link 影片连结 We have taken a look at Simple Linear Regression in Episode 4.1 where ...

  4. numpy多元线性回归_Python 实战多元线性回归模型,附带原理+代码

    作者 | 萝卜来源 | 早起Python( ID:zaoqi-python ) 「多元线性回归模型」非常常见,是大多数人入门机器学习的第一个案例,尽管如此,里面还是有许多值得学习和注意的地方.其中多元 ...

  5. 小福利,带你快速了解数据分析之一元线性回归模型和多元线性回归模型

    大家好,我是天空之城,今天给大家带来小福利,带你快速了解一元线性回归方程模拟和多元线性回归方程模拟 主要用来进行数据的相关性分析 之前在研究生阶段用过一个叫origin的数据处理软件,只要是科研数据都 ...

  6. Day1。Eviews做简单的多元线性回归模型(自用)

    数据录入,然后ls y x1 x3 c,或者直接点击quick-estimate equation,模型拟合结果就出来了. coefficient:系数,表明x与y的数据关系,正数表示正相关,负表示负 ...

  7. 机器学习第3天:多元线性回归

    文章目录 一.具体实现步骤 第1步:数据预处理 导入库 导入数据集 将类别数据数字化 躲避虚拟变量陷阱 拆分数据集为训练集和测试集 第2步: 在训练集上训练多元线性回归模型 第3步:在测试集上预测结果 ...

  8. 多元线性回归数据集_TensorFlow学习Program1——13.实现一元、多元线性回归(基于房价数据集)...

    本节将针对波士顿房价数据集的房间数量(RM)采用简单一元线性回归,目标是预测在最后一列(MEDV)给出的房价.波士顿房价数据集可从http://lib.stat.cmu.edu/datasets/bo ...

  9. 多元线性回归dw值_SPSS教程10:多元线性回归

    1多元线性回归简介 简单线性回归是一个自变量对一个因变量的预测,而多元线性回归是多个自变量对一个因变量的联合预测能力.比如说检验乐观.自我效能感对学习投入的预测能力,那不论是乐观还是自我效能感的单个预 ...

  10. 多元线性回归公式推导及R语言实现

    多元线性回归 多元线性回归模型 实际中有很多问题是一个因变量与多个自变量成线性相关,我们可以用一个多元线性回归方程来表示. 为了方便计算,我们将上式写成矩阵形式: Y = XW 假设自变量维度为N W ...

最新文章

  1. ISLR_Propotion
  2. x79主板bios设置中文_bios菜单
  3. java 正则匹配引号_java 正则 贪婪匹配 匹配sql语句中的引号内容
  4. vi中如何实现批量替换
  5. mysql 空闲几分钟速度变慢,MYSQL 运作一小段时间后,速度变得奇慢。而CPU基本空闲状态...
  6. Silverlight智能表单(3)之XML存储
  7. [Codeforces1132G]Greedy Subsequences——线段树+单调栈
  8. 几个交换问题的咨询?
  9. 【笔试/面试】—— Linux 查看 cpu 和内存使用情况
  10. 域名注册、域名实名认证、域名解析流程详解
  11. 数据库发展竟然和阿波罗登月有关?还有什么是我们不知道的?
  12. 马云的创业故事及他人生中的摆渡人-微信的兴起和支付宝的至暗时刻(十)
  13. main线程 子线程 顺序_在主线程main中开启子线程thread示例
  14. 朴素贝叶斯的应用_TF-IDF实例
  15. 软件工程——Alpha(2/3)
  16. 使用antd-pro组件 实现图片上传和图片编辑
  17. Linux读取下机数据.fq.gz文件
  18. 高数 | 【概念剖析】f(x)、可积、原函数 与 变限积分的关系
  19. 双智机器人 珠海_格力“双智多元化”成果显著 珠洽会展示核心科技
  20. python word表格嵌套_【Python】Word表格汇总Excel

热门文章

  1. 18 - java基初 数组介绍 冒泡排序
  2. 网页中遇到的src=quot;data:image/png;base64,xxxxquot;知识点了解
  3. Terracotta配置文件
  4. 蓝牙模块的配置(HC05):修改密码、修改模块名字、修改波特率。
  5. [Python报错]CERTIFICATE_VERIFY_FAILED] certificate verify failed: certificate has expired
  6. 机器学习所需要的高数知识
  7. SSL双向验证--keytool实现自签名证书
  8. 数字源表LIV测试激光器方案
  9. 弱口令审计-工具用法大全
  10. 维度表和事实表的含义