线性回归分析-回归算法

线性回归分析-回归算法

1 回归算法

  机器学习中监督学习算法分为分类算法和回归算法两种,其实就是根据类别标签分布类型为离散型、连续性而定义的。回归算法用于目标是连续的,在指定区间内可以是任意一个数值,针对的是数值型的样本,使用回归,可以在给定输入的时候预测出一个数值,这是对分类方法的提升,因为这样可以预测连续型数据而不仅仅是离散的类别标签。
  首先举个房价的例子,房子的面积和房子的价格有着明显的关系,那么在坐标系中可以看到这些点:
  
  在这里插入图片描述
  如果那么通过一条直线把这个关系描述出来,叫线性关系
  在这里插入图片描述
  如果那么通过一条曲线把这个关系描述出来,叫非线性关系
  在这里插入图片描述
  其实回归的目的就是建立一个回归方程(函数)用来预测目标值,回归的求解就是求这个回归方程的回归系数。

2 回归算法之线性回归

  线性回归的定义是:目标值预期是输入变量的线性组合。线性回归通过一个或多个自变量与因变量之间进行建模的回归分析。其特点是一个或多个称之为回归系数的模型参数的线性组合。
  一元线性回归:涉及到的变量只有一个。
  多元线性回归:涉及到的变量两个或两个以上。
  在这里插入图片描述
  线性模型中的向量W值,客观的表达了各属性在预测中的重要性,对于这种“多特征预测”也就是(多元线性回归),那么线性回归就是在这个基础上得到这些W的值,然后以这些值来建立模型,预测测试数据。简单的来说就是学得一个线性模型以尽可能准确的预测实值输出标记。
  那么如果对于多变量线性回归来说我们可以通过向量的方式来表示W值与特征X值之间的关系:
在这里插入图片描述
  两向量相乘,结果为一个整数是估计值,其中所有特征集合的第一个特征值 =1,那么我们可以通过通用的向量公式来表示线性模型:
  在这里插入图片描述在这里插入图片描述
  一个列向量的转置与特征的乘积,得出我们预测的结果,但是显然我们这个模型得到的结果可定会有误差,如下
  在这里插入图片描述
  在这里插入图片描述

3 损失函数(最小二乘法)

  损失函数是一个贯穿整个机器学习重要的一个概念,大部分机器学习算法都会有误差,我们得通过显性的公式来描述这个误差,并且将这个误差优化到最小值。
  对于线性回归模型,将模型与数据点之间的距离差之和做为衡量匹配好坏的标准,误差越小,匹配程度越大。我们要找的模型就是需要将f(x)和我们的真实值之间最相似的状态。所以误差公式就是模型与数据差的平方和最小:
  在这里插入图片描述
  在这里插入图片描述
  上面公式定义了所有的误差和,如何去求模型当中的W,使得损失最小?(目的是找到最小损失对应的W值)。有两种办法,一种使用梯度下降算法,另一种使正规方程解法(只适用于简单的线性回归)。
  正规方程公式如下:
  在这里插入图片描述

4 最小二乘法之梯度下降

  误差公式是一个通式,我们取两个单个变量来求最小值,误差和可以表示为:
  在这里插入图片描述
  通过调整不同的w​1​​ 和w​0的值,就能使误差不断变化,而当你找到这个公式的最小值时,你就能得到最好的w​1​​ ,w​0而这对(w​1​​ ,w​0​​ )就是能最好描述你数据关系的模型参数。怎么找cost(w​0+w1x​1​​ )的最小?cost(w​0+w​1x1)的图像其实像一个山谷一样,有一个最低点。找这个最低点的办法就是,然后沿着这个弯下降的方向找,最后就能找到山谷的最低点。
在这里插入图片描述
  进行移动的时候也需要考虑,每次移动的速度,也就是α的值,这个值也叫做(学习率)
  样就能求出w​0 ,w​1的值,当然你这个过程是不断的进行迭代求出来,通过交叉验证方法即可。
  在这里插入图片描述
  在这里插入图片描述
  α为学习率,需要手动指定

5 sklearn线性回归正规方程、梯度下降API

  sklearn.linear_model.LinearRegression 正规方程
  sklearn.linear_model.SGDRegressor 梯度下降
  方法:
  fit(X,y,sample_weight = None)使用X作为训练数据拟合模型,y作为X的类别值。X,y为数组或者矩阵
  predict(X)预测提供的数据对应的结果
  属性:
  coef_表示回归系数w=(w1,w2…)
  intercept_ 表示w0

6 案例

  波士顿房价数据案例分析流程
  在这里插入图片描述
  步骤:①波士顿地区房价数据获取;②波士顿地区房价数据分割③训练与测试数据标准化处理;④使用最简单的线性回归模型LinearRegression和
梯度下降估计SGDRegressor对房价进行预测
  

