2012-04-19 31 views

Trả lời

21

Gói statsmodels có những gì bạn cần. Xem xét điều này đoạn mã nhỏ và đầu ra của nó:

# Imports # 
import statsmodels.api as smapi 
import statsmodels.graphics as smgraphics 
# Make data # 
x = range(30) 
y = [y*10 for y in x] 
# Add outlier # 
x.insert(6,15) 
y.insert(6,220) 
# Make graph # 
regression = smapi.OLS(x, y).fit() 
figure = smgraphics.regressionplots.plot_fit(regression, 0) 
# Find outliers # 
test = regression.outlier_test() 
outliers = ((x[i],y[i]) for i,t in enumerate(test) if t[2] < 0.5) 
print 'Outliers: ', list(outliers) 

Example figure 1

Outliers: [(15, 220)]

Sửa

Với phiên bản mới hơn của statsmodels, mọi thứ đã thay đổi một chút. Đây là một đoạn mã mới cho thấy cùng một kiểu phát hiện ngoại lệ.

# Imports # 
from random import random 
import statsmodels.api as smapi 
from statsmodels.formula.api import ols 
import statsmodels.graphics as smgraphics 
# Make data # 
x = range(30) 
y = [y*(10+random())+200 for y in x] 
# Add outlier # 
x.insert(6,15) 
y.insert(6,220) 
# Make fit # 
regression = ols("data ~ x", data=dict(data=y, x=x)).fit() 
# Find outliers # 
test = regression.outlier_test() 
outliers = ((x[i],y[i]) for i,t in enumerate(test.icol(2)) if t < 0.5) 
print 'Outliers: ', list(outliers) 
# Figure # 
figure = smgraphics.regressionplots.plot_fit(regression, 1) 
# Add line # 
smgraphics.regressionplots.abline_plot(model_results=regression, ax=figure.axes[0]) 

Example figure 2

Outliers: [(15, 220)]

+1

Cảm ơn bạn đã thêm thông tin mới! Ví dụ tuyệt vời, họ đã thực sự giúp tôi hiểu nó. –

7

Thông thường hơn (tức là theo chương trình) có cách nào để xác định và che giấu ngoại lệ không?

Các thuật toán phát hiện ngoại lệ khác nhau tồn tại; scikit-learn thực hiện một vài trong số chúng.

[Disclaimer:. Tôi là một scikit-học đóng góp]

7

scipy.stats không có bất cứ điều gì trực tiếp cho giá trị ngoại biên, như vậy là câu trả lời một số liên kết và quảng cáo cho statsmodels (đó là một sự bổ sung thống kê cho scipy .stats)

để xác định giá trị ngoại biên

http://jpktd.blogspot.ca/2012/01/influence-and-outlier-measures-in.html

http://jpktd.blogspot.ca/2012/01/anscombe-and-diagnostic-statistics.html

http://statsmodels.sourceforge.net/devel/generated/statsmodels.stats.outliers_influence.OLSInfluence.html

thay vì mặt nạ, một cách tiếp cận tốt hơn là để sử dụng một ước lượng mạnh mẽ

http://statsmodels.sourceforge.net/devel/rlm.html

với các ví dụ, nơi tiếc là lô hiện đang không được hiển thị http://statsmodels.sourceforge.net/devel/examples/generated/tut_ols_rlm.html

RLM downweights giá trị ngoại biên . Các kết quả ước tính có thuộc tính weights và đối với các giá trị nhỏ hơn 1, điều này cũng có thể được sử dụng để tìm các ngoại lệ. RLM cũng mạnh mẽ hơn nếu có nhiều ngoại lệ.

+1

ma trận thiết kế ngoại sinh là gì? Tôi có một số dữ liệu x, y: y = f (x). Đó là một hàm chủ yếu là tuyến tính: y = mx + b. Tôi bắt đầu từ đâu với công cụ ước tính mạnh mẽ này? Thuật ngữ của tài liệu không thể hiểu được đối với tôi. –

0

Nó cũng có thể để hạn chế ảnh hưởng của giá trị ngoại biên bằng scipy.optimize.least_squares.Đặc biệt, hãy xem thông số f_scale:

Giá trị chênh lệch mềm giữa số dư trong và dư thừa, mặc định là 1.0. ... Tham số này không có hiệu lực với tổn thất = 'tuyến tính', nhưng đối với các giá trị tổn thất khác, nó có tầm quan trọng rất quan trọng.

Trên trang họ so sánh 3 chức năng khác nhau: bình thường least_squares, và hai phương pháp liên quan đến f_scale:

res_lsq =  least_squares(fun, x0, args=(t_train, y_train)) 
res_soft_l1 = least_squares(fun, x0, loss='soft_l1', f_scale=0.1, args=(t_train, y_train)) 
res_log =  least_squares(fun, x0, loss='cauchy', f_scale=0.1, args=(t_train, y_train)) 

Least squares comparison

Như có thể thấy, các bình phương nhỏ nhất thông thường là nhiều hơn nữa bị ảnh hưởng bởi các ngoại lệ dữ liệu và có thể đáng để chơi với các chức năng khác nhau loss kết hợp với f_scales khác nhau. Các chức năng có thể mất được (lấy từ tài liệu):

‘linear’ : Gives a standard least-squares problem. 
‘soft_l1’: The smooth approximation of l1 (absolute value) loss. Usually a good choice for robust least squares. 
‘huber’ : Works similarly to ‘soft_l1’. 
‘cauchy’ : Severely weakens outliers influence, but may cause difficulties in optimization process. 
‘arctan’ : Limits a maximum loss on a single residual, has properties similar to ‘cauchy’. 

các scipy sách dạy nấu ăn has a neat tutorial trên hồi quy phi tuyến mạnh mẽ.

Các vấn đề liên quan