比較兩個數組的相似度?
如題,有兩個數組:
數組一:
+-------------+-------------+
| 120.1 | 0.0 |
| 121.1 | 0.08 |
| 122.1 | 4.35 |
| 123.1 | 93.78 |
| 124.1 | 1.2 |
| 125.1 | 0.58 |
| 126.1 | 0.01 |
| 127.1 | 0.0 |
+-------------+-------------+數組二:
+-------------+-------------+
| 120.05 | 0.0 |
| 121.07 | 0.16 |
| 122.06 | 5.92 |
| 123.01 | 92.14 |
| 124.02 | 1.19 |
| 125.04 | 0.57 |
| 126.1 | 0.01 |
| 127.1 | 0.0 |
+-------------+-------------+這兩個數組表示的是一個概率分布的問題,比如123.1的概率是93.78%,在實際應用中數組一是一個計算值,數組二是一個測試值,有什麼辦法比較這兩個數組的相似度。
我的思念是:實際的測試值(即數組二)的第一列和計算值之間是有差別的,有一些值並不是完全相等,比如123.1在測試的過程中可能會是123.09,我們可以將其處理成:數組三:然後將兩個數組的第一列最相似的概念值進行相減,得到的差相加,用這個差值的和代表相似度,這種方法是否太粗燥了。本人對統計不是很熟悉,是否有更好的方法來表示這個相似度?我現在使用的是Python,如果能用python描述就更好了
+-------------+-------------+
| 120.1 | 0.0 |
| 121.1 | 0.16 |
| 122.1 | 5.92 |
| 123.1 | 92.14 |
| 124.1 | 1.19 |
| 125.1 | 0.57 |
| 126.1 | 0.01 |
| 127.1 | 0.0 |
+-------------+-------------+
方差…
通常的數組相似性是計算cosine值來度量向量距離,但是你這裡的數組實際上是測量值,是實數軸上的稀疏數組,如果用cosine很可能是0。你這個問題的實質是計算兩組測量結果之間的相似性。
如果測量結果是正態分布,擬合出參數再計算相似性,如均值、方差等參數的檢驗。
若分布類型未知,則比較麻煩,可採用卡方檢驗、KS檢驗等方法。
你的結果按照正態分布來處理問題不大。如果你們是當成分布的話,一種比較好的相似性度量方法是Kullback–Leibler divergence
這就是計算兩個向量的距離嘛。挑選哪個距離(公式)是你的問題。你已經提的那個基本就是曼哈頓距離,還有歐幾里得距離等等。參考 機器學習中的相似性度量學什麼專業的?
Python 描述?from scipy.spatial.distance import *
Distance computations (scipy.spatial.distance)
如 @任衛 所說,挑選哪個距離(公式)是你的問題。
乘累加
推薦閱讀:
※Django基礎(6): 模型Models高級進階必讀。
※Django搭建個人博客:回到頂部浮動按鈕、矢量圖標、頁腳沉底和粘性側邊欄
※python特殊變數
※Seaborn中文教程(五):通過「多圖網格」結構化展示多維數據
※Python3.讀取nc和hdf的套路
TAG:Python |