当前位置: 首页 > news >正文

【机器学习】在向量的流光中,揽数理星河为衣,以线性代数为钥,轻启机器学习黎明的瑰丽诗章

文章目录

  • 线性代数入门:机器学习零基础小白指南
    • 前言
    • 一、向量:数据的基本单元
      • 1.1 什么是向量?
        • 1.1.1 举个例子:
      • 1.2 向量的表示与维度
        • 1.2.1 向量的维度
        • 1.2.2 向量的表示方法
      • 1.3 向量的基本运算
        • 1.3.1 向量加法
        • 1.3.2 向量的数乘
        • 1.3.3 向量的长度(范数)
      • 1.4 向量的几何意义
    • 二、矩阵:多维数据的集合
      • 2.1 什么是矩阵?
        • 2.1.1 举个例子:
      • 2.2 矩阵的表示与维度
        • 2.2.1 矩阵的表示
        • 2.2.2 矩阵的维度
      • 2.3 矩阵的基本运算
        • 2.3.1 矩阵加法
        • 2.3.2 矩阵数乘
        • 2.3.3 矩阵乘法
        • 2.3.4 转置矩阵
    • 三、矩阵的高级操作
      • 3.1 矩阵的逆
        • 3.1.1 什么是逆矩阵?
        • 3.1.2 矩阵可逆的条件
        • 3.1.3 逆矩阵的计算
      • 3.2 特征值与特征向量
        • 3.2.1 什么是特征值和特征向量?
        • 3.2.2 几何意义
        • 3.2.3 计算特征值和特征向量
      • 3.3 奇异值分解(SVD)
        • 3.3.1 什么是奇异值分解?
        • 3.3.2 SVD的用途
      • 3.4 矩阵的伪逆
        • 3.4.1 什么是伪逆?
        • 3.4.2 伪逆的计算方法
    • 四、矩阵在机器学习中的应用
      • 4.1 数据表示
      • 4.2 模型训练中的矩阵运算
        • 4.2.1 线性回归
  • 写在最后

线性代数入门:机器学习零基础小白指南

💬 欢迎讨论:如果你在阅读过程中对某些公式或内容有疑问,欢迎在评论区留言,大家一起交流进步!

👍 点赞、收藏与分享:觉得这篇文章对你有帮助吗?记得点赞收藏,并分享给对机器学习感兴趣的朋友吧!你们的支持是我创作的最大动力!

🚀 知识的启航:线性代数是机器学习的基础,也是未来探索智能模型的关键。让我们从这里开始,一步步搭建知识大厦!


前言

在正式踏入机器学习的实战领域前,我们需要为自己筑起一座坚实的数学地基。 对于零基础的学习者而言,数学听起来也许陌生甚至有点“吓人”。然而,不必惧怕:本篇文章将带你从最直观的概念出发,帮助你理解和掌握线性代数这门支撑机器学习大厦的重要支柱。

为什么选择线性代数作为第一站?

  • 数据表示:机器学习中的数据常以矩阵和向量的形式表示,线性代数是理解这种数据结构的语言。
  • 模型构建:许多经典模型(如线性回归)和高级算法(如神经网络中的参数更新)都依赖矩阵运算和向量运算的思想。
  • 特征变换:降维、特征提取、特征工程等处理步骤都离不开对线性代数的理解。

本篇文章将采用从浅入深的方式,带你从最基本的概念(向量与矩阵)出发,逐步触及更深层的运算与应用。你不需要担心自己的数学基础薄弱,每一个概念都会配以直观解释、示例和适合初学者的类比。通过本篇的学习,你将在脑海中构建起对数据表示和线性结构的基础认知,为后续的学习奠定牢固根基。


一、向量:数据的基本单元

1.1 什么是向量?

向量(Vector)是线性代数的核心概念之一。简单来说,向量是一组有序数值的集合,可以用来表示一个物理量或者一个对象的特征。

1.1.1 举个例子:

假设我们想描述一个人的体型,可以用以下信息:

  • 身高:170 厘米
  • 体重:65 公斤
  • 年龄:30 岁

我们可以把这些特征组合成一个向量:
v = [ 170 65 30 ] \mathbf{v} = \begin{bmatrix} 170 \\ 65 \\ 30 \end{bmatrix} v= 1706530


1.2 向量的表示与维度

1.2.1 向量的维度

向量的维度(Dimension)是其元素的个数。例如:

  • v = [ 170 65 30 ] \mathbf{v} = \begin{bmatrix} 170 \\ 65 \\ 30 \end{bmatrix} v= 1706530 是一个三维向量。
  • w = [ 1 2 ] \mathbf{w} = \begin{bmatrix} 1 \\ 2 \end{bmatrix} w=[12] 是一个二维向量。
1.2.2 向量的表示方法
  1. 数学表示:用列向量或行向量表示,例如:

    • 列向量:
      v = [ v 1 v 2 v 3 ] \mathbf{v} = \begin{bmatrix} v_1 \\ v_2 \\ v_3 \end{bmatrix} v= v1v2v3
    • 行向量:
      v = [ v 1 v 2 v 3 ] \mathbf{v} = \begin{bmatrix} v_1 & v_2 & v_3 \end{bmatrix} v=[v1v2v3]
  2. 编程实现(以 Python 为例):

    import numpy as np# 创建列向量
    v = np.array([[170], [65], [30]])
    print(v)# 创建行向量
    w = np.array([1, 2, 3])
    print(w)
    

1.3 向量的基本运算

向量运算是线性代数的基础,在机器学习中用于描述数据间的关系。

1.3.1 向量加法

两个维度相同的向量可以逐元素相加。例如:
a = [ 1 2 ] , b = [ 3 4 ] \mathbf{a} = \begin{bmatrix} 1 \\ 2 \end{bmatrix}, \quad \mathbf{b} = \begin{bmatrix} 3 \\ 4 \end{bmatrix} a=[12],b=[34]
它们的加法结果为:
a + b = [ 1 + 3 2 + 4 ] = [ 4 6 ] \mathbf{a} + \mathbf{b} = \begin{bmatrix} 1+3 \\ 2+4 \end{bmatrix} = \begin{bmatrix} 4 \\ 6 \end{bmatrix} a+b=[1+32+4]=[46]

Python代码:

import numpy as npa = np.array([1, 2])
b = np.array([3, 4])
print(a + b)  # 输出:[4 6]

1.3.2 向量的数乘

标量 (c) 与向量 v \mathbf{v} v 的乘积是将 (c) 逐一乘以向量中的每个元素:
c v = [ c ⋅ v 1 c ⋅ v 2 ] c \mathbf{v} = \begin{bmatrix} c \cdot v_1 \\ c \cdot v_2 \end{bmatrix} cv=[cv1cv2]

例如:
2 ⋅ [ 3 4 ] = [ 6 8 ] 2 \cdot \begin{bmatrix} 3 \\ 4 \end{bmatrix} = \begin{bmatrix} 6 \\ 8 \end{bmatrix} 2[34]=[68]

Python代码:

v = np.array([3, 4])
c = 2
print(c * v)  # 输出:[6 8]

1.3.3 向量的长度(范数)

向量的长度,也称范数(Norm),定义为:
∥ v ∥ = v 1 2 + v 2 2 + ⋯ + v n 2 \|\mathbf{v}\| = \sqrt{v_1^2 + v_2^2 + \cdots + v_n^2} v=v12+v22++vn2

示例
v = [ 3 4 ] \mathbf{v} = \begin{bmatrix} 3 \\ 4 \end{bmatrix} v=[34],则:
∥ v ∥ = 3 2 + 4 2 = 5 \|\mathbf{v}\| = \sqrt{3^2 + 4^2} = 5 v=32+42 =5

Python代码:

from numpy.linalg import normv = np.array([3, 4])
print(norm(v))  # 输出:5.0

1.4 向量的几何意义

