机器学习_线性回归

文章目录

    • 线性回归的定义
    • 损失函数(误差大小)
      • 梯度下降算法
      • 梯度下降的API(LinearRegression)
      • 均方误差(Mean Squared Error)MSE) 评价机制
      • 最小二乘法之正规方程
      • 正规方程vs梯度下降
    • 欠拟合与过拟合
    • 回归算法之岭回归
      • L2正则化

线性回归的定义

线性回归的定义是:目标值预期是输入变量的线性组合。线性模型形式简单、易于建模,但却蕴含着机器学习中一些重要的基本思想。线性回归,是利用数理统计中回归分析,来确定两种或两种以上变量间相互依赖的定量关系的一种统计分析方法,运用十分广泛。

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

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

适用数据类型:数值型和标称型

在这里插入图片描述

  • 对于单变量线性回归,例如:前面房价例子中房子的大小预测房子的价格。f(x) = w1*x+w0,这样通过主要参数w1就可以得出预测的值。

通用公式为:
在这里插入图片描述

  • 那么对于多变量回归,例如:瓜的好坏程度 f(x) = w0+0.2色泽+0.5根蒂+0.3*敲声,得出的值来判断一个瓜的好与不好的程度。

通用公式为:

在这里插入图片描述
线性模型中的向量W值,客观的表达了各属性在预测中的重要性,因此线性模型有很好的解释性。对于这种“多特征预测”也就是(多元线性回归),那么线性回归就是在这个基础上得到这些W的值,然后以这些值来建立模型,预测测试数据。简单的来说就是学得一个线性模型以尽可能准确的预测实值输出标记。

那么如果对于多变量线性回归来说我们可以通过向量的方式来表示W值与特征X值之间的关系:
在这里插入图片描述
两向量相乘,结果为一个整数是估计值,其中所有特征集合的第一个特征值x0=1,那么我们可以通过通用的向量公式来表示线性模型:

在这里插入图片描述
一个列向量的转置与特征的乘积,得出我们预测的结果,但是显然我们这个模型得到的结果可定会有误差,如下图所示:
在这里插入图片描述
在这里插入图片描述

试图学得一个通过属性的线性组合来进行预测的函数:
在这里插入图片描述

损失函数(误差大小)

损失函数是一个贯穿整个机器学习重要的一个概念,大部分机器学习算法都会有误差,我们得通过显性的公式来描述这个误差,并且将这个误差优化到最小值。

对于线性回归模型,将模型与数据点之间的距离差之和做为衡量匹配好坏的标准,误差越小,匹配程度越大。我们要找的模型就是需要将f(x)和我们的真实值之间最相似的状态。于是我们就有了误差公式,模型与数据差的平方和最小
在这里插入图片描述
​- 上面公式定义了所有的误差和,那么现在需要使这个值最小?那么有两种方法,一种使用梯度下降算法,另一种使正规方程解法(只适用于简单的线性回归)。

梯度下降算法

什么是梯度下降算法?
在这里插入图片描述
上面误差公式是一个通式,我们取两个单个变量来求最小值,误差和可以表示为
在这里插入图片描述
可以通过调整不同的w1​​ 和w0的值,就能使误差不断变化,而当你找到这个公式的最小值时,你就能得到最好的w1,w0而这对(w1,w0)就是能最好描述你数据关系的模型参数。

怎么找cost(w0+w1x1)的最小值? cost(w0+w1w1)的图像其实像一个山谷一样,有一个最低点。找这个最低点的办法就是,先随便找一个点, 然后 沿着这个碗下降的方向找,最后就能找到山谷的最低点。
在这里插入图片描述

在这里插入图片描述

梯度下降的API(LinearRegression)

sklearn.linear_model.LinearRegression

from sklearn.linear_model import LinearRegression
reg = LinearRegression() #实例化一个对象

方法:
fit(X,y,sample_weight = None)使用X作为训练数据拟合模型,y作为X的类别值。X,y为数组或者矩阵


reg.fit ([[0, 0], [1, 1], [2, 2]], [0, 1, 2])
  • predict(X)预测提供的数据对应的结果
reg.predict([[3,3]])

array([ 3.])
属性:
coef_ 表示回归系数w=(w1,w2…)

reg.coef_
array([ 0.5,  0.5])

均方误差(Mean Squared Error)MSE) 评价机制

  • mean_squared_error(y_true, y_pred)
    均方误差回归损失
    • y_true:真实值
    • y_pred:预测值
    • return:浮点数结果
      在这里插入图片描述
      注:y^i为预测值,¯y为真实值
