机器学习之数学基础-线性代数python案例(一)

线性代作为数学的一个分支,主要研究向量空间以及在向量空间之间的线性变换。
机器学习在很大程度上依赖于线性代数,因此需要了解向量和矩阵,以及它们的特性和运作机制

向量

定义

向量是由大小和方向定义的量。例如,火箭的速度是一个三维向量:它的大小是火箭的速度,它的方向是向上。向量可以由称为标量(scalar)的数字数组表示。每个标量对应于关于每个维度的向量的大小。
例如,假设火箭以一个微小的角度上升:它的垂直速度为5000米/秒,并且以10米/秒的速度朝向东方的速度很小,而朝向北方的速度则为50米/秒。秒。火箭的速度可以用以下向量表示:

velocity = ( 10 50 5000 ) = \begin{pmatrix} 10 \\ 50 \\ 5000 \\ \end{pmatrix} =10505000

注意:按照惯例,向量通常以列的形式呈现。此外,向量名称通常是小写的,以区别于矩阵(我们将在下面讨论)和粗体(如果可能),以区别于简单的标量值。
N个数字的列表也可以表示N维空间中的点的坐标,因此可以将向量表示为简单点而不是箭头。具有1个元素的向量可以表示为轴上的箭头或点,具有2个元素的向量是平面上的箭头或点,具有3个元素的向量是空间中的箭头或点,以及具有N个元素的向量是N维空间中的箭头或点…当然,这很难以想象。

目的

向量在机器学习中有许多用途,最值得注意的是表示观察和预测。例如,假设我们建立了一个机器学习系统,根据我们对它们的了解将视频分为3类(好的,垃圾邮件,钓鱼链接)。对于每个视频,我们会有一个向量来表示,例如:

video = ( 10.5 5.2 3.25 7.0 ) = \begin{pmatrix} 10.5 \\ 5.2 \\ 3.25 \\ 7.0 \end{pmatrix} =10.55.23.257.0

这个矢量可以代表一个持续10.5分钟的视频,但只有5.2%的观众观看超过一分钟,它平均每天获得3.25次观看,并被标记为垃圾邮件的7倍。如您所见,每个轴可能具有不同的含义。

基于此向量,我们的机器学习系统可以预测它是垃圾视频的概率为80%,点击率为18%,2%为好视频。这可以表示为以下向量:

class_probabilities = ( 0.80 0.18 0.02 ) = \begin{pmatrix} 0.80 \\ 0.18 \\ 0.02 \end{pmatrix} =0.800.180.02

python - 向量

在python中,向量可以有很多表示方法,最简单的就是一个数组:

[10.5, 5.2, 3.25, 7.0]
[10.5, 5.2, 3.25, 7.0]

由于我们计划进行大量的科学计算,因此使用NumPy的ndarray要好得多,它为向量提供了许多方便和优化的基本数学运算实现。例如:

import numpy as np
video = np.array([10.5, 5.2, 3.25, 7.0])
video
array([10.5 ,  5.2 ,  3.25,  7.  ])

向量的大小

video.size
4

向量 v \textbf{v} v 的第 i t h i^{th} ith 元素是 v i \textbf{v}_i vi.

video[2]  # 第三个元素
3.25

向量画图

先导入matpltlib

%matplotlib inline
import matplotlib.pyplot as plt

二维向量

先画两个简单的二维向量

u = np.array([2, 5])
v = np.array([3, 1])
x_coords, y_coords = zip(u, v)
plt.scatter(x_coords, y_coords, color=["r","b"])
plt.axis([0, 9, 0, 6])
plt.grid()
plt.show()

在这里插入图片描述

向量也可以表示为箭头,写一个函数来绘制箭头:

def plot_vector2d(vector2d, origin=[0, 0], **options):
    return plt.arrow(origin[0], origin[1], vector2d[0], vector2d[1],
              head_width=0.2, head_length=0.3, length_includes_head=True,
              **options)

把向量 u 和向量 v 画成箭头:

plot_vector2d(u, color="r")
plot_vector2d(v, color="b")
plt.axis([0, 9, 0, 6])
plt.grid()
plt.show()

在这里插入图片描述

3D

来个3D图:

a = np.array([1, 2, 8])
b = np.array([5, 6, 3])

用 matplotlib的 Axes3D 画图:

from mpl_toolkits.mplot3d import Axes3D

subplot3d = plt.subplot(111, projection='3d')
x_coords, y_coords, z_coords = zip(a,b)
subplot3d.scatter(x_coords, y_coords, z_coords)
subplot3d.set_zlim3d([0, 9])
plt.show()

在这里插入图片描述

看上去很难判断两天在空间中的具体位置,为了方便,画一个垂直线:

def plot_vectors3d(ax, vectors3d, z0, **options):
    for v in vectors3d:
        x, y, z = v
        ax.plot([x,x], [y,y], [z0, z], color="gray", linestyle='dotted', marker=".")
    x_coords, y_coords, z_coords = zip(*vectors3d)
    ax.scatter(x_coords, y_coords, z_coords, **options)

subplot3d = plt.subplot(111, projection='3d')
subplot3d.set_zlim([0, 9])
plot_vectors3d(subplot3d, [a,b], 0, color=("r","b"))
plt.show()

在这里插入图片描述
下一篇介绍向量的属性和基本运算。

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值