向量可以用来描述“方向”和“大小”。例如:

  • 向量 v = [ 3 4 ] \mathbf{v} = \begin{bmatrix} 3 \\ 4 \end{bmatrix} v=[34] 指向二维平面中的点 ((3,4)),其长度为 5。

二、矩阵:多维数据的集合

2.1 什么是矩阵?

矩阵(Matrix)是一个二维数组,由行(Row)和列(Column)组成。矩阵在机器学习中非常重要,用于表示数据集、模型参数和特征变换。

2.1.1 举个例子:

假设我们有一个房价预测的数据集,包括以下信息:

面积(平方米)房龄(年)房价(万元)
505100
10010200
1508300

可以将这个数据用矩阵表示:

  • 特征矩阵 (X):
    X = [ 50 5 100 10 150 8 ] X = \begin{bmatrix} 50 & 5 \\ 100 & 10 \\ 150 & 8 \end{bmatrix} X= 501001505108

  • 目标向量 (y):
    y = [ 100 200 300 ] y = \begin{bmatrix} 100 \\ 200 \\ 300 \end{bmatrix} y= 100200300


2.2 矩阵的表示与维度

2.2.1 矩阵的表示

矩阵通常用大写字母(如 (A), (X))表示,矩阵中的元素可以用行列索引 (A_{ij}) 表示,例如:
A = [ 1 2 3 4 5 6 ] A = \begin{bmatrix} 1 & 2 & 3 \\ 4 & 5 & 6 \end{bmatrix} A=[142536]

  • A 11 = 1 A_{11} = 1 A11=1 表示第一行第一列的元素。
  • A 23 = 6 A_{23} = 6 A23=6 表示第二行第三列的元素。
2.2.2 矩阵的维度

矩阵的维度用“行数 × 列数”表示,例如:

  • 上述矩阵 (A) 的维度是 2 × 3 2 \times 3 2×3(2 行 3 列)。
  • 如果一个矩阵的行数和列数相同,则称其为方阵

Python代码实现:

import numpy as np# 创建矩阵
A = np.array([[1, 2, 3],[4, 5, 6]])
print("矩阵 A:\n", A)
print("A 的形状:", A.shape)  # 输出 (2, 3)

2.3 矩阵的基本运算

2.3.1 矩阵加法

两个矩阵相加要求维度相同,逐元素相加。例如:
[ 1 2 3 4 ] + [ 5 6 7 8 ] = [ 6 8 10 12 ] \begin{bmatrix} 1 & 2 \\ 3 & 4 \end{bmatrix} + \begin{bmatrix} 5 & 6 \\ 7 & 8 \end{bmatrix} =\begin{bmatrix} 6 & 8 \\ 10 & 12 \end{bmatrix} [1324]+[5768]=[610812]

Python代码:

A = np.array([[1, 2],[3, 4]])
B = np.array([[5, 6],[7, 8]])
print(A + B)  # 输出 [[6, 8], [10, 12]]

2.3.2 矩阵数乘

标量(普通数值)与矩阵相乘是将标量逐元素乘以矩阵中的每个元素。例如:
2 ⋅ [ 1 2 3 4 ] = [ 2 4 6 8 ] 2 \cdot \begin{bmatrix} 1 & 2 \\ 3 & 4 \end{bmatrix} =\begin{bmatrix} 2 & 4 \\ 6 & 8 \end{bmatrix} 2[1324]=[2648]

Python代码:

A = np.array([[1, 2],[3, 4]])
print(2 * A)  # 输出 [[2, 4], [6, 8]]

2.3.3 矩阵乘法

矩阵乘法是矩阵运算中最常见的操作,用于特征变换和模型训练。

规则

  • 如果 A A A m × n m \times n m×n 的矩阵, B B B n × p n \times p n×p 的矩阵,则它们的乘积 C = A B C = AB C=AB m × p m \times p m×p 的矩阵。
  • 元素 C i j C_{ij} Cij 的计算公式为:
    C i j = ∑ k = 1 n A i k B k j C_{ij} = \sum_{k=1}^n A_{ik} B_{kj} Cij=k=1nAikBkj