from sklearn.datasets import load_boston
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.linear_model import LinearRegression,SGDRegressor
# 1获取数据
lb = load_boston()# 2分割数据为训练集合测试集
x_train,x_test,y_train,y_test = train_test_split(lb.data,lb.target,test_size=0.25)# 3进行标准化处理,特征值和目标值都必须进行标准化处理
std1 = StandardScaler()
x_train = std1.fit_transform(x_train)
x_test = std1.transform(x_test)
# 目标值标准化
std2 = StandardScaler()
y_train = std2.fit_transform(y_train.reshape(-1,1))
y_test = std2.transform(y_test.reshape(-1,1))# 4.estimator估计器测试
# 4.1正规方程求解预测
lr = LinearRegression()
# 输入数据一直不断用训练数据建立模型
lr.fit(x_train,y_train)print("lr回归系数为",lr.coef_)
# 预测测试集房子价格
y_predict = lr.predict(x_test)
# 因为标准化之后得出的都是标准化比较小的值,要想看到原来的值,要用inverse_transform转化为标准化之前的值
y_predict = std2.inverse_transform(y_predict)
print("lr测试集每个样本的预测价格:",y_predict)
# 4.2梯度下降求解预测
sgd = SGDRegressor()
# 输入数据一直不断用训练数据建立模型
sgd.fit(x_train,y_train)print("sgd回归系数为",sgd.coef_)
# 预测测试集房子价格
y_sgdPredict = sgd.predict(x_test)
# 因为标准化之后得出的都是标准化比较小的值,要想看到原来的值,要用inverse_transform转化为标准化之前的值
y_sgdPredict = std2.inverse_transform(y_sgdPredict)
print("sgd测试集每个样本的预测价格:",y_sgdPredict)

在这里插入图片描述在这里插入图片描述

7 回归性能评估

  (均方误差(Mean Squared Error)MSE) 评价机制:
  在这里插入图片描述
  在这里插入图片描述
  其实就是对每一组预测值减去真实值的平方求和
  sklearn回归评估API:sklearn.metrics.mean_squared_error
  mean_squared_error(y_true, y_pred)均方误差回归损失
  y_true:真实值
  y_pred:预测值
  return:浮点数结果
  注意:真实值,预测值为标准化之前的值

print("正规方程均方根误差:",mean_squared_error(std2.inverse_transform(y_test),y_predict))
print("梯度下降均方根误差",mean_squared_error(std2.inverse_transform(y_test),y_sgdPredict))

在这里插入图片描述

由于数据量少,所以正规方程的均方根误差小一点

8 线性回归的优缺点

  优点:结果易于理解,计算不复杂

  缺点:对非线性的数据拟合不好

9 正规方程与梯度下降对比

  在这里插入图片描述
  此图为官网给我们的建议如何选择算法,当数据量大于10万的时候建议使用梯度下降
  LinearRegression与SGDRegressor评估:
  在这里插入图片描述
  特点:线性回归器是最为简单、易用的回归模型。从某种程度上限制了使用,尽管如此,在不知道特征之间关系的前提下,我们仍然使用线性回归器作为大多数系统的首要选择。小规模数据:LinearRegression(不能解决拟合问题)以及其它大规模数据:SGDRegressor

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/473791.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

拟合与岭回归

目录 拟合与岭回归 1 什么是过拟合与欠拟合 2 模型复杂度 3 鉴别欠拟合与过拟合 4 过拟合解决方法 5 岭回归(Ridge) 6 模型的保存与加载 拟合与岭回归 1 什么是过拟合与欠拟合 通过下面两张图来解释过拟合和欠拟合: 左图中机器通过这…

LeetCode 778. 水位上升的泳池中游泳(二分查找+dfs)

文章目录1. 题目2. 解题1. 题目 在一个 N x N 的坐标方格 grid 中,每一个方格的值 grid[i][j] 表示在位置 (i,j) 的平台高度。 现在开始下雨了。当时间为 t 时,此时雨水导致水池中任意位置的水位为 t 。 你可以从一个平台游向四周相邻的任意一个平台&a…

pycharm快捷键、常用设置、配置管理

