iT邦幫忙

2

python 多元線性回歸 刪除outlier 怎麼做

最近在做多元線性回歸分析,原先使用的是SPSS來做,但因為上頭指示刪除outlier的方式是「每跑完一次迴歸分析,刪除一個標準差最大的data,再做一次回歸分析,然後在刪除下一個標準差最大的data」,但這樣永遠都做不完阿...,拜託大家,我真的需要各位高手的幫助阿。

SPSS的作法是這樣做

  1. 點選回歸分析
    https://ithelp.ithome.com.tw/upload/images/20200327/20116303WT7GaQJYup.jpg
  2. 加入因變數、自變數
    https://ithelp.ithome.com.tw/upload/images/20200327/20116303NECma7NtZk.jpg
  3. 設定三個標準差的output出來
    https://ithelp.ithome.com.tw/upload/images/20200327/20116303df3XrYzFtw.jpg
  4. 結果長這樣,然後我就會去選最大標準殘差的data,回到表格去刪除他,然後再從第一步again again and again...
    https://ithelp.ithome.com.tw/upload/images/20200327/20116303VBWkJgZwoX.jpg

因為我比較熟悉python,所以上網找python的相關辦法,但他都有另外設定訓練的方式,來計算回歸,這樣數值貌似會不一樣吧@@但最重要的是我需要一個一個的標準差,才可以慢慢刪除outlier,但我找到的好像都是直接輸出MSE...,希望各位高手可以幫幫我。我有查到類似的網站 https://www.itread01.com/content/1550422451.html

如果data大概長這樣,「因變數」為成績,「自變數」為家庭人數、兄弟姊妹人數、歲數。
人名 | 生日年分 | 家庭人數 | 兄弟姊妹人數 | 歲數 | 成績
------------- | -------------
大華 | 1999 | 3 | 1 | 21 | 56
小白 | 2000 | 8 | 3 | 20 | 13
小明 | 2002 | 8 | 4 | 18 | 91
阿鼻 | 2017 | 10 | 5 | 2 | 34
琪琪 | 1949 | 18 | 12 | 71 | 3

我打的程式碼只讀了excel..,因為後續開始設x跟y就不太知道自變數跟因變數要設在哪裡,去讀了別人的說明,也不太知道形變量跟標籤值有等於這些嗎,萬分懇求各位幫幫我ˊˋ

import pandas as pd
import numpy as np
import statsmodels.api as sm
import matplotlib.pyplot as plt
data = pd.read_excel("data.header = [0,1])

拜託大家了!!真的非常感謝!感動得痛哭流涕阿QAQQ
拜託拜託大家了

圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 個回答

2
twyes
iT邦新手 4 級 ‧ 2020-03-27 10:01:17
最佳解答

我做過 DataMining 說一下看法 (但我之前做的都是不用寫Code,只寫 SQL , DMX)
DMX: 微軟的資料採礦延伸模組

基本上你說你對 Python 熟 , 基本上對 Python 熟應該就可以解決所有問題了

  1. 基本上作法就是,找一個 Python 的多元回歸套件
    (如果對回歸熟,甚至於可以自己寫回歸,因為那只是一些公式)
  2. 套件中一定可以定義哪些是自變數 X1,X2.....Xn , 哪些是因變數 y
  3. 所謂的訓練模式就是因為跑回歸最重要的是甚麼 ?
    (1) 建模 , 導出回歸公式
    (2) 預測 : 預測才是最後的目地

所以通常必須把一些樣本拿出一定百分比當訓練樣本 , 例如 80%
然後用其他的 20% 當驗證 (有時候樣本還會分成3分,訓練,測試,驗證)

  1. 所以當 選完一定百分比的樣本當訓練樣本後 跑完 python 回歸套件後
    理論上 各套件應該會有一個函數,可以直接看每一個樣本的 標準殘差
    你可以把這些樣本的標準殘差 透過套件 函數 叫出來
    然後看哪一個樣本要刪除

我是建議 標準殘差 超過 3個標準差就將離群值刪掉
跟你們主管講,不要刪除最大的,應該刪除超過3個標準差的

  1. 你對python 熟,應該有辦法將套件樣本中超過3個標準差的樣本刪掉

    然後寫一個迴圈,只要有樣本 標準殘差 超過 3個標準差
    就將那些樣本刪掉

    然後再跑一次回歸,直到所有樣本 標準殘差 都在3個標準差內

  2. 這樣就可以跑出回歸 公式

  3. 然後其實只跑回歸沒有意義,基本上重點就是要預測

    如果目的是預測就可以針對其他新增的樣本預測
    這才是回歸的目地

當然,也有可能只是跑回歸,不預測 , 如果是這樣,你就將所有樣本都當訓練資料

其實你們主管漏掉了一點,把離群值排掉沒問題
但是 X1,X2......xn 這些自變數每一個都適合當自變數嗎?
不一定,不適合的自變數也會影響到回歸
如果選一個不適合的自變數去跑回歸模型,以後的預測也會離實際有差距

因此自變數間最好要有 檢定,看適不適合
或者要看之間的相關係數高低

理論上如果對 Python 熟,這些寫法應該沒問題
(但我對python不熟,不過整個運作流程跟回歸我熟)

基本上,Python的回歸套件很多,各套件應該都有可以看係數,殘差,
相關係數,判定係數 的相關函數

寫法參考

https://tinyurl.com/tks2cjg
(四)多元迴歸 Multivariable Regression

sunnyyeh iT邦新手 5 級 ‧ 2020-03-28 01:21:28 檢舉

謝謝!!你給的概念跟網站都很有幫助,謝謝您~~

我要發表回答

立即登入回答