Distributions
多級分類數據分佈的方差
我目前正在分析具有各種特徵(例如城市)的大型數據集。我想找到一種衡量標準,它基本上可以說明數據之間的差異有多少。這比簡單地計算不同元素的數量要有用得多。
例如,考慮以下數據:
City ---- Moscow Moscow Paris London London London NYC NYC NYC NYC
我可以看到有 4 個不同的城市,但這並不能告訴我有多少分佈。我想出的一個“公式”是對每個元素的總數據集的分數求和。在這種情況下,它將是
(2/10)^2 + (1/10)^2 + (3/10)^2 + (4/10)^2
。我對此沒有真正的數學證明,但只是想了一下。在這種情況下,例如,在具有 10 個元素的集合中,如果 9 個相同,而 1 個不同,則數字將為
(9/10)^2 + (1/10)^2
。但是,如果是一半一半,那就是(5/10)^2 + (5/10)^2
。我想對有哪些類似的公式和研究領域發表意見。通過一些快速的谷歌搜索,我真的找不到任何東西。
我認為您可能想要的是(香農的)熵。它是這樣計算的:
這代表了一種思考分類變量中信息量的方式。 在
R
中,我們可以這樣計算:City = c("Moscow", "Moscow", "Paris", "London", "London", "London", "NYC", "NYC", "NYC", "NYC") table(City) # City # London Moscow NYC Paris # 3 2 4 1 entropy = function(cat.vect){ px = table(cat.vect)/length(cat.vect) lpx = log(px, base=2) ent = -sum(px*lpx) return(ent) } entropy(City) # [1] 1.846439 entropy(rep(City, 10)) # [1] 1.846439 entropy(c( "Moscow", "NYC")) # [1] 1 entropy(c( "Moscow", "NYC", "Paris", "London")) # [1] 2 entropy(rep( "Moscow", 100)) # [1] 0 entropy(c(rep("Moscow", 9), "NYC")) # [1] 0.4689956 entropy(c(rep("Moscow", 99), "NYC")) # [1] 0.08079314 entropy(c(rep("Moscow", 97), "NYC", "Paris", "London")) # [1] 0.2419407
由此,我們可以看出向量的長度無關緊要。可能選項的數量(分類變量的“級別”)使其增加。如果只有一種可能性,則值為(盡可能低)。當概率相等時,對於任何給定數量的可能性,該值最大。
從技術上講,有更多可能的選項,它需要更多信息來表示變量,同時最小化錯誤。只有一個選項,您的變量中沒有信息。即使有更多選項,但幾乎所有實際實例都是特定級別,信息也很少;畢竟,你可以猜到“莫斯科”,而且幾乎總是正確的。
your.metric = function(cat.vect){ px = table(cat.vect)/length(cat.vect) spx2 = sum(px^2) return(spx2) } your.metric(City) # [1] 0.3 your.metric(rep(City, 10)) # [1] 0.3 your.metric(c( "Moscow", "NYC")) # [1] 0.5 your.metric(c( "Moscow", "NYC", "Paris", "London")) # [1] 0.25 your.metric(rep( "Moscow", 100)) # [1] 1 your.metric(c(rep("Moscow", 9), "NYC")) # [1] 0.82 your.metric(c(rep("Moscow", 99), "NYC")) # [1] 0.9802 your.metric(c(rep("Moscow", 97), "NYC", "Paris", "London")) # [1] 0.9412
您建議的指標是平方概率的總和。在某些方面,它的行為類似(例如,注意它對變量的長度是不變的),但請注意它會隨著級別數的增加或變量變得更加不平衡而減少。它與熵成反比,但單位——增量的大小——不同。您的指標將受和,而熵的範圍從到無窮遠。這是他們的關係圖: