歐式距離如何應對缺失值?

2020-12-12 Y叔談生信

biobabble作者群有一個小夥伴提出來的問題。

話說有一個矩陣,我們讓它某個值缺失,算出來的距離和原來的竟然是一樣的:> dat = matrix(1:10, 2)> dist(dat)122.236068> dat[1,1] = NA> dist(dat)122.236068這有點反直覺,實際上你再搞個缺失值,它算出來還是一樣的:

> dat[1,3] = NA> dist(dat) 12 2.236068但以我的經驗,我通常不敢輕易說人家有bug,我們得確認一下。

於是我讀了R的原始碼中歐式距離的代碼:

staticdoubleR_euclidean(double *x, int nr, int nc, int i1, int i2){double dev, dist;int count, j; count= 0; dist = 0;for(j = 0 ; j < nc ; j++) {if(both_non_NA(x[i1], x[i2])) { dev = (x[i1] - x[i2]);if(!ISNAN(dev)) { dist += dev * dev; count++; } } i1 += nr; i2 += nr; }if(count == 0) return NA_REAL;if(count != nc) dist /= ((double)count/nc);returnsqrt(dist);}把NA幹掉?

首先從代碼上看,缺失值會被去掉,這就是count計數看有多少有效值的作用。如果我們簡單粗爆地把NA值去掉,我們會算出來什麼值呢?

完整數據的情況下,距離是2.236068dat[1,1] = NA的情況下,距離是2dat[1,c(1,3)] = NA的情況下,距離是1.732051從這裡我們可以看到,缺失值越多,距離是越小的,這個從歐式距離的公式上也反映出來,所有的量都是正值,少了就小了。所以如果我們簡單地去NA值,那麼對距離的估算會低估

怎麼補救?

這就是倒數第二句幹的事情:

if(count != nc) dist /= ((double)count/nc);如果有缺少,用已知的點的均值來估計。也就是用mean((qi-pi)^2)去代替缺失點。

不難驗證一下,前面第二種情況時距離是2,那麼被一下缺失值:

> sqrt(2^2 / (4/5))[1] 2.236068出來的就是第一種情況時的值了。

如果你看不明白的話,我再拆一下給你看:

2^2 是總和2^2/4 是均值2^2 + 2^2/4 就是補了缺失值的總和2^2 / (4/5)等同於上面的值sqrt(2^2 / (4/5))算出來就是距離,請對照公式來看一下。為什麼能夠完美估計原來的值?

這也是一開頭讓大家疑惑的地方,為什麼做為估計出來的值能和真實的值一樣?

這其實是個巧合,真的是巧合。你如果是一般的隨機數拿來試試,肯定無法一模一樣的值。

當然對於一個determinant的計算,巧合也是算出來的,必定是巧合,原因必須存在於數值之中。

如果你對dat算相關係數的話,就明白了。我們對原始值算一下:

> cor(dat[1,], dat[2,])[1] 1能夠完美估算出距離,其實等同於能夠完美復原缺失點,而這種情況只在於數據的相關係數等於一的情況下,數據的相關性越好,也就能夠復原得越好,這很好理解。

歐式距離對於outlier是很敏感的,你可以試試不同的值去替換掉原始值,再看看缺失值的情況下,計算出來的距離和不缺失的情況下,差距有多少。

寫到這裡,我想到了歐式距離可以拿來檢測outlier啊。比如我們每次讓一個點缺失,比如說我們有100個點,就可以計算出100個距離,這些距離各不相等(正常情況下數據相關系統不會剛剛好是1),它們和真實值的差值也可以算出來,這100個差值裡面,差值較大的,相對應的缺失點,就是outlier。

