机器学习数学基础之Python矩阵运算

article/2025/10/18 22:01:16

机器学习数学基础之Python矩阵运算

  • 1.在Jupyter中写下Python矩阵基本运算学习记录
    • 1.1 python矩阵操作
      • 1.1.1 首先打开jupyter,引入numpy
      • 1.1.2 创建一个矩阵a并调用
      • 1.1.3 使用 shape可以获得矩阵大小
      • 1.1.4 使用下标读取矩阵中元素
      • 1.1.5 进行行列转换
      • 1.1.6 使用二维数组代替矩阵进行矩阵运算
      • 1.1.7 矩阵加减法
      • 1.1.8 加减失误案例
      • 1.1.9 成功案例
    • 1.2 python矩阵乘法
      • 1.2.1 使用二维数组创建两个矩阵A和B
      • 1.2.2 矩阵数乘,见识矩阵每一个元素乘以该数
      • 1.2.3 dot函数
      • 1.2.4 创建一个二维数组C
      • 1.2.5 验证矩阵乘法的结合性 (AB)C=A(BC)
      • 1.2.6 验证加法分配性 (A+B)C=AC+BC,C(A+B)=CA+CB
      • 1.2.7 数乘的结合性
      • 1.2.8 eye
      • 1.2.9 矩阵A乘以一个单位矩阵
    • 1.3 python矩阵转置
      • 1.3.1 (A')'=A
      • 1.3.2 (A±B)'=A'±B'
      • 1.3.3 (KA)'=KA'
      • 1.3.4 (A×B)'= B'×A'
    • 1.4 python求方阵的迹
      • 1.4.1 trace计算方阵的迹
      • 1.4.2 验证方阵的迹等于方阵的转置的迹
      • 1.4.3 验证一下方阵的乘积的迹
      • 1.4.4 验证方阵的和的迹等于方阵的迹的和
    • 1.5 python方阵的行列式计算方法
      • 1.5.1 使用det方法求得方阵E和方阵F的行列式
    • 1.6 python求逆矩阵/伴随矩阵
      • 1.6.1 使用linalg.det求得方阵的行列式
      • 1.6.2 使用linalg.inv求得方阵A的逆矩阵
      • 1.6.2 通过线性代数中的公式计算伴随矩阵
    • 1.7 python解多元一次方程
  • 2. 解释微分、梯度的含义? 什么是梯度下降法?
    • 梯度
    • 微分
    • 梯度下降法
    • 2.1 用梯度下降法手工求解
    • 2.2 在Excel里用梯度下降法求解z=2(x-1)^2+y^2 的近似根
    • 2.3 线性回归
      • 2.3.1 最小二乘法
      • 2.3.2 梯度下降法
  • 3 总结

1.在Jupyter中写下Python矩阵基本运算学习记录

1.1 python矩阵操作

1.1.1 首先打开jupyter,引入numpy

在这里插入图片描述

1.1.2 创建一个矩阵a并调用

a=np.mat([[1,2,3,],[4,5,6]])
a

在这里插入图片描述

1.1.3 使用 shape可以获得矩阵大小

在这里插入图片描述

1.1.4 使用下标读取矩阵中元素

在这里插入图片描述

1.1.5 进行行列转换

在这里插入图片描述

1.1.6 使用二维数组代替矩阵进行矩阵运算

在这里插入图片描述

1.1.7 矩阵加减法

在这里插入图片描述

1.1.8 加减失误案例

个人猜测没有添加arrary或者mat,导致程序认为只是一个正常的数组结合
在这里插入图片描述

1.1.9 成功案例

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

1.2 python矩阵乘法

1.2.1 使用二维数组创建两个矩阵A和B

A=np.mat([[1,2,3],[4,5,6]])
B=np.mat([[1,4],[2,5],[3,6]])

在这里插入图片描述

1.2.2 矩阵数乘,见识矩阵每一个元素乘以该数

在这里插入图片描述

1.2.3 dot函数

矩阵要求如下

  • 设A为m×p的矩阵,B为p×n的矩阵,那么称m*n的矩阵C为矩阵A与B的乘积
  • 只有在第一个矩阵的列数C和第二个矩阵的行数R相同时才有意义

dot函数用于矩阵乘法,对于二维数组,它计算的是矩阵乘积,对于一维数组,它计算的是内积。注意交换矩阵的前后位置会导致不同的结果

在这里插入图片描述

1.2.4 创建一个二维数组C

C=np.mat([[1,2],[1,3]])
C

在这里插入图片描述

1.2.5 验证矩阵乘法的结合性 (AB)C=A(BC)

np.dot(np.dot(A,B),C)
np.dot(A,np.dot(B,C))

在这里插入图片描述
合理

1.2.6 验证加法分配性 (A+B)C=AC+BC,C(A+B)=CA+CB

D=B-1
D
np.dot(A,B+D)
np.dot(A,B)+np.dot(A,D) #记得分步写

在这里插入图片描述
合理

1.2.7 数乘的结合性

主要对比以下三组代码的值

2*np.dot(A,B)
np.dot(A,2*B)
np.dot(2*A,B)

在这里插入图片描述
很合理

1.2.8 eye

np.eye(n)能够直接创建n阶单位矩阵
在这里插入图片描述

1.2.9 矩阵A乘以一个单位矩阵

np.dot(A,I)

在这里插入图片描述

很明显,仍然是本身

1.3 python矩阵转置

矩阵的转置很简单,就是将矩阵的行变为列,将列变为行.

1.3.1 (A’)’=A

顺便验证了一下A的转置的转置为本身
在这里插入图片描述

1.3.2 (A±B)’=A’±B’

创建两个矩阵

B=np.mat([[1,4],[2,5],[3,6]])
D=np.mat([[0,3],[1,4],[2,5]])

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

1.3.3 (KA)’=KA’

在这里插入图片描述

1.3.4 (A×B)’= B’×A’

np.dot(A.T,B.T)
np.dot(A,B).T
np.dot(B.T,A.T)

在这里插入图片描述

1.4 python求方阵的迹

方阵的迹是什么?方阵的迹就是主对角元素之和。下面来用numpy计算一下方阵的迹。
首先创建一个3阶方阵
在这里插入图片描述

1.4.1 trace计算方阵的迹

在这里插入图片描述
再创键一个方阵F
在这里插入图片描述

1.4.2 验证方阵的迹等于方阵的转置的迹

np.trace(E)
np.trace(E.T)

在这里插入图片描述

1.4.3 验证一下方阵的乘积的迹

np.trace(np.dot(E,F))
np.trace(np.dot(F,E))

在这里插入图片描述

1.4.4 验证方阵的和的迹等于方阵的迹的和

np.trace(E)+np.trace(F)
np.trace(E+F)

在这里插入图片描述

1.5 python方阵的行列式计算方法

如何计算方阵的行列式,用到的是numpy模块的linalg.det方法。下面我们看看如何使用numpy计算矩阵的行列式.
首先要明白二阶矩阵与三阶矩阵的行列式计算方法
二阶
在这里插入图片描述
三阶
在这里插入图片描述
仍然是使用我们上次的E,F
在这里插入图片描述

1.5.1 使用det方法求得方阵E和方阵F的行列式

在这里插入图片描述

C=np.mat([[1,2],[1,3]])
C
np.linalg.det(C)

在这里插入图片描述

1.6 python求逆矩阵/伴随矩阵

设A是数域上的一个n阶方阵,若在相同数域上存在另一个n阶矩阵B,使得: AB=BA=E。 则我们称B是A的逆矩阵,而A则被称为可逆矩阵。当矩阵A的行列式|A|不等于0时才存在可逆矩阵。

伴随矩阵定义:
在这里插入图片描述
第一步仍然是调用numpy包并创建一个矩阵A

import numpy as np
A=np.mat([[1,-2,1],[0,-2,1],[1,1,-2]])
A

在这里插入图片描述

1.6.1 使用linalg.det求得方阵的行列式

利用上文中的det求值

A_abs=np.linalg.det(A)
A_abs

在这里插入图片描述

1.6.2 使用linalg.inv求得方阵A的逆矩阵

在此希望大家能够巩固一下公式
在这里插入图片描述

令B为A的逆矩阵
在这里插入图片描述

1.6.2 通过线性代数中的公式计算伴随矩阵

在这里插入图片描述
在numpy中呈现的具体步骤:
A的伴随矩阵即是A的行列式与逆矩阵相乘
在这里插入图片描述

1.7 python解多元一次方程

假如有这样一个多元一次方程
在这里插入图片描述
正常算是比较麻烦的,我们选择使用函数linalg.solve()
首先将系数弄成矩阵
在这里插入图片描述
将后面的值构成一维数组
在这里插入图片描述
使用linalg.solve()方法解方程,参数a指的是系数矩阵,参数b指的是常数项矩阵
在这里插入图片描述
计算出后将结果带入原方程,结果一致,计算正确

全过程:
在这里插入图片描述

2. 解释微分、梯度的含义? 什么是梯度下降法?

梯度

梯度是一个向量,梯度的本意是一个向量(矢量),表示某一函数在该点处的方向导数沿着该方向取得最大值,即函数在该点处沿着该方向(此梯度的方向)变化最快,变化率最大(为该梯度的模)。计算时候,对每一维的方向求偏导。

微分

微分是指函数在某一点处(趋近于无穷小)的变化量,是一种变化的量。

梯度下降法

简单来说梯度下降法就是通过迭代找到目标函数的最小值,或者收敛到最小值。

2.1 用梯度下降法手工求解

在这里插入图片描述

2.2 在Excel里用梯度下降法求解z=2(x-1)2+y2 的近似根

首先初始化一下表格,设定学习力度
在这里插入图片描述
定一个初始点位
在这里插入图片描述
在梯度、位移向量、函数值后方分别设置函数
在这里插入图片描述

在这里插入图片描述
公式插好后按住一行往下拖
在这里插入图片描述
y的值已经超级小了,可近似看成 0 ,通过观察此时 xi与 y 的值可得其近似值为 (1, 0)

2.3 线性回归

2.3.1 最小二乘法

代码:

from numpy import *# 定义数据集的大小 即20个数据点
m = 20# x的坐标以及对应的矩阵
X0 = ones((m, 1))  # 生成一个m行1列的向量,其值全是1
X1 = arange(1, m+1).reshape(m, 1)  # 生成一个m行1列的向量,也就是x1,从1到m
X = hstack((X0, X1))  # 按照列堆叠形成数组,其实就是样本数据# 对应的y坐标
Y = np.array([3, 4, 5, 5, 2, 4, 7, 8, 11, 8, 12,11, 13, 13, 16, 17, 18, 17, 19, 21
]).reshape(m, 1)# 学习率
alpha = 0.01
import matplotlib.pyplot as plt#绘制出数据集
plt.scatter(X1,Y,color='red')
plt.show()# 定义代价函数
#损失函数(loss function)或代价函数(cost function)是将随机事件或其有关随机变量的取值映射为非负实数以表示该随机事件的“风险”或“损失”的函数
def cost_function(theta, X, Y):diff = dot(X, theta) - Y  # dot() 数组需要像矩阵那样相乘,就需要用到dot()return (1/(2*m)) * dot(diff.transpose(), diff)# 定义代价函数对应的梯度函数
def gradient_function(theta, X, Y):diff = dot(X, theta) - Yreturn (1/m) * dot(X.transpose(), diff)# 梯度下降迭代
def gradient_descent(X, Y, alpha):#将[1,1]变为2行1列的形式theta = array([1, 1]).reshape(2, 1)#得到代价函数的初始梯度gradient = gradient_function(theta, X, Y)#不断迭代的过程while not all(abs(gradient) <= 1e-5):#更新迭代公式theta = theta - alpha * gradient#更新迭代所用的梯度gradient = gradient_function(theta, X, Y)return theta#梯度下降最终的结果
optimal = gradient_descent(X, Y, alpha)
print('optimal:', optimal)
print('cost function:', cost_function(optimal, X, Y)[0][0])# 根据数据画出对应的图像
def plot(X, Y, theta):ax = plt.subplot(111)  # 将画布分为1行1列,取第一个ax.scatter(X, Y, s=30, c="red", marker="s")plt.xlabel("X")plt.ylabel("Y")x = arange(0, 21, 0.2)  # x的范围y = theta[0] + theta[1]*xax.plot(x, y)plt.show()plot(X1, Y, optimal)

在这里插入图片描述

2.3.2 梯度下降法

代码:

from numpy import *# 定义数据集的大小 即20个数据点
m = 20# x的坐标以及对应的矩阵
X0 = ones((m, 1))  # 生成一个m行1列的向量,其值全是1
X1 = arange(1, m+1).reshape(m, 1)  # 生成一个m行1列的向量,也就是x1,从1到m
X = hstack((X0, X1))  # 按照列堆叠形成数组,其实就是样本数据# 对应的y坐标
Y = np.array([3, 4, 5, 5, 2, 4, 7, 8, 11, 8, 12,11, 13, 13, 16, 17, 18, 17, 19, 21
]).reshape(m, 1)# 学习率
alpha = 0.01
import matplotlib.pyplot as plt#绘制出数据集
plt.scatter(X1,Y,color='red')
plt.show()# 定义代价函数
#损失函数(loss function)或代价函数(cost function)是将随机事件或其有关随机变量的取值映射为非负实数以表示该随机事件的“风险”或“损失”的函数
def cost_function(theta, X, Y):diff = dot(X, theta) - Y  # dot() 数组需要像矩阵那样相乘,就需要用到dot()return (1/(2*m)) * dot(diff.transpose(), diff)# 定义代价函数对应的梯度函数
def gradient_function(theta, X, Y):diff = dot(X, theta) - Yreturn (1/m) * dot(X.transpose(), diff)# 梯度下降迭代
def gradient_descent(X, Y, alpha):#将[1,1]变为2行1列的形式theta = array([1, 1]).reshape(2, 1)#得到代价函数的初始梯度gradient = gradient_function(theta, X, Y)#不断迭代的过程while not all(abs(gradient) <= 1e-5):#更新迭代公式theta = theta - alpha * gradient#更新迭代所用的梯度gradient = gradient_function(theta, X, Y)return theta#梯度下降最终的结果
optimal = gradient_descent(X, Y, alpha)
print('optimal:', optimal)
print('cost function:', cost_function(optimal, X, Y)[0][0])# 根据数据画出对应的图像
def plot(X, Y, theta):ax = plt.subplot(111)  # 将画布分为1行1列,取第一个ax.scatter(X, Y, s=30, c="red", marker="s")plt.xlabel("X")plt.ylabel("Y")x = arange(0, 21, 0.2)  # x的范围y = theta[0] + theta[1]*xax.plot(x, y)plt.show()plot(X1, Y, optimal)

在这里插入图片描述

最小二乘法梯度下降法
斜率k0.969924810.96992163
截距d0.515789470.51583286

3 总结

本次实验,我尝试使用了jupyter中矩阵的基本语句以及做了多元一次方程,并且熟知了梯度下降法


http://chatgpt.dhexx.cn/article/scZuWa9m.shtml

相关文章

python矩阵的基本运算

文章目录 一、python矩阵操作二、python矩阵乘法三、python矩阵转置四、python求方阵的迹五、python方阵的行列式计算方法六、python求逆矩阵/伴随矩阵七、 python解多元一次方程用python的 一、python矩阵操作 先引入numpy&#xff0c;以后的教程中&#xff0c;我们都引用为n…

python:矩阵的基本运算

一、Python 矩阵基本运算 引入 numpy 库 import numpy as np 1. python矩阵操作 1&#xff09;使用 mat 函数创建一个 2X3矩阵 a np.mat([[1, 2, 3], [4, 5, 6]])2&#xff09;使用 shape 可以获取矩阵的大小 a.shape 3&#xff09;进行行列转换 a.T 4&#xff09;使用…

html轮播图点击图片放大,jq点击图片 放大轮播

展示效果: 实现逻辑:点击图片的时候 把第一块(外观)的所有图片数据 直接赋值到弹框上. 用的swiper这个轮播,自带动画 html 放上源码Document // 字体 document.documentElement.style.fontSize = document.documentElement.clientWidth / 6.4

简易的JQ轮播图

一、主体程序 ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 <!DOCTYPE html> < html > < head > < meta charset "utf-8" /> < title >轮播图①&#xff08;手动点击轮播&#xff09;&…

用jq实现轮播图片的效果

用jq实现轮播图片的效果 使用jq实现简单的图片轮播效果&#xff0c;图片自动轮播功能&#xff0c;左右点击滑动功能&#xff0c;鼠标进入数字列表时实现图片滑动功能&#xff1b;主要是通过操作图片数组删除和添加的元素&#xff0c;然后重新渲染页面的方式来实现轮播。 1.效…

用jq撸一个简易轮播图

本次文章我将来用jq实现一个轮播图&#xff0c;废话少说下面放效果 先说下基本思想&#xff0c;先将item使用position: absolute;脱离文档流令他们叠在一起&#xff0c;使用z-index来实现轮播的效果&#xff0c;注&#xff1a;这里如果没把每一项absolute的话是没法用z-index的…

js jQ轮播图(三种)

第一种: 用了css3进行3D效果轮播 完整代码&#xff1a; <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><meta…

jq轮播图2

今天续着上一期的来给大家讲另外一种方法的轮播图   这种方法可以实现无缝轮播,原理就是我们在自己预先想要设置轮播的那一组照片后边,用jq语言在另外加上一组相同的照片,相当于现在的长度就是两组照片的长度,我们将初始的图片索引值就先定在我们复制的第一张图片上,就是…

jQuery实现一个简单的轮播图

一.轮播图内容组成 包括&#xff1a;4张图片&#xff0c;图片标号&#xff0c;向左翻页&#xff0c;向右翻页的几个部分&#xff0c;如下图所示&#xff1a; 二.实现功能 1.加载页面后&#xff0c;4张图片默认从第一张图片开始轮播&#xff0c;索引值为1。 2.当把鼠标over到…

jQuery实现各种轮播图

目录 无限循环滚动 百叶窗 轮播一 轮播二 轮播三 无限循环滚动 * {margin: 0;padding: 0;}div {width: 1120px;height: 300px;border: 1px solid #000;margin: 100px auto;overflow: hidden;}ul {list-style: none;width: 3360px;height: 300px;background: #000;/* backgro…

git上传代码简单方法 简单git上传代码工具

简单git上传代码工具 肯定有很多人和我一样&#xff0c;git上传时候搞不懂拉取&#xff0c;合并等一系列的代码冲突问题&#xff0c;往往可能覆盖掉自己今天写的代码&#xff0c;或者覆盖掉别人的代码。 下面给大家简单介绍一款操作比较简单的上传代码工具&#xff1a;下图这款…

Git上传代码到GitHub

版本控制&#xff1a;使用Git上传代码到GitHub 本文将帮助大家学会使用Git&#xff08;版本管理工具&#xff09;软件把电脑中的代码或项目上传到GitHub&#xff08;项目托管平台&#xff09;中。 要上传代码到GitHub中&#xff0c;是必须要安装Git软件的&#xff0c;不管是直…

如何向github上传代码

说明&#xff1a;本人亲测可行 1.首先你要安装git才行&#xff0c;这里不说明。 2.在github上创建个人仓库: 3.复制仓库地址&#xff1a; 4.在本地随便创建一个文件夹&#xff08;注意路径不要中文&#xff09; 5.进入文件中&#xff0c;鼠标右键如果安装成功git,菜单中会多出…

git上传代码到git/码云gitee

一、首先需要下载git https://git-scm.com/ 输入命令:git --version 可查看当前git版本 二.安装后需要一些配置 配置用户名和邮箱: $ git config --global user.name "qinyong" $ git config --global user.email "emailexample.com" qinyong是自…

如何在mac端上用git上传代码到码云

前言&#xff1a;作为一个合格的猿&#xff0c;SVN的使用相信大家已经非常熟悉了&#xff0c;GIT作为一个强大的版本控制工具&#xff0c;也是非常有必要深入学习的。对比两个工具&#xff0c;说说GIT的优缺点&#xff1a; 优点&#xff1a;1、GIT拥有全世界的资源&#xff0c;…

git上传代码到gitee仓库步骤

默认电脑第一次安装git且未设置过SSH key 安装git 创建gitee仓库 生成SSH密钥 在你想上传文件所在的文件夹内右键&#xff0c;打开git bash&#xff0c;第一次使用Git时需要先生成SSH ssh-keygen -t rsa -C "your_email"注意&#xff1a;ssh-keygen中间没有空格提…

git上传代码到码云(详细)

一、安装git .要使用git 先安转git 请到官网下载最新git http://git-scm.com/downloads 安装完成右键查看下是否有如下图所示的图标 二、本地建立git文件 本次建立的git文件是在本地完成的项目上建立的。找到当前完成项目的文件夹完成如下代码 &#xff08;1&#xff09;“…

【git】将代码上传到github

记录一下用Git初次配置远端仓库的学习过程。 假设你已经下载好了git&#xff0c;同时在github上也有了一个账号。 0.配置SSH 我们打开git bash&#xff0c;然后输入 $ ssh-keygen -t rsa -C "your_emailyouremail.com"这里的your_emailyouremail.com 是你在github…

怎么用git上传部分代码

怎么用Git上传部分代码? 0&#xff1a;在项目的根目录右键 Git Bash Here 1: 使用命令: git status (查看当前代码状态) 标红的为修改的代码 2&#xff1a;看一下那些文件是想要上传哪些文件是不想要上传的。 使用命令: git add . (全部上传) git add 文件 (上传指定文件) …

Git代码上传

以开源仓库为例&#xff0c;公司使用公司的仓库 首先需要注册一个gitee 创建仓 本地安装git 安装地址&#xff1a; https://git-scm.com/download/win 设置环境变量 在cmd设置GIT全局设置&#xff0c;输入你创建仓库的命令 创建git仓库 1、新建文件api_test 2、在cmd切换至此…