示例
A = [ 1 2 3 4 ] , B = [ 5 6 7 8 ] A = \begin{bmatrix} 1 & 2 \\ 3 & 4 \end{bmatrix}, \quad B = \begin{bmatrix} 5 & 6 \\ 7 & 8 \end{bmatrix} A=[1324],B=[5768]

矩阵乘积:
C = A ⋅ B = [ 19 22 43 50 ] C = A \cdot B = \begin{bmatrix} 19 & 22 \\ 43 & 50 \end{bmatrix} C=AB=[19432250]

Python代码:

A = np.array([[1, 2],[3, 4]])
B = np.array([[5, 6],[7, 8]])
C = A.dot(B)  # 或使用 np.matmul(A, B)
print(C)  # 输出 [[19, 22], [43, 50]]

2.3.4 转置矩阵

矩阵的转置是将其行列互换。例如:
A = [ 1 2 3 4 5 6 ] A = \begin{bmatrix} 1 & 2 & 3 \\ 4 & 5 & 6 \end{bmatrix} A=[142536]
其转置为:
A T = [ 1 4 2 5 3 6 ] A^T = \begin{bmatrix} 1 & 4 \\ 2 & 5 \\ 3 & 6 \end{bmatrix} AT= 123456

Python代码:

A = np.array([[1, 2, 3],[4, 5, 6]])
print(A.T)  # 输出 [[1, 4], [2, 5], [3, 6]]

三、矩阵的高级操作

矩阵的高级操作是线性代数的重要内容,也是机器学习中不可或缺的数学工具。在这一部分,我们将学习矩阵的逆、特征值、特征向量以及矩阵分解等内容,并结合实际应用来理解它们的意义。


3.1 矩阵的逆

3.1.1 什么是逆矩阵?

对于一个方阵 (A),如果存在一个矩阵 A − 1 A^{-1} A1,使得:
A ⋅ A − 1 = A − 1 ⋅ A = I A \cdot A^{-1} = A^{-1} \cdot A = I AA1=A1A=I
其中 I I I 是单位矩阵(对角线元素为 1,其他为 0 的矩阵),则称 A − 1 A^{-1} A1 A A A 的逆矩阵。

3.1.2 矩阵可逆的条件
  • 只有方阵(行数等于列数)可能有逆矩阵。
  • 如果矩阵的行列式(Determinant)为 0,则该矩阵不可逆(奇异矩阵)。
3.1.3 逆矩阵的计算

对于 2 × 2 2 \times 2 2×2 的矩阵 A = [ a b c d ] A = \begin{bmatrix} a & b \\ c & d \end{bmatrix} A=[acbd],其逆矩阵为:
A − 1 = 1 a d − b c [ d − b − c a ] A^{-1} = \frac{1}{ad - bc} \begin{bmatrix} d & -b \\ -c & a \end{bmatrix} A1=adbc1[dcba]

例如:
A = [ 4 7 2 6 ] A = \begin{bmatrix} 4 & 7 \\ 2 & 6 \end{bmatrix} A=[4276]
行列式 a d − b c = 4 ⋅ 6 − 7 ⋅ 2 = 10 ad - bc = 4 \cdot 6 - 7 \cdot 2 = 10 adbc=4672=10

因此:
A − 1 = 1 10 [ 6 − 7 − 2 4 ] = [ 0.6 − 0.7 − 0.2 0.4 ] A^{-1} = \frac{1}{10} \begin{bmatrix} 6 & -7 \\ -2 & 4 \end{bmatrix} = \begin{bmatrix} 0.6 & -0.7 \\ -0.2 & 0.4 \end{bmatrix} A1=101[6274]=[0.60.20.70.4]

Python代码:

import numpy as np# 定义矩阵
A = np.array([[4, 7],[2, 6]])# 计算逆矩阵
A_inv = np.linalg.inv(A)
print("逆矩阵:\n", A_inv)

3.2 特征值与特征向量

