均匀分布转变为正态分布
import numpy as np
import matplotlib.pyplot as plt
import math
x=np.random.rand(1000) ##rand是均匀分布,randn是正态分布
y=np.random.rand(1000)
an1=plt.subplot(1,2,1)
an1.scatter(x,y)
x1=np.cos(2*np.pi*x)*np.sqrt(-2*np.log(y))
y1=np.sin(2*np.pi*x)*np.sqrt(-2*np.log(y))
ans2=plt.subplot(1,2,2)
ans2.scatter(x1,y1)
plt.show()
即Box-Muller变换
绘制 f ( x ) = 1 / ( 1 + e − x ) f(x)=1/(1+e^{-x}) f(x)=1/(1+e−x)函数图像
import numpy as np
import matplotlib.pyplot as plt
import math
def fun(x):
return 1/(1+np.power(np.e,-1*x))
x=np.linspace(-10,10)
y=fun(x)
plt.plot(x,y)
plt.show()
scatter函数是散点图,plot函数是连线
使用一些数学函数时,要调用numpy库里面的,不能调用math库里的,报错only size-1 arrays can be converted to Python scalars
因为numpy是数组
即Sigmoid函数,他可以很好的表示机器学习中的预测问题
范数
L1 范数||x||:为x向量各个元素绝对值之和;
L2 范数||x|| 2 _2 2:为x向量各个元素平方和的开方。
特征分解
许多数学对象可以通过将它们分解成多个组成部分。特征分解是使用最广的矩阵分解之一,即将矩阵分解成一组特征向量和特征值。
方阵A的特征向量是指与A相乘后相当于对该向量进行缩放的非零向量ν:
A v = λ v Av=\lambda v Av=λv
标量λ被称为这个特征向量对应的特征值。
使用特征分解去分析矩阵A时,得到特征向量构成的矩阵V和特征值构成的向量λ,我们可以重新将A写作:
A v = V d i a g ( λ ) V − 1 Av=Vdiag(\lambda)V^{-1} Av=Vdiag(λ)V−1
奇异值分解
矩阵的特征分解是有前提条件的,那就是只有对可对角化的矩阵才可以进行特征分解。但实际中很多矩阵往往不满足这一条件,甚至很多矩阵都不是方阵,就是说连矩阵行和列的数目都不相等。这时候怎么办呢?人们将矩阵的特征分解进行推广,得到了一种叫作“矩阵的奇异值分解”的方法,简称SVD。通过奇异分解,我们会得到一些类似于特征分解的信息。
它的具体做法是将一个普通矩阵分解为奇异向量和奇异值。比如将矩阵A分解成三个矩阵的乘积:
A = U D V T A=UDV^{T} A=UDVT
假设A是一个m×n矩阵,那么U是一个m×m矩阵,D是一个m×n矩阵,V是一个n×n矩阵。
这些矩阵每一个都拥有特殊的结构,其中U和V都是正交矩阵,D是对角矩阵(注意,D不一定是方阵)。对角矩阵D对角线上的元素被称为矩阵A的奇异值。矩阵U的列向量被称为左奇异向量,矩阵V 的列向量被称右奇异向量。
SVD最有用的一个性质可能是拓展矩阵求逆到非方矩阵上。另外,SVD可用于推荐系统中。
在机器学习里,我们的运算一般都是基于向量的,一条用户具有100个特征,那么他对应的就是一个100维的向量,通过计算两个用户对应向量之间的距离值大小,有时候能反映出这两个用户的相似程度。这在后面的KNN算法和K-means算法中很明显。
1、曼哈顿距离
曼哈顿距离也称为城市街区距离,数学定义如下:
d 12 = ∑ k = 1 n ∣ x 1 k − x 2 k ∣ d_{12}=\sum_{k=1}^{n}|x_{1k}-x_{2k}| d12=∑k=1n∣x1k−x2k∣
2、欧氏距离
欧氏距离其实就是L2范数
3、切比雪夫距离
切比雪夫距离就是Lϖ,即无穷范数,数学表达式如下:
d 12 = m a x ( ∣ x 1 k − x 2 k ∣ ) d_{12}=max(|x_{1k}-x_{2k}|) d12=max(∣x1k−x2k∣)
参考资料:https://zhuanlan.zhihu.com/p/25197792