科学算法库的安装(linux)
- 1.安装Numpysudo apt-get install python-numpy
- 2.安装Scipysudo apt-get install python-numpy
- 3.Matplotlibsudo 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 
 2- myZero = 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 
 2- print 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
 3- vector1 = mat([1,2,3]) 
 vector2 = mat([4,5,6])
 print sqrt((vector1-vector2)*(vector1-vector2).T)
- Manhattan Distance - 1 
 2
 3- vector1 = mat([1,2,3]) 
 vector2 = mat([4,5,6])
 print sum(abs(vector1-vector2))
- Chebyshev Distance - 1 
 2
 3- vector1 = mat([1,2,3]) 
 vector2 = mat([4,5,6])
 print abs(vector1-vector2).max()
- Cosine - 1 
 2- cosV12 = dot(vector1,vector2)/(linalg.norm(vector1)*linalg.norm(vector2)) 
 print cosV12
- Hamming Distance - 1 
 2
 3- matV = 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
 3- import 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
 10- featuremat = 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) #输出相关系数矩阵
- 马氏距离