3.2.1 什么是特征值和特征向量?

对于一个方阵 A A A,如果存在一个标量 λ \lambda λ 和一个非零向量 v \mathbf{v} v,使得:
A v = λ v A \mathbf{v} = \lambda \mathbf{v} Av=λv
则称:

  • λ \lambda λ 为矩阵 A A A 的特征值。
  • v \mathbf{v} v 为对应的特征向量。
3.2.2 几何意义

特征向量是一个方向,在矩阵变换下保持方向不变;特征值是对应的缩放因子。

3.2.3 计算特征值和特征向量

特征值通过解以下特征方程获得:
det ⁡ ( A − λ I ) = 0 \det(A - \lambda I) = 0 det(AλI)=0
解得的 λ \lambda λ 为特征值,将特征值代入方程 ( A − λ I ) v = 0 (A - \lambda I)\mathbf{v} = 0 (AλI)v=0 可解得特征向量。

Python代码:

from numpy.linalg import eig# 定义矩阵
A = np.array([[4, 1],[2, 3]])# 计算特征值和特征向量
values, vectors = eig(A)
print("特征值:\n", values)
print("特征向量:\n", vectors)

3.3 奇异值分解(SVD)

3.3.1 什么是奇异值分解?

奇异值分解(Singular Value Decomposition, SVD)是对矩阵的一种分解方法,可以表示为:
A = U Σ V T A = U \Sigma V^T A=UΣVT

3.3.2 SVD的用途
  • 数据降维:通过保留主要的奇异值,可以减少数据维度(如 PCA)。
  • 数据压缩:SVD可用于压缩图片或文本数据。
  • 推荐系统:通过矩阵分解预测用户评分。

Python代码:

from numpy.linalg import svd# 定义矩阵
A = np.array([[1, 2],[3, 4],[5, 6]])# 奇异值分解
U, Sigma, VT = svd(A)
print("U 矩阵:\n", U)
print("奇异值:\n", Sigma)
print("V 转置:\n", VT)

3.4 矩阵的伪逆

3.4.1 什么是伪逆?

伪逆矩阵(Pseudo-Inverse)是逆矩阵的推广,用于处理非方阵或奇异矩阵。对于一个矩阵 A A A,伪逆记为 A + A^+ A+

3.4.2 伪逆的计算方法

伪逆可以通过 SVD 计算:
A + = V Σ + U T A^+ = V \Sigma^+ U^T A+=VΣ+UT
其中 Σ + \Sigma^+ Σ+ 是对奇异值矩阵的伪逆。

Python代码:

# 定义矩阵
A = np.array([[1, 2],[3, 4],[5, 6]])# 计算伪逆
A_pinv = np.linalg.pinv(A)
print("伪逆矩阵:\n", A_pinv)

四、矩阵在机器学习中的应用

4.1 数据表示

  • 特征矩阵:存储样本的特征数据,每一行表示一个样本,每一列表示一个特征。
  • 目标向量:存储样本对应的目标值。

4.2 模型训练中的矩阵运算

4.2.1 线性回归

在线性回归中,我们希望找到参数向量 θ \theta θ,使得:
y = X θ y = X\theta y=
通过最小化误差:
min ⁡ θ ∥ X θ − y ∥ 2 \min_\theta \|X\theta - y\|^2 θminy2
可以使用正规方程求解:
θ = ( X T X ) − 1 X T y \theta = (X^T X)^{-1} X^T y θ=(XTX)1XTy

Python代码:

# 定义特征矩阵 X 和目标向量 y
X = np.array([[1, 50],[1, 100],[1, 150]])
y = np.array([100, 200, 300])# 计算参数向量 theta
theta = np.linalg.inv(X.T.dot(X)).dot(X.T).dot(y)
print("参数向量 theta:", theta)

写在最后

通过这篇文章的学习,你初步了解了向量和矩阵这些基础概念,以及它们在机器学习中的重要性。从简单的向量加减和数乘,到稍微复杂的矩阵运算,再到特征值、奇异值分解等高级知识点,这些都是构建更高级模型和理解算法原理的关键砖瓦。

