IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 人工智能 -> 机器学习的向量 -> 正文阅读

[人工智能]机器学习的向量

向量(Vector)在机器学习中扮演着非常重要的角色。

向量的基础概念

认识标量

单纯的一个数字,只有大小没有方向,可以用实数表达,在数学领域称标量(Scalar)。

认识向量

向量是一个同时具有大小与方向的对象。

向量表示法

以箭头表示 :向量可以使用含箭头的线条表示,线条长度代表向量大小,箭头表示向量方向。

大小与方向均相同的向量,不过位置不同,在数学领域不同位置没有关系,这是相同的向量,又称等向量(Identical Vector)。

文字表示:在数学领域有时候可以用英文字母上方加上向右箭头代表向量,例如:向量\underset{a}{\rightarrow}

含起点与终点:有时候也可以用起点与终点的英文字母代表向量,英文字母上方须加上向右箭头:\underset{AB}{\rightarrow}

位置向量:坐标原点(0,0)的向量我们称之为位置向量。

\underset{AB}{\rightarrow}=(1,2)? ? ? ? 或????????\underset{AB}{\rightarrow}=(1 2)? ? ? ? 或????????\underset{AB}{\rightarrow}=\binom{1}{2}

机器学习常见的向量表示法:

机器学习常常需要处理n维空间的数学,使用含起点与终点的英文字母代表向量太复杂,为了简化常常只用一个英文字母表示向量,不过字母会用粗体和蓝色显示。

向量的分量:在二维空间的坐标轴概念中,x和y坐标就是此向量的分量。

n维空间向量:

机器学习的n维空间向量表示法如下:

{\color{Blue} a}=(a_1\: a_2\: ...\, a_n)

{\color{Blue} b}=(b_1\; b_2\; ...\; b_n)

{\color{Blue} c}=(c_1\; c_2\; ...\; c_n)

零向量:向量的每一个元素皆是0,称零向量(),可以用下列方式表示:

0=(0\, 0\, ... \, 0)或是\underset{0}{\rightarrow}

计算向量分量

计算\underset{AB}{\rightarrow}的分量,假设点A坐标是(x1,y1),点B坐标是(x2,y2),可以使用下列方法:

(x2y2)-(x1y1)

运算方式如下:

(4 4)-(3 2)=(1 2)

Python操作:

>>> import numpy as np
>>> a=np.array([3,2])
>>> b=np.array([4,4])
>>> b-a
array([1, 2])
>>>

相对位置的向量

A=(1 3)

B=(2 1)

C=(4 4)

对于A点而言,从A到B的向量是(2 1)-(1 3)=(1-2);

对于A点而言,从A到C的向量是(4 4)-(1 3)=(3-1)。

对于B点而言,从B到C的向量是(4 4)-(2 1)=(2 3)。

不同路径的向量运算

\underset{AB}{\rightarrow}+\underset{BC}{\rightarrow}=\underset{AC}{\rightarrow}

(1-2)+(2 3)=(3 1)

Python操作:

>>> import numpy as np
>>> ab=np.array([1,-2])
>>> bc=np.array([2,3])
>>> ab+bc
array([3, 1])
>>>

向量加法的规则

a=(a_1\;a_2\;\cdots \;a_n)

b=(b_1\;b_2\;\cdots \;b_n)

c=(c_1\;c_2\;\cdots \;c_n)

相同维度的向量可以相加

a+b=(a_1+b_1\;a_2+b_2 \; \cdots \;a_n+b_n)

不同维度的向量无法相加。

向量加法符合交换律概念

交换律(Commutative Property)是常用的数学名词,意义是改变顺序不改变结果。

a+b=b+a

向量加法符合结合律概念

结合律(Associative Laws)是常用的数学名词,意义是一个含有2个以上可以结合的数字的公式,数字的位置没有变,结果不会改变。

(a+b)+c=a+(b+c)

向量与零向量相加结果不会改变

有一个向量相加公式:a+z=a

则称z是零向量,此z又可以标记为0。?

向量与反向量相加结果是零向量

反向量(Opposite Vector)是指大小相等,但是方向相反的向量。假设下列公式成立,则a与b互为反向量。

a+b=0

有时候也可以用-a当作a的反向量。

>>> import numpy as np
>>> a=np.array([3,2])
>>> -a
array([-3, -2])
>>>

向量与标题相乘

一个向量a与标量c相乘,相当于将c乘以每个向量元素,如下所示:

