deecamp查漏補缺--2019冬令營前
明天2019Deecamp冬令營線上筆試,今天刷了一下18的題目,查漏補缺的同時記錄一下重要的知識。
卷積
離散訊號f(n),g(n)的定義如下:
在數學裡我們知道f(-x)的影象是f(x)對y軸的反轉,g(-m)就是把g(m)的序列反轉,g(n-m)的意義是把g(-m)平移n點。
相當於濾波器或掩碼g(m)反轉後在訊號f(n)上平移求和。
二維卷積:
二維卷積應用(邊緣檢測):水平x軸與垂直y軸Sobel掩碼運算元:
離散自相關
有了卷積的概念相關的定義跟卷積相似,離散資訊f(n)的自相關用下式定義
R(n) = f(n)*f(-n);
容易看出自相關函式有如下性質:
R(n)=R(-n);
n=0時,R(0)為訊號的能量
精確率和召回率:
準確率就是找得對,召回率就是找得全,漏了(1-召回率)這麼多。
正則表示式
正則表示式是一種描述性的語言, 用來概括一類字串 (或者說一個字串集合。
a | b* , 這個正則表示式描述了 a 和 b, bb, bbb
(a|o)(n|ff). 前面描述的是 a 或者 o, 後面描述的是 n 或者 ff, 接起來, 描述了 an, aff, on, off。
行方法
A*B=C為例,常規方法即為A行與B列對應元素相乘相加得到C中對應的元素,
即用A中每行指定的線性組合
列方法(重點)
即用B中每列指定的線性組合方法對A中所有列進行組合得到C中的每列,
用列的角度看待方程,這個問題即列的線性組合是否能覆蓋整個空間?很明顯這跟A矩陣有很大的關係,如果A是非奇異陣,這樣才能組合出所有的b,以一個三方程三未知數的方程組來理解,如果係數矩陣A的3個列向量在一個平面上,那麼由他們組合出的所有向量都在那個平面上,在那個平面之外的所有b都是無法得到的,這就造成方程無解。
A列B行
分塊方法
奇異值分解 - SVD
中間為奇異值矩陣,特徵值的平方根,從大到小排列,小的特徵越來越不重要,U為左奇異向量(ui=Avi實際上為AAT的特徵向量),vi為ATA的特徵向量,稱為A的右奇異向量。
import numpy as np
M = [[1,2,3],[4,5,6],[7,8,9]]
U,D,vt = np.linalg.svd(M)
奇異值分解可以將一個比較複雜的矩陣用更小更簡單的幾個子矩陣的相乘來表示,這些小矩陣描述的是矩陣的重要的特性。就像是描述一個人一樣,給別人描述說這個人長得濃眉大眼,方臉,絡腮鬍,而且帶個黑框的眼鏡,這樣寥寥的幾個特徵,就讓別人腦海裡面就有一個較為清楚的認識,實際上,人臉上的特徵是有著無數種的,之所以能這麼描述,是因為人天生就有著非常好的抽取重要特徵的能力,讓機器學會抽取重要的特徵,SVD是一個重要的方法。
餘弦相似度
餘弦相似度用向量空間中兩個向量夾角的餘弦值作為衡量兩個個體間差異的大小。相比距離度量,餘弦相似度更加註重兩個向量在方向上的差異,而非距離或長度上。
def cosine_similarity(vector1, vector2):
dot_product = 0.0
normA = 0.0
normB = 0.0
for a, b in zip(vector1, vector2):
dot_product += a * b
normA += a ** 2
normB += b ** 2
if normA == 0.0 or normB == 0.0:
return 0
else:
return round(dot_product / ((normA**0.5)*(normB**0.5)) * 100, 2)