你或许会发现,这些数学内容并不是遥不可及的高门槛,相反,它们能帮助你更直观地理解数据与模型之间的关系。接下来,你可以尝试把这里学到的知识灵活运用到一些简单数据分析或小项目中,比如实现一个最基础的线性回归预测,或者对一个数据集进行简单的降维操作。

在后续的学习中,我们还会介绍更多与机器学习相关的数学和编程技巧。希望这篇文章能成为你打牢数学基础的起点,让你在机器学习这片广阔的领域中更有方向感和掌控力。加油!


以上就是关于【机器学习】窥数据之序,悟算法之道:机器学习的初心与远方的内容啦,各位大佬有什么问题欢迎在评论区指正,或者私信我也是可以的啦,您的支持是我创作的最大动力!❤️

在这里插入图片描述

相关文章:

【机器学习】在向量的流光中,揽数理星河为衣,以线性代数为钥,轻启机器学习黎明的瑰丽诗章

文章目录 线性代数入门:机器学习零基础小白指南前言一、向量:数据的基本单元1.1 什么是向量?1.1.1 举个例子: 1.2 向量的表示与维度1.2.1 向量的维度1.2.2 向量的表示方法 1.3 向量的基本运算1.3.1 向量加法1.3.2 向量的数乘1.3.3…...

Python PPT合并与拆分 – 详解

目录 使用工具 Python 合并 PPT 合并多个PPT文档 合并每个PPT文档中的特定幻灯片 Python 拆分 PPT 按幻灯片数量拆分 按幻灯片范围拆分 按幻灯片内容拆分 按节 (Section) 拆分 在日常工作或学习中,我们经常需要对PPT文件进行调整,比如将多个PPT…...

舌头分割数据集labelme格式2557张1类别

数据集格式:labelme格式(不包含mask文件,仅仅包含jpg图片和对应的json文件) 图片数量(jpg文件个数):2557 标注数量(json文件个数):2557 标注类别数:1 标注类别名称:["tongue"] 每个类别标注的框数&#xff1…...

LVS能否实现两台服务器的负载均衡

LVS能否实现两台服务器的负载均衡 是的,LVS(Linux Virtual Server)可以实现两台服务器的负载均衡,并且它非常适合这种场景。 LVS(Linux Virtual Server)简介: LVS 是一种基于 Linux 的负载均…...

onlyoffice 容器配置修改后制作镜像导出以及上传到 dockerhub

1.将容器制作成新的镜像 docker commit -p -a "xxx" -m "zh-cn-20-100" onlyoffice ooffice:7.1.1.23docker commit: 这是 Docker 中用于创建新镜像的命令。 -p: 这个选项用于在提交之前暂停容器的运行。这可以确保数据的完整性,因为容器在提交…...

Java常用 Date 时间格式化、Calender日历、正则表达式的用法

目录 1. SimpleDateFormat 日期格式化类 1.1 Date 类型转 String 1.2 String 类型转 Date 2. Calendar 日历类 3. 正则表达式 3.1 正则表达式的组成部分 3.2 手机号正则表达式 3.3 常用密码校验正则表达式 1. SimpleDateFormat 日期格式化类 SimpleDateFormat 是Java中…...

案例讲解自然语言处理(NLP)

自然语言处理(NLP)是一种涉及计算机与人类自然语言之间的交互的技术。以下是一些NLP技术的示例: 语言翻译:NLP可以用于将一种语言翻译成另一种语言。Google翻译就是一个使用NLP技术的例子,它可以将输入的文本从一种语言…...

tryhackme——Pre Security(安检前)-Offensive Security(进攻性安全)

这里我用的edge的插件闪击翻译。这里我英语不好,所以用这个可以顺便学习下英语。 任务一:What is Offensive Security?(什么是进攻性安全?) 很简单啊,通过阅读,知道以下哪个选项更能代表您模拟黑客操作…...

2.python变量