内容包含: pycharm学习技巧 Learning tips PyCharm3.0默认快捷键(翻译的) pycharm常用设置 pycharm环境和路径配置 Pycharm实用拓展功能:pycharm中清除已编译.pyc中间文件 python2转python3最快方式 [pycharm版本控制和数据库管理][PyCharm中的那些实用功…

逻辑回归-分类算法

目录 逻辑回归-分类算法 1 概述 2 sigmoid函数 3 逻辑回归公式 4 逻辑回归的损失函数 5 均方误差与对数自然损失对比 6 sklearn逻辑回归API 7 案例 8 总结 逻辑回归-分类算法 1 概述 逻辑回归(Logistic Regression),简称LR。它的特…

LeetCode 1220. 统计元音字母序列的数目(DP)

文章目录1. 题目2. 解题1. 题目 给你一个整数 n,请你帮忙统计一下我们可以按下述规则形成多少个长度为 n 的字符串: - 字符串中的每个字符都应当是小写元音字母(a, e, i, o, u) - 每个元音 a 后面都只能跟着 e - 每个元音 e 后面…

Django视图(python函数)

1.视图 视图负责接受Web请求HttpRequest,进行逻辑处理,返回Web响应HttpResponse给请求者响应可以是一张网页的HTML内容,一个重定向,一个404错误等 视图就是python中的函数视图一般被定义在“应用/views.py”文件中 视图的第一个…

非监督学习

非监督学习 1 什么是非监(unsupervised learning)督学习 无监督学习,就是不受监督的学习,一种自由的学习方式。该学习方式不需要先验知识进行指导,而是不断地自我认知,自我巩固,最后进行自我归纳,在机器学…

LeetCode 1250. 检查「好数组」(set / 最大公约数)

文章目录1. 题目2. 解题1. 题目 给你一个正整数数组 nums,你需要从中任选一些子集,然后将子集中每一个数乘以一个 任意整数,并求出他们的和。 假如该和结果为 1,那么原数组就是一个「好数组」,则返回 True&#xff1…

用户画像系统

用户画像系统 1 用户画像概述 1.1 什么是用户画像 用户画像就是对现实世界中用户的数学建模。现实世界的用户通过自己各种各样的行为,浏览购买,或者收藏,等等这些行为会把自己的兴趣爱好等体现在这些行为中,比如喜欢看书就会有…

编程思想:面向对象和面向过程

何谓面向对象?何谓面向过程?对于这编程界的两大思想,一直贯穿在我们学习和工作当中。我们知道面向过程和面向对象,但要让我们讲出来个所以然,又感觉是不知从何说起,最后可能也只会说出一句就是那样啦&#…

LeetCode 1210. 穿过迷宫的最少移动次数(状态压缩BFS)

文章目录1. 题目2. 解题1. 题目 你还记得那条风靡全球的贪吃蛇吗? 我们在一个 n*n 的网格上构建了新的迷宫地图,蛇的长度为 2,也就是说它会占去两个单元格。 蛇会从左上角((0, 0) 和 (0, 1))开始移动。 我们用 0 表示…

Django模板(编写html代码

1.模板 用于编写html代码,还可以嵌入模板代码更快更方便的完成页面开发,再通过在视图中渲染模板,将生成最终的html字符串返回给客户端浏览器 模版致力于表达外观,一个视图可以使用任意一个模板,一个模板可以供多个视图…

用户画像之Spark ML实现

用户画像之Spark ML实现 1 Spark ML简单介绍 Spark ML是面向DataFrame编程的。Spark的核心开发是基于RDD(弹性分布式数据集),但是RDD,但是RDD的处理并不是非常灵活,如果要做一些结构化的处理,将RDD转换成…

[Kaggle] Digit Recognizer 手写数字识别(神经网络)

文章目录1. baseline2. 改进2.1 增加训练时间2.2 更改网络结构Digit Recognizer 练习地址 相关博文: [Hands On ML] 3. 分类(MNIST手写数字预测) [Kaggle] Digit Recognizer 手写数字识别 1. baseline 导入包 import tensorflow as tf fr…

逻辑回归原理

逻辑回归原理 1 逻辑回归简介 logistic回归(LR),是一种广义的线性回归分析模型,常用于数据挖掘,疾病预测,经济预测等方面。 优点:计算代价低,思路清晰易于理解和实现;…

LeetCode 956. 最高的广告牌(DP)

文章目录1. 题目2. 解题1. 题目 你正在安装一个广告牌,并希望它高度最大。 这块广告牌将有两个钢制支架,两边各一个。每个钢支架的高度必须相等。 你有一堆可以焊接在一起的钢筋 rods。 举个例子,如果钢筋的长度为 1、2 和 3,则…

Tensorflow线程队列与IO操作

目录 Tensorflow线程队列与IO操作 1 线程和队列 1.1 前言 1.2 队列 1.3 队列管理器 1.4 线程协调器 2 文件读取 2.1 流程 2.2 文件读取API: 3 图像读取 3.1 图像读取基本知识 3.2 图像基本操作 3.3 图像读取API 3.4 图片批处理流程 3.5 读取图片案例 …

LeetCode 1298. 你能从盒子里获得的最大糖果数(BFS)

文章目录1. 题目2. 解题1. 题目 给你 n 个盒子,每个盒子的格式为 [status, candies, keys, containedBoxes] ,其中: - 状态字 status[i]:整数,如果 box[i] 是开的,那么是 1 ,否则是 0 。 - 糖…

给javascript初学者的24条最佳实践

1.使用 代替 JavaScript 使用2种不同的等值运算符:|! 和 |!,在比较操作中使用前者是最佳实践。 “如果两边的操作数具有相同的类型和值,返回true,!返回false。”——JavaScript:语言精粹 然而,当使用和&a…

LeetCode 1614. 括号的最大嵌套深度

文章目录1. 题目2. 解题1. 题目 如果字符串满足一下条件之一,则可以称之为 有效括号字符串(valid parentheses string,可以简写为 VPS): 字符串是一个空字符串 "",或者是一个不为 "("…