相關焦點

  • Kaggle知識點:缺失值處理
    」,缺失值設為0,存在值設為1。聚類填充(clustering imputation)最為典型的代表是K均值(K-means clustering),先根據歐式距離或相關分析來確定距離具有缺失數據樣本最近的K個樣本,將這K個值加權平均來估計該樣本的缺失數據。
  • 數據的預處理基礎:如何處理缺失值
    圖片來源: thermofisher數據集缺少值? 讓我們學習如何處理:數據清理/探索性數據分析階段的主要問題之一是處理缺失值。 缺失值表示未在觀察值中作為變量存儲的數據值。 這個問題在幾乎所有研究中都是常見的,並且可能對可從數據得出的結論產生重大影響。
  • 離群值與缺失值的識別與處理
    原來咱們在說數據處理的時候也曾經提到過這個情況,這裡,一起再聊聊離群值和缺失值的識別與處理。 離群值的識別與處理離群值(outlier):距離整體數據較遠的數據稱為離群值。沒有搞明白離群值產生的原因之前,不要簡單捨棄,尤其是數據較少的時候。
  • 「統計實戰」缺失值識別與處理
    關注我的,分析數據不發愁了不信你試試後臺留言,獲取統計軟體在科學研究中,缺失值通常難以避免,但處理起來又比較麻煩,很多人選擇忽略缺失值,但有些時候它們會不知不覺給我們造成麻煩,學幾招缺失值識別和處理的技術還是很有必要的。
  • 機器學習之缺失值處理
    缺失值數據圖片比較小,其實這段時間的數據缺失值還是較多的(我是特意找了段缺失值多的數據,方便我們後面對比不同處理方法的結果,嘿嘿~~~),這裡面我們以temp_out欄位為例來進行下面的缺失值處理啦缺失時段曲線圖為了對比缺失值效果,填充後的曲線統一下移一定距離哈~~~1:前值替換缺失值df_show = df_show.fillna
  • 歐式距離、曼哈頓距離、切比雪夫距離三種距離的可視化展示
    ,諸如:歐式距離、曼哈頓距離、切比雪夫距離…… 老外習慣於使用名字來命名算法,可是對於門外漢們,是一種困惑,今天就整理下,一起溫故知新。歐式距離(Euclidean Distance)歐式距離是我們在直角坐標系中最常用的距離量算方法,例如小時候學的「兩點之間的最短距離是連接兩點的直線距離。」這就是典型的歐式距離量算方法。通常這這個距離的獲取是基於我們熟悉的「勾股定理」,解算三角形斜邊得到的。
  • R語言如何檢測和處理數據缺失值?
    面對一份數據,我們會做數據的缺失值檢測和分析,根據數據的缺失程度,以知道數據的完整性和可用性。實際的數據,絕大部分會有缺失值現象。缺失值的產生與諸多因素有關聯,例如:數據採集不成功,數據採集成功了但是數據確實沒有值,數據的值受其它因素控制等。面對有缺失值的數據,我們要怎麼處理、分析和應用,是我們數據工作者要思考和實踐的命題。
  • 缺失值插補方法程序和數據release, 總結加註解
    , 步驟和方法供參考這篇文章異常值和缺失值處理環節和步驟, 讓數據具有總體代表性告訴咱們什麼時候使用如下即將引薦的缺失值填補方法。將數據集中不含缺失值的變量(屬性)稱為完全變量,數據集中含有缺失值的變量稱為不完全變量,Little和Rubin定義了以下三種不同的數據缺失機制:1.完全隨機缺失(Missing Completely at Random, MCAR)。數據的缺失與不完全變量以及完全變量都是無關的。2.隨機缺失(Missing at Random, MAR)。
  • 樣本缺失值處理,你真的操作對了嗎?
    缺失值取決於其假設值(例如,高收入人群通常不希望在調查中透露他們的收入);或者,缺失值取決於其他變量值(假設女性通常不想透露她們的年齡,則這裡年齡變量缺失值受性別變量的影響)。在前兩種情況下可以根據其出現情況刪除缺失值的數據,而在第三種情況下,刪除包含缺失值的數據可能會導致模型出現偏差。因此我們需要對刪除數據非常謹慎。請注意,插補數據並不一定能提供更好的結果。
  • 機器學習中的歐式距離、餘弦距離存在的某種關係
    在機器學習中,通常會使用到兩種距離度量方法,歐式距離和餘弦相似度。在文本求相似性時通常是將文檔向量化後再運用以上公式,一般我們採用較多的是餘弦相似性來表示文本之間的距離,歐式距離和餘弦距離直接是否存在某種關係?下面為我將說明兩者的關係。
  • 數據分析|R-缺失值處理
    數據中往往會有各種缺失值,異常值,錯誤值等,今天先介紹一下如何處理缺失值,才能更好的數據分析,更準確高效的建模。一 查看數據集的缺失情況    R中使用NA代表缺失值,用is.na識別缺失值,返回值為TRUE或FALSE。由於邏輯值TRUE和FALSE分別等價於數值1和0,可用sum()和mean()來獲取數據集的缺失情況。
  • SPSS 經典教材:基於回歸法填充缺失值
    如何能夠合理得當地處理缺失值是至關重要的。缺失值的處理方法很多,包括直接去除,對於大樣本研究來說,直接去除可能對結果造成的影響尚可接受,但是對於樣本量不多的研究來講,可能就是很大的影響。對於缺失值插補的方法也很多,最常見的包括臨近值,均值,中位數,眾數,回歸,多重插補等。前三類的填補,因為缺少隨機誤差,填補顯得比較蒼白,後兩者,尤其是多重插補,因為考慮到存在隨機誤差,在填補效率方面顯得更加優秀。
  • 區分Protobuf 3中缺失值和默認值
    來自公眾號:新世界雜貨鋪這兩天翻了翻以前的項目,發現不同項目中關於Protobuf 3缺失值和默認值的區分居然有好幾種實現。今天筆者冷飯新炒,結合項目中的實現以及切身經驗共總結出如下六種方案。以is_show欄位為例,如果沒有該欄位表示不更新DB中的數據,如果有該欄位且值為0則表示更新DB中的數據為不可見,如果有該欄位且值為1則表示更新DB中的數據為可見。上述場景中,實際要解決的問題是如何區分默認值和缺失欄位。增加標識欄位是通過額外增加一個欄位來達到區分的目的。
  • 如何使用python技術完成數據集缺失值多種應用場景的濾除或填充?
    缺失值的處理方法,通常分為兩種,一是直接將其進行濾除;二是使用固定值或衍生值去填充缺失值,下面進行逐一介紹。回顧濾除缺失值方法濾除缺失值數據有兩種場景,一種是對Series結構的數據進行濾除,另外則是對DataFrame數據進行濾除。
  • 機器學習基礎:缺失值的處理技巧
    在數據分析和建模中,經常會遇到變量值缺失的情況,這是非常常見的。為了保證數據指標的完整性以及可利用性,通常我們會採取特殊的方式對其進行處理。 1、缺失查看 首先,需要查看缺失值的缺失數量以及比例(#數據使用的kaggle平臺上預測房價的數據) 柱形圖可視化
  • Python數據清洗(二):缺失值識別與處理
    缺失值指的是由於人為或機器等原因導致數據記錄的丟失或隱瞞,缺失值的存在一定程度上會影響後續數據分析和挖掘的結果,所以對他的處理將顯得尤為重要。缺失值的識別判斷一個數據集是否存在缺失觀測,通常從兩個方面入手,一個是變量的角度,即判斷每個變量中是否包含缺失值;另一個是數據行的角度,即判斷每行數據中是否包含缺失值。
  • 運用R進行缺失值填補
    本節將會學習到:缺失值數據的快速查看及其可視化缺失值的填補方法:均值法、KNN法、決策樹法等運用mice包實現多重填補方法數據填補的可視化缺失值概述缺失數據主要有兩種類型:1.MCAR:完全隨機缺失,這是數據缺失的理想狀況。
  • 數據科學中常見的9種距離度量方法,內含歐氏距離、切比雪夫距離等
    數據科學家 Maarten Grootendorst 向讀者介紹了 9 種距離度量方法,並探討如何以及何時以最佳的方式使用它們。此外 Maarten Grootendorst 還對它們的缺點進行了介紹,以及如何規避不足。
  • 收藏 | 機器學習最常見的 9 種距離度量方法,含歐氏距離、切比雪夫距離等
    數據科學家 Maarten Grootendorst 向讀者介紹了 9 種距離度量方法,並探討如何以及何時以最佳的方式使用它們。此外 Maarten Grootendorst 還對它們的缺點進行了介紹,以及如何規避不足。
  • 統計分析零單系列第五期:缺失值處理(專題)
    缺失值取決於其假設值(例如,高收入人群通常不希望在調查中透露他們的收入);或者,缺失值取決於其他變量值(假設女性通常不想透露她們的年齡,則這裡年齡變量缺失值受性別變量的影響)。EM程序是由迭代程序所完成,每一次迭代分成兩個步驟,第一個步驟稱為E步驟,目的在找出缺失數據的條件化期望值。也就是利用完整數據來建立對缺失數據相關參數的估計值,這個參數可能是變量間的相關係數或其他係數。第二個步驟是M步驟,目的在代入期望值,利用先前E步驟所建立的缺失數據期望值,取代缺失數據,再估計出最契合的理想值。一旦最大似然估計的迭代程序達成收斂,所得到的的最後數據即為可以取代缺失值的數據。