from sklearn.metrics import mean_squared_error
mean_squared_error()

案例:

from sklearn.datasets import load_boston
from sklearn.linear_model import LinearRegression, SGDRegressor,  Ridge, LogisticRegression
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.metrics import mean_squared_error, classification_report
import joblib
import pandas as pd
import numpy as npdef mylinear():"""线性回归直接预测房子价格:return: None"""# 获取数据lb = load_boston()# 分割数据集到训练集和测试集x_train, x_test, y_train, y_test = train_test_split(lb.data, lb.target, test_size=0.25)print(y_train, y_test)# 进行标准化处理(?) 目标值处理?# 特征值和目标值是都必须进行标准化处理, 实例化两个标准化APIstd_x = StandardScaler()x_train = std_x.fit_transform(x_train)x_test = std_x.transform(x_test)# 目标值std_y = StandardScaler()# 这里必须是一个二维的数据,把一维的数据传入用.reshape(-1,1)y_train = std_y.fit_transform(y_train.reshape(-1, 1))y_test = std_y.transform(y_test.reshape(-1, 1))# 预测房价结果# model = joblib.load("./tmp/test.pkl")## y_predict = std_y.inverse_transform(model.predict(x_test))## print("保存的模型预测的结果:", y_predict)# estimator预测# 正规方程求解方式预测结果lr = LinearRegression() # 建立这个对象lr.fit(x_train, y_train) # 用正规方程训练print(lr.coef_) # 打印出W的值(权重)# 保存训练好的模型# joblib.dump(lr, "./tmp/test.pkl")# 预测测试集的房子价格y_lr_predict = std_y.inverse_transform(lr.predict(x_test)) # 预测值并且将标准化的格式转换回来print("正规方程测试集里面每个房子的预测价格:", y_lr_predict)print("正规方程的均方误差:", mean_squared_error(std_y.inverse_transform(y_test), y_lr_predict)) # 评估正规方程的好坏程度# 梯度下降去进行房价预测sgd = SGDRegressor() # 建立梯度下降模型sgd.fit(x_train, y_train) #利用梯度下降进行训练print(sgd.coef_) # 打印W(权重值)# 预测测试集的房子价格y_sgd_predict = std_y.inverse_transform(sgd.predict(x_test)) # 预测值并且将标准化的格式转换回来print("梯度下降测试集里面每个房子的预测价格:", y_sgd_predict)print("梯度下降的均方误差:", mean_squared_error(std_y.inverse_transform(y_test), y_sgd_predict))# 岭回归去进行房价预测rd = Ridge(alpha=1.0) # 建立岭回归模型 这个有个超参数,正则化rd.fit(x_train, y_train) # 训练岭回归模型print(rd.coef_) #打印W(权重值)# 预测测试集的房子价格y_rd_predict = std_y.inverse_transform(rd.predict(x_test)) # 预测值并且将标准化的格式转换回来print("岭回归测试集里面每个房子的预测价格:", y_rd_predict)print("岭回归的均方误差:", mean_squared_error(std_y.inverse_transform(y_test), y_rd_predict))return None
if __name__ == "__main__":mylinear()

最小二乘法之正规方程

求解:w=(X^TX)^−1X^Ty ,X为特征值矩阵,y为目标值矩阵

缺点:当特征过于复杂,求解速度太慢对于复杂的算法,不能使用正规方程求解(逻辑回归等)

sklearn.linear_model.LinearRegression正规方程

from sklearn.linear_model import LinearRegression
lr = LinearRegression()

案例看上面的梯度下降

正规方程vs梯度下降

在这里插入图片描述
特点:线性回归器是最为简单、易用的回归模型。从某种程度上限制了使用,尽管如此,在不知道特征之间关系的前提下,我们仍然使用线性回归器作为大多数系统的首要选择。

  • 小规模数据:LinearRegression(不能解决拟合问题)以及其它
  • 大规模数据:SGDRegressor

欠拟合与过拟合

  • 过拟合:一个假设在训练数据上能够获得比其他假设更好的拟合, 但是在训练数据外的数据集上却不能很好地拟合数据,此时认为这个假设出现了过拟合的现象。(模型过于复杂)

    • 原因:原始特征过多,存在一些嘈杂特征, 模型过于复杂是因为模型尝试去兼顾各个测试数据点
    • 解决办法:进行特征选择,消除关联性大的特征(很难做)交叉验证(让所有数据都有过训练)正则化
  • 欠拟合:一个假设在训练数据上不能获得更好的拟合, 但是在训练数据外的数据集上也不能很好地拟合数据,此时认为这个假设出现了欠拟合的现象。(模型过于简单)

    • 原因:学习到数据的特征过少
    • 解决办法:增加数据的特征数量

