LIME 模型預測結果是否值得信任?

2021-09-07 13:34:40 字數 2912 閱讀 2971

花了一天時間對lime**:

細緻閱讀和**閱讀,實驗。大體理解了作者的設計思路。

背景:

我們在建立模型的時候,常常會思考我們的模型是不是夠穩定,會不會出現樣本偏差效應。 p>>n時候會不會過擬合? 我們檢查模型穩定。我們進行一些cross-validation來看看各項評估指標方差大不大。

但是假設樣本一開始由於取樣偏差導致樣本有偏,導致模型和實際情況有差異。這個就不太好評估了。

相同。p>>n也會有類似的問題。尤其在文字挖掘領域。

普通情況。假設特徵不是非常多的話。尤其像logistic regression這種model,我們會把模型權重給列印出來看看,看看訓練出的模型結果,是否和人的經驗吻合。以下是lime 文章中提到乙個文字分類的case。預測一段文字是無神論相關的。還是**徒相關的。文中分類器預測結果這篇文字是無神論相關的,但是主要區分特徵卻與人的經驗十分不吻合的,這種模型是不能讓人信服的,當我們把這幾個特徵刪除後。預測結果又反向了。我們能夠通過人工構建一些由這些特徵組成的文本來增加到預測實驗中,會大大減少模型效能。

lime解釋原理:

lime是local interpretable model-agnostic explanations的縮寫。lime的目的是試**釋模型在預測樣本上的行為。這樣的解釋是可被理解的。而且這樣的解釋是模型無關的,不須要深入到模型內部。

作者提出的方法一種區域性方法,非全域性的,在每乙個預測樣本附近隨機取樣產生一些樣本,就像下圖所,紅色「x」是預測樣本。周邊『*』和圓形樣本都是取樣得到的。

取樣的機制是隨機替換掉原始樣本中若干個特徵。

如文字a="我女朋友很喜歡看奇葩說",生成的樣本能夠是「我很喜歡看奇葩說」,「我女朋友看奇葩說」等等。每乙個生成樣本和原始樣本都有個權重,權重的計算方式: w=exp(-d^2/theta^2), d是距離,文字中我們能夠採用cosine 距離來表徵文字樣本間的距離。

以下是lime_text.py 中__data_labels_distances函式的**,針對是文字文字分類的解釋。以下**的主要作用怎樣給預測樣本生成近鄰取樣樣本。以及對應權重,取樣樣本在當前分類器的預測概率。

生成的樣本表徵方式是bag of word: [0,1,0,0,1]。

注意這時候取樣樣本特徵不是高維的,最大長度僅僅是預測樣本的長度。

有了取樣樣本。以及取樣樣本的權重。預測概率。

有了這些東西,我們以下該幹什麼呢?記住我們的目的是要解釋我們分類器在該預測樣本中怎樣起作用的?  簡單的說是在該預測樣本,分類器都是哪些特徵起到作用?我們能夠事先設定個數值k,我們僅僅看前k個起作用的特徵(太多了。人無法檢視)

既然是特徵選擇問題。那我們能夠用這些取樣樣本做個加權回歸模型。做回歸模型前,先選取k個重要特種,怎樣選取? 方法是能夠是依據回歸模型訓練結果中最大的權重,或者是前向搜尋方法(每次選取使回歸模型r^2值最大的特徵增加到集合中。),或者採用lasso_path的方法。注意樣本的權重是不一樣的。

詳細能夠看以下**:

選取k個特徵後,我們就能夠在取樣的樣本。以及這k個特徵上,做個加權回歸模型。回歸模型輸出的k個特徵以及權重,就是分類器對預測樣本的解釋。以下是explain_instance_with_data函式**:

上面的方法整體能夠用*****上的描寫敘述來概括:

總結:

上面主要環繞文字分類解釋展開的,而且主要是基於文字bag of word方式。

事實上基於文字嵌入表徵方式也是可行的,文字中詞的替換機制一樣。僅僅是在預測取樣樣本分類概率前須要把取樣樣本變成向量方式。

事實上能夠拓展到非常多其它領域,比方風控徵信等。

預測乙個行為是否有風險,當我們的模型預測到該行為是有風險的,我們須要給我們分析師。客服解釋這個行為為什麼有風險。模型識別風險行為特徵是什麼。

拓展時候預測樣本的近鄰取樣機制可能要優化設計下。很多其它場景非常多特徵不是離散或者二值的。而是連續的。尤其像random forest等樹模型事實上更適合處理連續的這樣的變數。

針對這樣的情況,怎樣處理? 取樣怎麼做? 一種簡單的方法是把連續特徵進行離散化。one-hot編碼。這樣就和lime對文字分類模型的解釋中取樣機制是一樣的啦。一種就是全然和文字一樣,對特徵進行置0取樣,無論是否是連續變數。

整體上來說,lime對模型的解釋方法比較簡單,**描寫敘述略顯複雜(本來非常easy的東西為啥寫的這麼複雜呢?),**很多其它是從實驗角度來分析lime方法的有效性。沒有太多理論分析。讓人感覺不是非常放心(想想這種方法有哪些坑)。畢竟實驗是依據樣本有關的。在一些複雜的場景是否有效? 還有實驗很多其它用的文字和影象場景。其它領域是否奏效?  為什麼在預測樣本的取樣樣本中做加權回歸分析。回歸模型結果特徵權重大小能代表原始模型在預測樣本的表現呢?

Django中QuerySet的結果是否為空的判斷

目錄有時需要對queryset的結果是否為空進行判斷,那麼不 方便 使用django自帶的方式情況下,如何進行判斷呢,又有多少種方式呢?一共有三種方式,接下來通過簡單例項予以一一介紹。其中account為自定義model 有如下物件 user account.objects.filter usern...

如何校驗SQL查詢結果是否準確

總結平常工作中幾種校驗資料的思路 1 對比其他渠道資料結果 查詢需求 從hive端查詢20190909當天的訂單量 簡單例子 需要校驗sql結果是否正確 校驗方法 hive的上游資料來源為mysql,mysql端會有一些產出資料可供校驗 如上資料流程下,如果在展現訂單資料量的情況下,hive執行查詢...

如何快速比較查詢結果是否一致 轉葉大俠

如何快速比較查詢結果是否一致 如何快速比較查詢結果是否一致 system localhost tom pager md5sum pager set to md5sum system localhost tom select from users 6004a48a825ef527b3f090290ba...