c*a=(ca_1\;ca_2\;\cdots \;ca_n)

>>> import numpy as np
>>> a=np.array([3,2])
>>> 3*a
array([9, 6])
>>>

向量除以标量

将向量乘以标量的倒数。

向量相加再乘以标量或是标量相加再乘以向量

(x+y)*a=xa+ya

x(a+b)=xa+xb

标题与向量相乘也符合结合律

(xy)a=x(ya)

向量乘以1

可以得到原来的向量。

a*1=a

向量乘以-1

可以得到原来向量的反向量。

a*(-1)=-a

>>> import numpy as np
>>> a=np.array([3,2])
>>> a*-1
array([-3, -2])
>>>

向量乘以0

可以得到零向量。

a*0=0

向量相减

如果向量相减,相当于加上反向量。

a-b=a+(-b)

>>> import numpy as np
>>> a=np.array([3,2])
>>> b=np.array([2,1])
>>> a-b
array([1, 1])
>>>

向量的长度

家的坐标:(0,0)

公园的坐标:(1,3)

商店的坐标:(2,1)

公司的坐标:(4,4)

从家到公园的距离=\sqrt{1^2+3^2}=\sqrt{10}

从商店到公园的距离=\sqrt{(4-2)^2+(4-1)^2}=\sqrt{2^2+3^2}=\sqrt{13}

假设有一个向量a,此向量长度的表示法如:\mid a\mid?或是\parallel a \parallel

使用numpy的linalg模块的norm()方法处理。

求家到公园的距离的实例:

>>> import numpy as np
>>> park=np.array([1,3])
>>> norm_park=np.linalg.norm(park)
>>> norm_park
3.1622776601683795
>>>

求商店到公司的距离的实例:

>>> import numpy as np
>>> store=np.array([2,1])
>>> office=np.array([4,4])
>>> store_office=office-store
>>> norm_store_office=np.linalg.norm(store_office)
>>> norm_store_office
3.605551275463989
>>>

向量方程式

所谓向量方程式是使用向量表示图形的一个方程式。

直线方程式

两个点可以构成一条线,对于向量而言,构成一条线需要向量方向与一个点。

A点和B点的坐标分别是(-1,2)和(1,4)。

\underset{AB}{\rightarrow}=k=\begin{pmatrix} 1-(-1)\\ 4-2 \end{pmatrix}=\begin{pmatrix} 2\\ 2 \end{pmatrix}

\underset{a}{\rightarrow}=\begin{pmatrix} -1\\ 2 \end{pmatrix}

b=a+pk? ? ? ? #p是常数

\begin{pmatrix} x\\ y \end{pmatrix}=\begin{pmatrix} -1\\ 2 \end{pmatrix}+p\begin{pmatrix} 2\\ 2 \end{pmatrix}

x=-1+2p

y=2+2p

x-y=-3

y=x+3

斜率是1,y截距是3。

Python实践连接两点的方程式

计算a和b的值。

from sympy import Symbol, solve

a = Symbol('a')
b = Symbol('b')
eq1 = -a + b -2
eq2 = a + b - 4
ans = solve((eq1, eq2))
print('a = {}'.format(ans[a]))
print('b = {}'.format(ans[b]))

运行结果:

[Running] python -u "c:\Users\a-xiaobodou\OneDrive - Microsoft\Projects\tempCodeRunnerFile.py"
a = 1
b = 3

[Done] exited with code=0 in 3.895 seconds

使用向量建立回归直线的理由

省略

向量内积

协同工作的概念

省略

计算B所帮的忙

省略

向量内积的定义

向量内积的英文是inner product,数学表示方法:a\cdot b

念作a dot b,向量内积的计算结果是标量。

几何角度向量内积的定义是两个向量的大小与它们夹角的余弦值的乘积,概念:\left \| a \right \|\left \| b \right \| cos\theta

向量a的长度:\left \| a \right \|

向量b投影到向量a的长度:\left \| b \right \| cos\theta

向量内积的公式:a\cdot b=\left \| a \right \|\left \| b \right \| cos\theta

交换律:a\cdot b=b\cdot a

分配律:a\cdot (b+c)=a\cdot b+a\cdot c

内积的代码定义是,对两个等长的向量,每组对应的元素求积,然后再求和。

a=(a_1\;a_2\;\cdots \;a_n)

b=(b_1\;b_2\;\cdots \;b_n)

向量乘积定义:a\cdot b=\sum_{i=1}^{n}a_ib_i=a_1b_1+a_2b_2+\cdots +a_nb_n

