彻底学会系列:一、机器学习之线性回归

1.基本概念

线性回归: 有监督学习的一种算法。主要关注多个因变量和一个目标变量之间的关系。
因变量: 影响目标变量的因素: X 1 , X 2 . . . X_1, X_2... X1,X2... ,连续值或离散值。
目标变量: 需要预测的值: target,y
目标变量和自变量之间的关系: 即模型,model

1.1连续值

连续值是可以在一个区间范围内取任意值的变量。例如,身高、体重、温度、时间等都是连续值
在这里插入图片描述

1.2离散值

离散值是只能取有限个数值或者可数值的变量。例如,学生人数、家庭成员数、考试分数等都是离散值
在这里插入图片描述

1.3简单线性回归

简单线性回归对应的公式: y = w x + b y = wx + b y=wx+b
y 是目标变量即未来要预测的值
x 是影响 y 的因素
w,b 是公式上的参数即要求的模型,w就是斜率,b就是截距
一元一次方程:
在这里插入图片描述
一元二次方程:
在这里插入图片描述

1.4最优解

y: 真实值(actual value)
y ^ \hat y y^: 预测值(predicted value), 根据因变量 X 1 , X 2 . . . X_1,X_2... X1,X2...和计算出来的参数w,b得到
error: 误差,预测值和真实值的差距( ε \varepsilon ε
最优解: 尽可能的找到一个模型使得整体的误差最小,通常叫做损失 Loss,通过损失函数Loss Function计算得到。

from sklearn.linear_model import LinearRegressionX = np.linspace(0, 10, num=30).reshape(-1, 1)
w = np.random.randint(1, 5, size=1)
b = np.random.randint(1, 10, size=1)y = X * w + b + np.random.randn(30, 1)
plt.scatter(X, y)model = LinearRegression()
model.fit(X, y)
w_ = model.coef_
b_ = model.intercept_print('一元一次方程真实的斜率和截距是:\n', w, b)
print('通过scikit-learn求解的斜率和截距是:\n', w_, b_)plt.plot(X, X.dot(w_) + b_, color='green')
plt.show()

在这里插入图片描述

1.5多元线性回归

现实生活中,往往影响结果 y 的因素不止一个,有可能是 n 个, X 1 , X 2 , X n . . . X_1,X_2,X_n... X1,X2,Xn...
多元线性回归公式:
在这里插入图片描述
b是截距,也可以表示成:
在这里插入图片描述
使用向量来表示:
在这里插入图片描述

import numpy as np
import matplotlib.pyplot as plt
from sklearn.linear_model import LinearRegression# 转化矩阵
x1 = np.random.randint(-150, 150, size=(300, 1))
x2 = np.random.randint(0, 300, size=(300, 1))# 斜率和截距,随机生成
w = np.random.randint(1, 5, size=2)
b = np.random.randint(1, 10, size=1)# 根据二元一次方程计算目标值y,并加上"噪声"
y = x1 * w[0] + x2 * w[1] + b + np.random.randn(300, 1)
fig = plt.figure(figsize=(9, 6))
ax = plt.subplot(111, projection='3d')
ax.scatter(x1, x2, y)  # 三维散点图
ax.view_init(elev=10, azim=-20)  # 调整视角
#
X = np.concatenate([x1, x2], axis=1)
model = LinearRegression()
model.fit(X, y)
w_ = model.coef_.reshape(-1)
b_ = model.intercept_print('一元一次方程真实的斜率和截距是:\n', w, b)
print('通过scikit-learn求解的斜率和截距是:\n', w_, b_)x = np.linspace(-150, 150, 100)
y = np.linspace(0, 300, 100)
z = x * w_[0] + y * w_[1] + b_
ax.plot(x, y, z, color='green')plt.show()

在这里插入图片描述

2.正归方程

2.1最小二乘法矩阵

最小二乘法(Least Squares Method): 将误差方程转化为有确定解的代数方程组(其方程式数目正好等于未知数的个数),从而可求解出这些未知参数。
在这里插入图片描述
在这里插入图片描述

正规方程: 是解决最小二乘问题的一种方法,特别适用于线性回归问题。
在这里插入图片描述

2.2多元一次方程

在这里插入图片描述

import numpy as npX = np.array([[1, 1], [2, -1]])
y = np.array([14, 10])# linalg 线性代数,solve计算线性回归问题
r = np.linalg.solve(X, y)
print('方程的解: \n ', r)
print('f(x, y) = 8*x + 6*y')# W = np.linalg.inv(X.T.dot(X)).dot(X.T).dot(y)
W = np.linalg.inv(X.T.dot(X)).dot(X.T).dot(y)
print('正规方程求解二元一次: \n ', W)X = np.array([[1, -1, 1], [2, 1, -1], [3, -2, 6]])
y = np.array([100, 80, 256])W = np.linalg.inv(X.T.dot(X)).dot(X.T).dot(y)
print('正规方程求解三元一次: \n ', W)

在这里插入图片描述

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

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

相关文章

Sklearn、TensorFlow 与 Keras 机器学习实用指南第三版(二)

原文:Hands-On Machine Learning with Scikit-Learn, Keras, and TensorFlow 译者:飞龙 协议:CC BY-NC-SA 4.0 第三章:分类 在第一章中,我提到最常见的监督学习任务是回归(预测值)和分类&#…

jmeter设置定时器

前言 本文主要分享两种定时器(同步定时器、固定定时器)的用法,从作用,设置方法以及实例演示几个方面讲解,结尾还有小知识哦!一起开始学习吧! 一、同步定时器(集合点) …

一个完整工作流管理系统的组成部分

一个完整工作流管理系统的组成部分 一个完整的工作流管理系统通常由工作流引擎、工作流设计器、流程操作、工作流客户端程序、流程监控、表单设计器、与表单的集成以及与应用程序的集成八个部分组成。 一、工作流组成 1. 工作流引擎 工作流引擎作为工作流管理系统的核心部分&…

【iOS ARKit】3D人体姿态估计实例

与2D人体姿态检测一样,在ARKit 中,我们不必关心底层的人体骨骼关节点检测算法,也不必自己去调用这些算法,在运行使用 ARBodyTrackingConfiguration 配置的 ARSession 之后,基于摄像头图像的3D人体姿态估计任务也会启动…

蓝桥杯第八届省赛题笔记------基于单片机的电子钟程序设计与调试

题目要求: 一、基本要求 1.1 使用 CT107D 单片机竞赛板,完成“电子钟”功能的程序设计与调试; 1.2 设计与调试过程中,可参考组委会提供的“资源数据包”; 1.3 Keil 工程文件以准考证号命名,保存在…

stable diffusion学习笔记——高清修复

ai画图中通常存在以下痛点: 受限于本地设备的性能(主要是显卡显存),无法跑出分辨率较高的图片。生图的时候分辨率一调大就爆显存。即便显存足够。目前主流的模型大多基于SD1.0和SD1.5,这些模型在训练的时候通常使用小…

多播路由选择

目录 1 多播路由选择 1.1 转发多播数据报时使用三种方法 (1) 洪泛与剪除 RPB 的要点: 1.检查,转发 2.形成以源为根节点的多播转发树 3.剪枝与嫁接 (2) 隧道技术 (tunneling) (3) 基于核心的发现技术 1.2 几种多播路由选择协议 1 多播路由选择 …

git 合并多条提交记录

我要合并多条提交记录(合并前7条为一条),实现如下效果: 使用git rebase // 查看前10个commit git log -10 // 将7个commit压缩成一个commit;注意:vim编辑器 git rebase -i HEAD~4 // add已经跟踪的文件 g…

Linux(二)

远程登录 Linux大多应用于服务器,而服务器不可能像PC一样放在办公室,它们是放在IDC机房的,所以我平时登录linux系统都是通过远程登录的。 Linux系统中是通过ssh服务实现的远程登录功能。默认ssh服务开启了22端口,而且当我们安装…

Leetcode—38. 外观数列【中等】

2024每日刷题&#xff08;111&#xff09; Leetcode—38. 外观数列 实现代码 class Solution { public:string countAndSay(int n) {string ans "1";while(--n) {string next;for(int i 0; i < ans.size(); i) {int cnt 1;char c ans[i];while(i 1 < an…

Centos7配置登录失败处理导致root被锁定处理办法

1、应用场景 root用户被系统锁定&#xff0c;无法登录系统。 2、问题现象 root锁定无法登录系统 3、原因 设置登录失败处理并对root用户生效&#xff0c;一直尝试错误的root密码或暴力破解root密码&#xff0c;导致无法自动解锁Linux的root账户 4、解决方案 1.将虚拟机开…

vue使用es的reduce方法编译报错Error: Can‘t resolve ‘core-js/modules/es.array.reduce.js‘

哈喽 大家好啊 最近在vue使用es的reduce方法编译报错Error: Cant resolve core-js/modules/es.array.reduce.js 报错如图所示&#xff1a; 解决方案&#xff1a; npm install --save core-js 然后重新编译下将正常了 参考原文: 使用import异步加载语法报错_module not foun…