11. numpy範數計算
監督機器學習問題規則化引數的同時最小化誤差,最小化誤差是為了讓我們的模型擬合我們的訓練資料,而規則化引數是防止我們的模型過分擬合我們的訓練資料。但訓練誤差小並不是我們的最終目標,我們的目標是希望模型的測試誤差小,也就是能準確的**新的樣本。機器學習、深度學習等計算機領域內用的比較多的就是迭代過程中收斂性質的判斷,一般迭代前後步驟的差值的範數表示其大小,常用的是二範數,差值越小表示越逼近實際值,可以認為達到要求的精度,收斂。
範數本質是距離,存在的意義是為了實現比較。
11.1 向量的範數
假設x是向量:
$$ x = (x_1, x_2,\dots, x_n)$$
那麼p-範數的計算公式如下:
$$\vert\vert x \vert\vert_p = \sqrt[p]^|x_i|^p}$$
x向量的各元素絕對值的p次方之和的p方根。
11.2 常見的範數計算
依據範數的定義,可以計算各階的範數,機器學習領域內常見、常用的範數有:
1). 0-範數,表示向量中非零元素的個數。
$$\vert\vert x \vert\vert_0 = \sqrt[0]^ \vert x_i\vert^0}$$
import numpy as np
x = np.array([1, 0, -2])
n0 = np.linalg.norm(x, ord = 0)
print n0
程式執行結果:
2.0x向量為(1, 0, -2)非0值共2個。
2). 1-範數,計算方式為向量所有元素的絕對值之和。
$$\vert\vert x \vert\vert_1 = \sum_^\vert x_i\vert$$
import numpy as np
x = np.array([2, 0, -4])
n1 = np.linalg.norm(x, ord = 1)
print n1
程式執行結果:
6.03). 2-範數,計算方式跟歐式距離的方式一致即向量各元素的平方和然後求平方根。
$$\vert\vert x \vert\vert_2 = \sqrt[2]^ x_i^2}$$
import numpy as np
x = np.array([3, 0, -4])
n2 = np.linalg.norm(x, ord = 2)
print n2
程式執行結果:
5.04). $+\infty$-範數,所有向量元素絕對值中的最大值。
$$\vert\vert x \vert\vert_ = \max_^\vert x_i\vert$$
import numpy as np
x = np.array([3, 0, -4])
n = np.linalg.norm(x, ord = np.inf)
print n
程式執行結果:
4.05). $-\infty$-範數,所有向量元素絕對值中的最小值。
$$\vert\vert x \vert\vert_ = \min_^\vert x_i\vert$$
import numpy as np
x = np.array([3, 0, -4])
n = np.linalg.norm(x, ord = -np.inf)
print n
程式執行結果:
0.011.3 矩陣的範數
和向量的範數一樣,矩陣也有範數,假設矩陣a的大小為$m * n$,即m行n列。
1). 1-範數,又名列和範數。顧名思義,即矩陣列向量中絕對值之和的最大值。
\vert\vert a\vert\vert_1 = \max_^\sum_^\vert a_\vert
import numpy as np
x = np.array([[-1, 1, 0],[-4, 3, 0],[1, 0, 2]])
print x
n1 = np.linalg.norm(x, ord = 1)
print 'norm_1 ', n1
程式執行結果:
[[-1 1 0]
[-4 3 0]
[ 1 0 2]]
norm_1 6.0
x的三個列向量$(-1, -4, 1)^t$、$(1, 3, 0)^t$、$(0, 0, 2)^t$的絕對值之和為6、4、2,最大值是6即為矩陣a的1-範數。
2). 2-範數,又名譜範數,計算方法為$a^ta$矩陣的最大特徵值的開平方。
\vert\vert a\vert\vert_2 = \sqrt
其中,$\lambda_i$ 是$a^ta$矩陣的特徵值。
import numpy as np
x = np.array([[-1, 1, 0],[-4, 3, 0],[1, 0, 2]])
print x
xtx = np.matmul(x.t, x)
print "lambda ", np.linalg.ei**als(xtx)
n2 = np.linalg.norm(x, ord = 2)
print 'norm_2 ', n2, np.sqrt(27.71086452)
程式執行結果:
[[-1 1 0]
[-4 3 0]
[ 1 0 2]]
lambda [ 27.71086452 0.03392256 4.25521292]
norm_2 5.26411099011 5.2641109904712309
矩陣x的2-範數計算是先計算$x^tx$的特徵值$\lambda_i$,然後找$\lambda_i$中的最大值,再開方。**裡xtx即為$x^tx$,ei**als函式的返回值就是各個$\lambda_i$。
3). f-範數,frobenius範數,計算方式為矩陣元素的絕對值的平方和再開方。
\vert\vert a\vert\vert_f = \sqrt[2]^m \sum_^n \vert a_\vert^2}
4). $\infty$-範數,又名行和範數, 即矩陣行向量中絕對值之和的最大值。
\vert\vert a\vert\vert_ = \max_^\sum_^\vert a_\vert
#coding:utf-8
import numpy as np
x = np.array([[-1, 1, 0],[-4, 3, 0],[1, 0, 2]])
print x
# oo-範數
ninf = np.linalg.norm(x, ord = np.inf)
print 'norm_inf', ninf
# f-範數
nfro = np.linalg.norm(x, ord = 'fro')
print 'norm_fro', nfro
程式的執行結果
[[-1 1 0]
[-4 3 0]
[ 1 0 2]]
norm_inf 7.0
norm_fro 5.65685424949
$\infty$-範數是從x矩陣的三個行向量求得的,$(-1, 1, 0)$、$(-4, 3, 0)$、$(1, 0, 2)$三個行向量的元素絕對值之和分別為2、7、3,最大值為7。
11.4 學習範數的意義
通過numpy計算向量、矩陣的範數為後續學習深度學習打下夯實的基礎,因為深度學習裡的求最小損失函式時就用到了2-範數,所以本章節需要理解並掌握範數的求解。
數字矩陣和模擬矩陣
矩陣的分類 模擬矩陣 較低成本的8816晶元的出現並引入到安防行業,單晶元實現了16入8出的切換,打造了第一代矩陣即模擬矩陣的金身,使它以總管的身份坐上安防行業的主席位置。幾年來,經過多個廠家的不斷改進,模擬矩陣有了很大的進步。1 首先實現了手工切換及程式切換 同步切換 群組切換 定時切換 報警聯動...
Python Numpy二維陣列和Numpy中的軸
二維陣列的表示方法 python原生 列表的列表 numpy ndarray pandas dataframe 二維ndarray與python list 1.ndarry效能更好 3.訪問語法差別 a 1,2 numpy ndarray a 1 2 python list numpy的軸 axis...
機器學習之旅 重要的Python庫 Numpy
numpy numerical python的簡稱 是python科學計算的基礎包。它提供了以下功能 1 快速高效的多維陣列物件ndarray 2 用於對陣列執行元素級計算以及直接對陣列執行數 算的函式 3 用於讀寫硬碟上基於陣列的資料集的工具 4 線性代數運算 傅利葉變換,以及隨機數生成 5 用於...