回归算法之岭回归

L2正则化

  • 作用:可以使得W的每个元素都很小,都接近于0
  • 优点:越小的参数说明模型越简单,越简单的模型则越不
    容易产生过拟合现象
  • API:
    sklearn.linear_model.Ridge(alpha=1.0)
    具有l2正则化的线性最小二乘法

alpha:正则化力度
coef_:回归系数

  • 岭回归:回归得到的回归系数更符合实际,更可靠。另外,能让
    估计参数的波动范围变小,变的更稳定。在存在病态数据偏多的研
    究中有较大的实用价值。
from sklearn.linear_model import Ridgerd = Ridge(alpha=1.0) # 建立岭回归模型 这个有个超参数,正则化
rd.fit(x_train, y_train) # 训练岭回归模型
  • 具体案例在梯度下降案例

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

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

相关文章

html5cssjs代码 022 表单输入类型示例

html5&css&js代码 022 表单输入类型示例 一、代码二、解释 这段HTML代码定义了一个网页&#xff0c;展示了表单输入类型示例。 一、代码 <!DOCTYPE html> <html lang"zh-cn"> <head><title>编程笔记 html5&css&js 表单输入…

短剧小程序软件开发首页接口转发到Selectpage

工具&#xff1a;用的是uniapp开发 技术栈&#xff1a;vue、nide..js、云开发 用时&#xff1a;20工作天 软件&#xff1a;Hb、微信开发者工具 <?php namespace app\api\controller; use app\common\controller\Api; /** * 首页接口 */ class Index extends Api { …

pytorch卸载cuda+cudnn并重新配置GPU环境,亲测有效

pytorch卸载cudacudnn 一、卸载cuda 进入【控制面板】&#xff0c;点击【卸载程序】 将红色框中带版本号的都卸载 二、删除cudnn配置 1、进入安装路径 将以下版本号文件直接删除 pytorch配置GPU环境 一、查看支持的cuda最高版本 1、winr&#xff0c;输入cmd&#xf…

【开源】SpringBoot框架开发二手车交易系统

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 数据中心模块2.2 二手车档案管理模块2.3 车辆预约管理模块2.4 车辆预定管理模块2.5 车辆留言板管理模块2.6 车辆资讯管理模块 三、系统设计3.1 E-R图设计3.2 可行性分析3.2.1 技术可行性分析3.2.2 操作可行性3.2.3 经济…

单片机原理

AT89S51单片机片内硬件结构 &#xff08; 本节以AT89S51为例介绍51单片机的基本结构&#xff0c;如下图所示&#xff09; AT89S51单片机的片内结构&#xff0c;从图中可见 AT89S51单片机的基本组成&#xff1a; 1. CPU&#xff1a;8位的CPU 由控制器和运算器构成 2. 数据存…

【Frida】04_Frida中使用TypeScript脚本(采坑)

▒ 目录 ▒ &#x1f6eb; 导读需求开发环境演示目标 1️⃣ 操作步骤安装node 20.10.0在 VSCode 中打开项目目录初始化一个 NodeJS 项目安装 TypeScript初始化 TypeScript 项目安装依赖配置 TypeScript编写代码编译设置编译脚本运行&#xff0c;查看结果 2️⃣ 采坑frida-compi…

WEB前端项目开发——(一)(2024)

目录 1 通过Git Bash安装 vue-cli 2 创建项目 3 解决Git Bash方向键失效 4 重新进行项目创建 5 浏览器输入地址查看 6 案例——简单修改v3-calendar中的内容 7 测试页面效果 本篇文章介绍通过了Git Bash创建v3-calendar项目&#xff0c;之后对v3-calendar进行简单…

使用gitee自动备份文件

需求 舍友磁盘前两天gg了&#xff0c;里面的论文没有本地备份&#xff0c;最后费劲巴拉的在坚果云上找到了很早前的版本。我说可以上传到github&#xff0c;建一个私人仓库就行了&#xff0c;安全性应该有保证&#xff0c;毕竟不是啥学术大亨&#xff0c;不会有人偷你论文。但是…

R语言:microeco:一个用于微生物群落生态学数据挖掘的R包,第四:trans_beta class

