科学算法库的安装(linux)
- 1.安装Numpy
sudo apt-get install python-numpy
- 2.安装Scipy
sudo apt-get install python-numpy
- 3.Matplotlib
sudo apt-get install tk-dev sudo apt-get install python-gtk2-dev sudo apt-get install python-pyside
- 4.spyder GUI环境
sudo apt-get install spyder
上述安装完毕后,可以利用
1
2
3
4
5
6
7
8
9
10
11#! /usr/bin/python
import numpy as np
import matplotlib.pyplot as plt
x = np.linspace(0,4*3.1415,100)
y = np.sin(x)
plt.figure(figsize=(8,4))
plt.plot(x,y,label="$sin(x)$",color="red",linewidth=2)
plt.legend()
plt.show()进行测试。若生成正弦曲线窗口,则配置完成.
NumPy的基本操作
Numpy 的导入
import numpy as np
这种写法在使用相关函数的时候需要写明是哪个包的,如:
myZero = np.zeros([3,5])
还可以导入包全局使用
from numpy import *
NumPy 的基本操作
创建全0矩阵和全1矩阵
1
2myZero = zeros([n,m])
myOne = ones([n,m])生成随机矩阵
1
myRand = random.rand(n,m) # n 行 m 列的 0~1 之间的随机数矩阵
生成单位矩阵
1
myEye = eye(n) # n * n 的单位阵
将一个数组转化为一个矩阵
1
myMatrix = mat([[1,2,3],[4,5,6],[7,8,9]])
矩阵所有元素求和
1
S = sum(myMatrix)
矩阵各元素的乘积
1
matrix = multiply(matrix1, matrix2) # matrix1 和 matrix2 对应元素相乘的矩阵
求矩阵的 n 次幂
1
matrix = power(myMatrix, n) #生成一个矩阵,矩阵内部的元素是原矩阵对应元素的n次幂
矩阵的转置
1
2print matrix.T #打印转置后的矩阵,不改变原矩阵
matrix.transpose() #同上矩阵的其他操作
1
2
3
4
5
6
7[m, n] = shape(matrix) # m, n为矩阵的行列数
myscl1 = matrix[0] # 矩阵的切片操作,取第一行
myscl2 = matrix.T[0] # 矩阵的切片操作,取第一列
mycpmat = matrix.copy() # 矩阵的复制
print matrix1 < matrix2 # 矩阵的比较,会逐一比较对应的每一个元素,并输出一个仅包含True, False 的相同大小的矩阵
dot(m1,m2) #计算m1,m2的点积
norm(v) #计算向量V的范数
Linalg线性代数库
矩阵的行列式
1
print linalg.det(matrix)
矩阵的逆
1
print linalg.inv(matrix)
矩阵的对称
1
print matrix * matrix.T
矩阵的秩
1
print linalg.matrix_rank(A)
可逆矩阵求解
1
print linalg.solve(A,b.T) # 如果b已经是一列的就不用转置了
各类距离的python实现
各类距离会在后面说明
Euclidean Distance
1
2
3vector1 = mat([1,2,3])
vector2 = mat([4,5,6])
print sqrt((vector1-vector2)*(vector1-vector2).T)Manhattan Distance
1
2
3vector1 = mat([1,2,3])
vector2 = mat([4,5,6])
print sum(abs(vector1-vector2))Chebyshev Distance
1
2
3vector1 = mat([1,2,3])
vector2 = mat([4,5,6])
print abs(vector1-vector2).max()Cosine
1
2cosV12 = dot(vector1,vector2)/(linalg.norm(vector1)*linalg.norm(vector2))
print cosV12Hamming Distance
1
2
3matV = mat([[1,1,0,1,0,1,0,0,1], [0,1,1,0,0,0,1,1,1]])
smstr = nonzero(matV[0] - matV[1]);
print shape(smstr[0])[1]Jaccard Distance
1
2
3import scipy.spatial.distance as dist
matV = mat([[1,1,0,1,0,1,0,0,1], [0,1,1,0,0,0,1,1,1]])
print dist.pdist(matV, 'jaccard')
机器学习的数学基础
- 范数
向量的范数可以简单、形象的理解为向量的长度,或者向量到坐标系原点的距离,或者相应空间内的两点之间的距离
向量的范数定义 : 向量的范数是一个函数 $ \parallel x\parallel $ ,满足非负性 $ \parallel x\parallel > 0 $ , 齐次性 $ \parallel cx\parallel = \mid c\mid\parallel x\parallel $ ,三角不等式 $ \parallel x+y\parallel \leq\parallel x\parallel +\parallel y\parallel $ 。
L1范数: $\parallel x\parallel $为 $ x $向量各个元素绝对值之和。
L2范数: $\parallel x\parallel $为 $ x $向量各个元素平方和的开方,又称 Euclidean 范数或者 Frobenius 范数。
Lp范数: $\parallel x\parallel $为 $ x $向量各个元素绝对值 $ p $次方和的 $ 1\over p $ 次方
L $\infty $范数: $\parallel x\parallel $为 $ x $向量各个元素绝对值最大的那个元素,如下:$$ \lim_{k\to\infty}\left( \sum_{i=1}^n\mid p_i-q_i\mid ^k\right)^\frac{1}{k}
$$ - Minkowski Distance (闵可夫斯基距离)
严格意义上讲,Minkowski Distance 不是一种距离,而是一组距离的定义。
两个n维向量 $ A(x_{11},x_{12},\cdots,x_{1n}) $ 与 $ B(x_{21},x_{22},\cdots,x_{2n}) $ 间的Minkowski距离定义为:
$$ d_{12}=\sqrt[p]{\sum_{k=1}^n(x_{1k}-x_{2k})^p} $$
其中p是一个变参数。- 当 p=1 时,就是 Manhattan Distance (曼哈顿距离)
- 当 p=2 时,就是 Euclidean Distance (欧氏距离)
- 当 $ p\to\infty $ 时,就是 Chebyshev Distance (切比雪夫距离)
- Euclideam Distance
欧氏距离(L2范数)是最易于理解的一种距离计算方法,源于欧氏空间的两点距离公式
两个n维向量 $ A(x_{11},x_{12},\cdots,x_{1n}) $ 与 $ B(x_{21},x_{22},\cdots,x_{2n}) $ 之间的欧氏距离:
$$ d_{12}=\sqrt{\sum_{k=1}^n(x_{1k}-x_{2k})^2} $$
表示为向量运算的形式:
$$ d_{12}=\sqrt{(A - B)(A - B)^T} $$ - Manhattan Distance
曼哈顿距离(L1范数)可以理解为计算网格中两点路径的距离
二维平面两点 $ A(x_1,y_1) $ 和 $ B(x_2,y_2) $ 间的曼哈顿距离:
$$ d_{12}=\mid x_1-x_2\mid +\mid y_1-y_2\mid $$
两个n维向量 $ A(x_{11},x_{12},\cdots,x_{1n}) $ 与 $ B(x_{21},x_{22},\cdots,x_{2n}) $ 之间的曼哈顿距离:
$$ d_{12}=\sum_{k=1}^n\mid x_{1k}-x_{2k}\mid $$ - Chebyshev Distance
切比雪夫距离类似与棋盘上国王从一点到另一点移动的最少次数,即 $ max(\mid x_1-x_2\mid,\mid y_1-y_2\mid) $
两个n维向量 $ A(x_{11},x_{12},\cdots,x_{1n}) $ 与 $ B(x_{21},x_{22},\cdots,x_{2n}) $ 之间的切比雪夫距离:
$$ d_{12}=max_i(\mid x_{1i}-x_{2i}\mid) $$
该公式的另一个等价公式:
$$ d_{12}=\lim_{k\to\infty}\left(\sum_{i=1}^n\mid x_{1i}-x_{2i}\mid^k\right)^\frac{1}{k} $$ - Cosine
夹角余弦可以用来两个向量方向的差异,机器学习中借用这一概念来衡量样本之间的差异
两个n维向量 $ A(x_{11},x_{12},\cdots,x_{1n}) $ 与 $ B(x_{21},x_{22},\cdots,x_{2n}) $ 之间的夹角余弦:
$$ \cos\theta=\frac{AB}{\mid A\mid\mid B\mid} $$
即:
$$ \cos\theta=\frac{\sum_{k=1}^nx_{1k}x_{2k}}{\sqrt{\sum_{k=1}^nx_{1k}^2}\sqrt{\sum_{k=1}^nx_{2k}^2}} $$ - Hamming Distance
汉明距离的定义:两个等长字符串s1,s2,将其中一个变成另一个需要的最小替换次数。
应用:信息编码(为了增强容错性,应使得编码间的最小汉明距离尽可能大) - Jaccard Similarity Coefficient(杰卡德相似系数)
杰卡德相似系数:两个集合A,B的交集元素在并集元素中所占的比例,用符号 $ J(A,B) $ 表示
$$ J(A,B)=\frac{\mid A\cap B\mid}{\mid A\cup B\mid} $$
杰卡德距:与杰卡德相似系数相反的概念:
$$ J_\delta(A,B)=1-J(A,B)=\frac{\mid A\cup B\mid-\mid A\cap B\mid}{\mid A\cup B\mid} $$ 特征间的相关性
相关系数与相关距离
相关系数:
$$ \rho_{XY}=\frac{Cov(X,Y)}{\sqrt{D(X)}\sqrt{D(Y)}}=\frac{E((X-EX)(Y-EY))}{\sqrt{D(X)}\sqrt{D(Y)}} $$
相关距离:
$$ D_{XY}=1-\rho_{XY} $$
python实现:1
2
3
4
5
6
7
8
9
10featuremat = mat(...) # 初始化矩阵
# 计算均值
mv1 = mean(featuremat[0]) # 计算第一列的均值
mv2 = mean(featuremat[1]) # 计算第二列的均值
#计算两列的标准差
dv1 = std(featuremat[0])
dv2 = std(featuremat[1])
corref = mean(multiply(featuremat[0]-mv1,featuremat[1]-mv2))/(dv1*dv2)
print corref #输出相关系数
print corrcoef(featuremat) #输出相关系数矩阵马氏距离