理解,我将提供更详细和深入的解释,包括一些进阶概念和实际应用的例子。我们将从变量类型开始,逐步深入到每种数据类型的特性、操作方法以及它们在编程中的应用场景。 文章目录 1. 变量赋值与作用域变量赋值变量作用域 2. 标准数据类型Number…...

【工业机器视觉】基于深度学习的水表盘读数识别(4-训练与预测)

【工业机器视觉】基于深度学习的仪表盘识读(读数识别)(3)-CSDN博客 训练与预测 Ultralytics YOLO指的是由Ultralytics公司开发的一系列基于YOLO(You Only Look Once)架构的目标检测算法。YOLO是一种实时目标检测系统,它…...

opencv获取摄像头的最大分辨率图像

事情是这样的,在拼多多花了40买了一个4k高清的摄像偷,确实清楚。但是我一直以为网络摄像头分辨率只有640*480,于是用python测试了一下,上代码 import cv2def get_max_resolution(camera_index):"""获取摄像头的最大分辨率。&…...

23.DDD与微服务

学习视频来源:DDD独家秘籍视频合集 https://space.bilibili.com/24690212/channel/collectiondetail?sid1940048&ctype0 文章目录 DDD与微服务的关系1. DDD可以用微服务实现,也可以不用微服务实现2. DDD是微服务拆分的必须参考项之一3. 微服务架构…...

Redis是什么?Redis和MongoDB的区别在那里?

Redis介绍 Redis(Remote Dictionary Server)是一个开源的、基于内存的数据结构存储系统,它可以用作数据库、缓存和消息中间件。以下是关于Redis的详细介绍: 一、数据结构支持 字符串(String) 这是Redis最…...

git SSL certificate problem: unable to get local issuer certificate

Git 客户端将会验证服务器端提供的SSL证书是否由受信任的证书颁发机构(Certification Authority,CA)签发。如果Git客户端无法找到或验证本地签发者证书,就会出现 unable to get local issuer certificate 或类似的错误。 该问题一…...

使用Keil V6编译 FreeRTOS CMSIS V2版本 ETH + Lwip 编译报错问题解决方式

网上其他人写的都解决不了,要不用的是CMSIS V1版本,根据他们的方式搞完还是报错,今天花点时间自己搞一下。 不想自己动手?没问题,模版已上传Gitee https://gitee.com/maybe_404/stm32-f4xx_-free-rtos_-lwip_-templa…...

驱动开发系列30 - Linux Graphics DRM光标绘制分析

一:概述 本文分析了 Linux 直接渲染管理器 (DRM) 绘制光标的过程,目的是将 OpenGL 与 DRM 连接,弄清楚整个调用逻辑。本文将详细描述这一过程,介绍如何在图形软件栈中实现光标渲染。整体软件栈的架构图也将展示其中的各个组成部分及其相互关系。 二:代码介绍 drm-cursor …...

如何利用Java爬虫获得淘宝买家秀

在电商平台上,买家秀数据是商家了解消费者反馈、优化产品和服务的重要资源。本文将详细介绍如何利用Java爬虫技术获取淘宝商品的买家秀信息,并提供一个完整的代码示例。 一、淘宝买家秀数据的重要性 买家秀数据包括买家上传的图片、视频、评论等内容&a…...

【ArcGIS】基于R语言、MaxEnt模型融合技术的物种分布模拟、参数优化方法、结果分析制图与论文写作

第一章、以问题导入的方式,深入掌握原理基础【理论篇】 1、R语言入门: (1)安装R及集成开发环境(IDE);(2)R语言基础语法与数据结构,包括:程序包安…...

虚幻引擎C++按键绑定

在项目的 Project Settings -> Engine -> Input 中进行配置。 配置输入映射的步骤: 打开 Project Settings: 在 Unreal Editor 中,点击菜单栏的 Edit -> Project Settings。 导航到 Input: 在 Project Settings 窗口的左侧导航栏中&#xff0…...

秒杀抢购场景下实战JVM级别锁与分布式锁

背景历史 在电商系统中,秒杀抢购活动是一种常见的营销手段。它通过设定极低的价格和有限的商品数量,吸引大量用户在特定时间点抢购,从而迅速增加销量、提升品牌曝光度和用户活跃度。然而,这种活动也对系统的性能和稳定性提出了极…...

graph-autofusion:CANN 的自动算子融合引擎

GE 的图优化 pass 里,算子融合是对推理性能影响最大的一个。但 GE 的融合规则是硬编码的——ConvBNReLU 写一条规则,BMMSoftmaxBMM 写一条规则。规则多了维护成本直线上升,总有覆盖不到的融合场景。 graph-autofusion 解决了这个问题。它是一…...

【AI】了解ChatMemory 底层实现机制

(说实在,看个 七、整体架构总结 就行了) 为何要了解底层原理,其意义在于出问题好排查,写代码时有思路。 基于源码调试与运行时验证,深度拆解ChatMemory 底层实现机制,重点解析 ChatMemoryStor…...

聊聊 KaiwuDB 的开源压测工具:kwdb-tsbs 上手分享

上一篇我们聊了一下通用 TSBS 工具《聊一聊TSBS:时序数据库跑分,为啥大家都用它?》 今天想就一家国内厂商开源的TSBS工具展开讲讲。怎么看这件事儿,怎么用,以及好不好用。 最近一直在玩时序数据库,做性能对…...

瑞芯微RK3588核心板规格书,详细参数配置,定位ARM高端AIOT智能模组,板对板连接器320Pin 间距0.5 B to B连接器

触觉智能研发的瑞芯微RK3588核心板,板对板连接器320Pin 间距0.5 B to B连接器,型号简写SOM3588-V1,在CSDN平台留下规格书方便大家查看。1. 产品概述1.1 IDO-SOM3588-V1适用范围IDO-SOM3588-V1核心板适用于工业主机,边缘计算网关、…...

DocLayout-YOLO实战案例:从学术论文到财务报表的布局分析

DocLayout-YOLO实战案例:从学术论文到财务报表的布局分析 【免费下载链接】DocLayout-YOLO DocLayout-YOLO: Enhancing Document Layout Analysis through Diverse Synthetic Data and Global-to-Local Adaptive Perception 项目地址: https://gitcode.com/gh_mir…...

15天学会AI应用开发(一)搭建AI大模型应用开发环境

AI大模型时代来了,程序员们纷纷入坑AI应用开发,可是苦于AI教程良莠不齐,往往花费了大量时间精力和金钱,却仍然过其门而不入。 有鉴于此,博主开始连载AI应用开发教程《15天学会AI应用开发》,帮助大家快速掌…...

构建AI应用时如何借助Taotoken实现模型的灵活选型与降级

🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 构建AI应用时如何借助Taotoken实现模型的灵活选型与降级 对于正在开发AI应用的产品团队而言,模型服务的稳定性和成本效…...

从Excel到预测:5分钟搞定Python读取本地iris.csv文件并完成分类

从Excel到预测:5分钟搞定Python读取本地iris.csv文件并完成分类 当你第一次接触机器学习时,最令人沮丧的往往不是算法本身,而是那些看似简单却总出问题的数据准备环节。我至今记得自己对着一个简单的CSV文件折腾了整个下午的狼狈经历——列名…...

小白程序员必备:从零基础到大模型实战,这份学习路线图请收藏!

本文结合530名开发者的经验,为AI初学者提供从零基础到项目实战的完整学习路线。核心内容包括:Python编程、数学基础、机器学习、深度学习框架(PyTorch)、科学计算库(NumPy)等关键技能,并避开了常…...

负载型聚丙烯酰胺PAM水凝胶:构筑多功能智能材料的新范式

名称:负载型聚丙烯酰胺(PAM)水凝胶 负载型聚丙烯酰胺(PAM)水凝胶作为一种先进的功能高分子材料,正以其独特的网络结构和可调控的物理化学性质,在环境治理、生物医药及智能传感等领域展现出巨大的…...