trans_beta class&#xff1a;利用trans_beta类可以变换和绘制beta分集的距离矩阵。该类中涉及到beta多样性的分析主要包括排序、群距、聚类和方差分析。我们首先使用PCoA显示排序。 > dataset$cal_betadiv() The result is stored in object$beta_diversity ... > t1 &…

ClickHouse中的设置的分类

ClickHouse中的各种设置 ClickHouse中的设置有几百个&#xff0c;下面对这些设置做了一个简单的分类。

游戏引擎中网络游戏的基础

一、前言 网络游戏所面临的挑战&#xff1a; 一致性&#xff1a;如何在所有的主机内都保持一样的表现可靠性&#xff1a;网络传输有可能出现丢包安全性&#xff1a;反作弊&#xff0c;反信息泄漏。多样性&#xff1a;不同设备之间链接&#xff0c;比如手机&#xff0c;ipad&a…

C到C++的敲门砖-2

文章目录 引用内联函数auto关键字基于范围的for循环指针空值nullptr后记 引用 引用不是新定义一个变量&#xff0c;而是给已存在变量取了一个别名&#xff0c;编译器不会为引用变量开辟内存空 间&#xff0c;它和它引用的变量共用同一块内存空间。 所谓引用就是给变量起别名&am…

RUST egui体验

egui官方提供了web版的demo&#xff0c;效果还是很不错的&#xff0c;就是用的时候有点一头雾水&#xff0c;没有找到明确的指导怎么把这些组件插入到自己的application或者web。花了一天时间撸了一遍流程&#xff0c;记录一下&#xff0c;说不定以后能用到呢 >_< efram…

asp.net 作业星软件系统

asp.net 作业星软件系统 用户功能:分教师和家长&#xff08;学生) 注册登录:登录部分是用户名密码&#xff0c;以及教师和家长&#xff08;学生&#xff09;的勾选; 注册包括用户名密码确认密码再次确认密码(与上方输入的密码比对&#xff09;身份班级设置找回账号的问题和答案…

【人工智能】英文学习材料01(每日一句)

&#x1f33b;个人主页&#xff1a;相洋同学 &#x1f947;学习在于行动、总结和坚持&#xff0c;共勉&#xff01; 目录 1.Natural Language Processing&#xff0c;NLP&#xff08;自然语言处理&#xff09; 2.Machine Learing&#xff0c;ML&#xff08;机器学习&#xf…

FFplay使用滤镜添加字幕到现有视频显示

1.创建字幕文件4k.srt 4k.srt内容: 1 00:00:01.000 --> 00:00:30.000 日照香炉生紫烟2 00:00:31.000 --> 00:00:60.000 遥看瀑布挂前川3 00:01:01.000 --> 00:01:30.000 飞流直下三千尺4 00:01:31.000 --> 00:02:00.000 疑是银河落九天2.通过使用滤镜显示字幕在视…

【GPT-SOVITS-03】SOVITS 模块-生成模型解析

说明&#xff1a;该系列文章从本人知乎账号迁入&#xff0c;主要原因是知乎图片附件过于模糊。 知乎专栏地址&#xff1a; 语音生成专栏 系列文章地址&#xff1a; 【GPT-SOVITS-01】源码梳理 【GPT-SOVITS-02】GPT模块解析 【GPT-SOVITS-03】SOVITS 模块-生成模型解析 【G…

llama笔记:官方示例解析 example_chat_completion.py

1 导入库 from typing import List, Optional从typing模块中导入List和Optional。typing模块用于提供类型注解的支持&#xff0c;以帮助明确函数预期接收和返回的数据类型。List用于指定列表类型Optional用于指定一个变量可能是某个类型&#xff0c;也可能是None。 import fir…

Linux 下使用 socket 实现 TCP 客户端

目录 示例代码板级验证更多内容 套接字&#xff08;socket&#xff09;是 Linux 下的一种进程间通信机制&#xff08;socket IPC&#xff09;&#xff0c;它不仅支持同一主机的不同进程间通信&#xff0c;还支持跨网络的不同主机的进程间通信。 socket 允许通过标准的文件描述…

十四、GPT

在GPT-1之前&#xff0c;传统的 NLP 模型往往使用大量的数据对有监督的模型进行任务相关的模型训练&#xff0c;但是这种有监督学习的任务存在两个缺点&#xff1a;预训练语言模型之GPT 需要大量的标注数据&#xff0c;高质量的标注数据往往很难获得&#xff0c;因为在很多任务…