1. 程式人生 > >解決異方差問題--加權最小二乘法

解決異方差問題--加權最小二乘法

bubuko 異常 收入 信息 del seed 例如 假設 尋求

異方差問題 

  Ordinary Least Squares (OLS) 需要四個 - -有些人說五或六個 - 假設要滿足,但建模時我們經常會遇到異方差(Heteroskedasticity)問題,

那是因為,很多數據都表現出這種“異方差性”。我們通常可以直觀地解釋原因:

  • 隨著年齡的增長,凈值往往會出現分歧
  • 隨著公司規模的擴大,收入趨於分化
  • 或者,隨著嬰兒身高的增加,體重趨於分散

  OLS的主要假設之一是數據的殘差相同的,當不滿足同方差的假設時,即存在異方差時候,我們需要另外的方法--加權最小二乘法(WLS)去處理。

技術分享圖片

WLS實例 

import numpy as np
import pandas as pd import seaborn as sns import statsmodels.api as sm # generate random data np.random.seed(24) x = np.random.uniform(-5,5,25) e= 2*np.random.randn(25) y = 2*x+e
# alternate error as a function of x
e2 = e*(x+5)
y2 = 2*x+e2

sns.regplot(x,y);
sns.regplot(x,y2);

技術分享圖片

  可以看到,這些集合來自相同的實例函數,但是作為x的函數的增加的方差導致橙色模型擬合不同於藍色的線。 在另一個隨機抽取中,斜率可能低於藍色,但一般會更加不穩定。

# add a strong outlier for high x
x_high = np.append(x,5)
y_high = np.append(y2,160)
# add a strong outlier for low x
x_low = np.append(x,-4)
y_low = np.append(y2,160)

sns.regplot(x_high,y_high);

技術分享圖片

sns.regplot(x_low,y_low);

技術分享圖片

  上面的第一個附加模仿了一個常見的情況,即高方差區域(預期)會看到極端觀察。 這將比WLS更多地影響OLS,因為WLS將減去方差及其“懲罰”。

  計算樣本權重,我們添加的錯誤隨(x + 5)的變化而變化; 我們可以使用它來對值進行反向加權。

# calculate weights for sets with low and high outlier
sample_weights_low = [1/(x+5) for x in x_low]
sample_weights_high = [1/(x+5) for x in x_high]
# reshape for compatibility
X_low = x_low.reshape(-1, 1)
X_high = x_high.reshape(-1, 1)

# import and fit an OLS model, check coefficients
from sklearn.linear_model import LinearRegression
model = LinearRegression()
model.fit(X_low, y_low)
# fit WLS using sample_weights
WLS = LinearRegression()
WLS.fit(X_low, y_low, sample_weight=sample_weights_low)
print(model.intercept_, model.coef_)
print(WLS)
print(WLS.intercept_, WLS.coef_)

  需要註意的是,WLS中的斜率受到低異常值的影響。 低區域應該具有低可變性,因此異常值被放大到高於OLS的範圍,推動斜率更負。 讓我們看下面如何在WLS中抑制高異常值。 

model = LinearRegression()
model.fit(X_high, ymod)
WLS.fit(X_high, ymod, sample_weight=sample_weights_high)
print(model.intercept_, model.coef_)
print(WLS)
print(WLS.intercept_, WLS.coef_)

總結

  這是WLS的一個基本介紹,在這個領域還有很多東西要探索。例如:在建模時始終尋求使用經驗或先驗信息。使用模型的殘差 - 例如,如果var(εi)=σ2x_i* var(εi)=σ2x_i 那麽我們可以決定使用w_i = 1 / x_i。

  如果響應是n觀察的平均值,則類似var(y_i)= var(ε_i)=σ2/ n_i * var(y_i)= var(ε_i)=σ2/ n_i,那麽我們可以決定使用w_i = n_i。
有時我們知道異方差的類型。在這種情況下,我們可能決定使用權重與測量誤差的方差成反比。

解決異方差問題--加權最小二乘法