计算向量内积使用numpy模块的dot()方法:

>>> import numpy as np
>>> a=np.array([1,3])
>>> b=np.array([4,2])
>>> np.dot(a,b)
10
>>>

?

?

两条直接的夹角

cos\theta =\frac{a_1b_1+a_2b_2}{\left \| a \right \|\left \| b \right \|}

假设坐标平面有A、B、C、D四个点

A的坐标(1,1)

B的坐标(5,5)

C的坐标(1,5)

D的坐标(5,1)

计算和这两个向量的夹角。

import numpy as np
import math

a = np.array([1, 1])
b = np.array([5, 5])
c = np.array([1, 5])
d = np.array([5, 1])

ab = b - a                              # 向量ab
cd = d - c                              # 向量bc

norm_a = np.linalg.norm(ab)             # 计算向量大小
norm_b = np.linalg.norm(cd)             # 计算向量大小
                    
dot_ab = np.dot(ab, cd)                 # 计算向量内积

cos_angle = dot_ab / (norm_a * norm_b)  # 计算cos值
rad = math.acos(cos_angle)              # acos转成弧度
deg = math.degrees(rad)                 # 转成角度
print('角度是 = {}'.format(deg))

运行结果:

[Running] python -u "c:\Users\a-xiaobodou\OneDrive - Microsoft\Projects\tempCodeRunnerFile.py"
角度是 = 90.0

[Done] exited with code=0 in 4.425 seconds

向量内积的性质

向量内积是正值,两向量的夹角小于90度。

向量内积是0,两向量的夹角等于90度。

向量内积是负值,两向量的夹角大于90度。

夹角常应用在3D游戏设计中,假设玩家观测点在超过90度的角度才看得到角色动画表情,就需要绘制;当角度小于90度时,玩家看不到角色动画表情,表示可以不用绘制。

余弦相似度

余弦相似度(cosine similarity)=cos\theta =\frac{a_1b_1+a_2b_2}{\left \| a \right \|\left \| b \right \|}

判断下列句子的相似度。

(1)机器与机械。

(2)学习机器码。

(3)机器人学习。

下表是每个单字出现的次数。

编号句子
1机器与机械21110000
2学习机器码11001110
3机器人学习11001101

可以建立下列向量:

a=(2 1 1 1 0 0 0 0)

b=(1 1 0 0 1 1 1 0)

c=(1 1 0 0 1 1 0 1)

代码如下:

import numpy as np

def cosine_similarity(va, vb):
    norm_a = np.linalg.norm(va)                 # 计算向量大小
    norm_b = np.linalg.norm(vb)                 # 计算向量大小
    dot_ab = np.dot(va, vb)                     # 计算向量内积
    return (dot_ab / (norm_a * norm_b))         # 回传相似度

a = np.array([2, 1, 1, 1, 0, 0, 0, 0])
b = np.array([1, 1, 0, 0, 1, 1, 1, 0])
c = np.array([1, 1, 0, 0, 1, 1, 0, 1])
print('a 和 b 相似度 = {0:5.3f}'.format(cosine_similarity(a, b)))
print('a 和 c 相似度 = {0:5.3f}'.format(cosine_similarity(a, c)))
print('b 和 c 相似度 = {0:5.3f}'.format(cosine_similarity(b, c)))

运行结果如下:

[Running] python -u "c:\Users\a-xiaobodou\OneDrive - Microsoft\Projects\tempCodeRunnerFile.py"
a 和 b 相似度 = 0.507
a 和 c 相似度 = 0.507
b 和 c 相似度 = 0.800

[Done] exited with code=0 in 3.242 seconds

皮尔逊相关系数

皮尔逊相关系数定义

网络购物问卷调查案例解说

向量内积计算系数

向量外积

法线向量

计算面积

  人工智能 最新文章
2022吴恩达机器学习课程——第二课(神经网
第十五章 规则学习
FixMatch: Simplifying Semi-Supervised Le
数据挖掘Java——Kmeans算法的实现
大脑皮层的分割方法
【翻译】GPT-3是如何工作的
论文笔记:TEACHTEXT: CrossModal Generaliz
python从零学(六)
详解Python 3.x 导入(import)
【答读者问27】backtrader不支持最新版本的
上一篇文章      下一篇文章      查看所有文章
加:2022-10-08 20:42:07  更:2022-10-08 20:47:14 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/25 20:34:46-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码