# 机器学习、深度学习必备数学基础之线性代数篇

### 一. 标量

Python 中内置了少数几种标量类型，如 int，float，complex，bytes，Unicode。而在 Python 库 NumPy 中，有 24 种新的基本数据类型来描述不同类型的标量。

import numpy as np
print(np.isscalar(3.3))	        # True
print(np.isscalar([3.3]))	# False


### 二. 向量

$X=\begin{bmatrix} x_{1}\\ x_{2}\\ x_{3}\\ ...\\ x_{n}\\ \end{bmatrix}$

x=[1,2,3]
y=[4,5,6]
print(type(x))  # <class 'list'>
print(x+y)      # [1, 2, 3, 4, 5, 6]

print(z)        # [5 7 9]
print(type(z))  # <class 'numpy.ndarray'>

mul=np.cross(x,y)
print(mul)      # [-3  6 -3]

The cross product of a and b in :math:R^3 is a vector perpendicular to both a and b.  If a and b  are arrays of vectors, the vectors are defined by the last axis of a and b by default, and these axes
can have dimensions 2 or 3.  Where the dimension of either a or b is 2, the third component of the input  vector is assumed to be zero and the cross product calculated accordingly.  In cases where both input vectors
have dimension 2, the z-component of the cross product is returned.

### 三. 矩阵

$X=\begin{bmatrix} x_{11} & x_{12} & ... & x_{1n} \\ x_{21} & x_{22} & ... & x_{2n} \\ x_{31} & x_{32} & ... & x_{3n} \\ ... & ... & ... & ... \\ x_{m1} & x_{m2} & ... & x_{mn} \end{bmatrix}$

$X= \left [ x_{ij} \right ]_{mn}$

## 1. 创建矩阵
x = np.matrix([[1,2],[2,3],[3,4]])
print(x)
# [[1 2]
#  [2 3]
#  [3 4]]

print(x.shape)    #(3, 2)   # 矩阵维度，3行2列

## 2. 矩阵之间加法
y = np.matrix([[1, 2], [3, 4]])
sum = y.sum()
print(sum)  # 10    # 计算矩阵中所有元素之和，返回标量

sum2 = np.add([1, 2, 3], [4, 5, 6])
print(sum2)  # [5 7 9]  # 两个矩阵对应位置相加，返回矩阵

## 3. 矩阵之间的乘法
y1 = np.matrix([[1, 2], [3, 4]])
y2 = np.matrix([[5, 6], [7, 8]])
print(np.dot(y1, y2))
# [[19 22]
#  [43 50]]

print(y1 * y2)  # 对于数组 np.array()：对应元素相乘；对于矩阵 np.matrix()：计算矩阵乘积
# 数组：
# [[ 5 12]
#  [21 32]]
# 矩阵：
# [[19 22]
#  [43 50]]

print(np.multiply(y1, y2))  # 对应元素相乘
# [[ 5 12]
#  [21 32]]

## 4. 矩阵与标量的加法
sum3 = np.matrix([[1, 2], [3, 4]])
print(sum3 + 1)    # 对应位置相加
# [[2 3]
#  [4 5]]

## 5. 矩阵与标量的乘法
sum4 = np.matrix([[1, 2], [3, 4]])
print(sum4 * 2)    # 对应位置相乘
# [[2 4]
#  [6 8]]

## 6. 矩阵转置
a = np.array([[1,2],[3,4]])
print(a)
# [[1 2]
#  [3 4]]

print(a.transpose())
# [[1 3]
#  [2 4]]

### 四、张量

0维：一个标量    width    零阶张量
1维：一个向量    [width]     一阶张量
2维：一个矩阵    [width, height]     二阶张量
3维：一张图片    [width, height, color_data]     三阶张量，三个维度分别是图片的高度、宽度和色彩数据
4维：一段视频    [width, height, color_data, frames]     四阶张量，四个维度分别是图片的高度、宽度、色彩数据、帧数

### 五、范数

1. LP 范数：

LP 范数不是一个范数，而是一组范数的集合，这一点与闵可夫斯基距离的定义一样。

2. L0 范数：

3. L1 范数：

L0 范数与 L1 范数都可以实现稀疏，而 L1 范数比 L0 具有更好的优化求解特性而被广泛使用。 L0 范数本身是特征选择的最直接的方案，但因其很难优化求解，因此实际应用中使用 L1 来得到 L0 的最优凸近似。

4. L2 范数：

$||X||_{2} = \sqrt{2^{2}+3^{2}+6^{2}} = \sqrt{4+9+36} = \sqrt{49} = 7$

L2 范数的本质是指向量各元素的平方和然后求平方根。如果我们让 L2 范数的规则项最小，可以使得每个元素都很小，都接近于0，但与 L1 范数不同，它不会让它等于0，而是接近于0。而越小的参数说明模型越简单（因为限制了参数很小，实际上就限制了多项式某些分量的占比很小、影响很小，这样就相当于减少了参数的个数），越简单的模型则越不容易产生过拟合现象。所以，在机器学习中，L2 范数被广泛的应用在解决过拟问题。

1. 防止过拟合，提升模型的泛化能力。

2. 优化求解变得稳定和快速。

5. L∞ 范数

Av = λv

### 参考链接

https://www.cnblogs.com/abella/p/10142935.html

https://www.cnblogs.com/lzhu/p/10405091.html

http://www.cnbruce.com/blog/showlog.asp?log_id=1423

https://blog.csdn.net/zouxy09/article/details/24971995/

https://www.cnblogs.com/Kalafinaian/p/11143995.html

https://blog.csdn.net/m0_37673307/article/details/82317696

11-09

01-14 2万+

01-11 1万+

05-30 67

07-26 46

11-06 8818

11-04 2273

05-12 6348

08-18 4052

05-27 3109

#### 特征向量的几何意义

©️2020 CSDN 皮肤主题: 精致技术 设计师: CSDN官方博客

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