Với scipy.stats.linregress Tôi đang thực hiện hồi quy tuyến tính đơn giản trên một số bộ dữ liệu thử nghiệm x, y tương quan cao và kiểm tra trực quan từng ô phân tán x, y cho các ngoại lệ. Nói chung hơn (tức là theo chương trình) có cách nào để xác định và che giấu các ngoại lệ?Scipy.stats có thể xác định và che giấu các ngoại lệ hiển nhiên không?
Trả lời
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)
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])
Outliers: [(15, 220)]
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]
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
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ệ.
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. –
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))
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ẽ.
- 1. Có thể che giấu Chế độ xem trong Android không?
- 2. Kết hợp tính năng che giấu và che dấu của vim
- 3. Ngoại lệ không xác định trong parseSdkContent
- 4. Làm thế nào để che giấu một EditText để hiển thị các định dạng dd/mm/ngày yyyy
- 5. Modal-thoại sẽ không che giấu về tải trang
- 6. Các nhà xây dựng variadic có phải che giấu những người tạo ra ngầm không?
- 7. CSS có thể được sử dụng để che giấu hình nền không?
- 8. vim che giấu với nhiều hơn một ký tự
- 9. Sự khác biệt giữa các lần rút ngẫu nhiên từ scipy.stats .... rvs và numpy.random
- 10. Bạn có viết ngoại lệ cho các vấn đề cụ thể hoặc ngoại lệ chung không?
- 11. Có cách nào tốt hơn để che giấu một số thẻ tín dụng trong python?
- 12. Sử dụng yGuard để che giấu thư viện trong Eclipse
- 13. Node.js - yêu cầu không được xác định ngoại lệ
- 14. Ngoại lệ máy chủ không xác định Java
- 15. Làm thế nào để che giấu excel mã macro
- 16. Bạn có thể bắt được ngoại lệ tự nhiên trong mã C# không?
- 17. Ngoại lệ ngẫu nhiên "ngang hàng không được xác thực" với Java SSLContextImpl $ TLS10Context
- 18. Tôi có thể hiển thị một quốc gia (bị che khuất) trong GoogleMaps không?
- 19. Android: Eclipse - Không hiển thị ngoại lệ
- 20. Có thể bắt tất cả ngoại lệ ngoại trừ thời gian chạy ngoại lệ không?
- 21. Làm cách nào để xác định ngoại lệ nào "x []" có thể bị ném?
- 22. Xác định ngoại lệ có thể được ném từ bộ công cụ API
- 23. Có sự khác biệt nào giữa "tăng ngoại lệ()" và "tăng ngoại lệ" không có dấu ngoặc đơn không?
- 24. Cách xác định liệu ngoại lệ .NET có đang được xử lý không?
- 25. Xác định ngoại lệ với tuple làm đối số
- 26. Ngoại lệ lập bản đồ Hibernate: Không thể xác định loại cho cột: [org.hibernate.mapping.Column]
- 27. Deserialize các loại ngẫu nhiên/không xác định với XmlSerializer
- 28. $ ngoại lệ được xác định trong "người dân địa phương"
- 29. Ngoại lệ Java và Ngoại lệ C++
- 30. Cách xác định ngoại lệ tùy chỉnh trong Haskell?
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ó. –