# 壓縮度量是一個數學概念,例如我們採用歐氏距離作爲度量方法, 對於任意的 ||xi-xj||>||f(xi)-f(xj)|| (xi 和 xj 爲樣本空間中的樣本)
#場景 如果我們的樣本點之間距離很大,數據很稀疏的情況下,這種距離很大的計算是非常消耗資源的。我們不妨將空間的樣本映射的更加緊湊點,這樣計算資源的消耗也比較少。
import numpy as np
a = np.array([1, 1])
b = np.array([1, 6])
#我們需要用一個矩陣將向量集中起來,我們設矩陣爲A ||a-b||>||Aa-Ab||
# 如何構建一個矩陣A? 如果我們將a b 映射靠近 他們的均值向量 不就可以了? 也就是A 將a,b 靠近(a, b)的均值向量
# 我們首先構建一個假的均值向量 m =0.5 * 1/2(a + b) + 0.5 * a + nose(一點點高斯噪音) 從幾何數學來看 這個點 位於 a 和 均值向量的正中間。 [a, b] = X, [m, m] = M AX = M -> A = MX^-1
X = np.array([[1, 1],
[1, 7]])
M = np.array([[1.1, 2.3],
[1.2, 2.1]])
# 有人說沒必要啊 你這還求逆矩陣這不是畫蛇添足嗎? 是的 但是我們告訴大家度量學習數據很多是有標籤的,我們在NCA方法中我們就是求得A矩陣,利用標籤信息使得相同標記得數據更加得緊湊。 在我們這裏多了一個限制條件就是度量得結果比原來向量的度量結果要小。
#關鍵是A矩陣的構成是一個很大的問題,這裏我只給出了很畫蛇添足的思路,但是中心思想是讓數據更加緊湊,必然度量的結果會比之前小。
dist1 = np.linalg.norm(a - b)
dist2 = np.linalg.norm(M[0] - M[1])
print(dist1)
print(dist2)