numpy.average()
có tùy chọn trọng số, nhưng numpy.std()
thì không. Có ai có đề xuất cho một workaround?Độ lệch chuẩn có trọng số trong NumPy?
Trả lời
Làm thế nào về "tính toán thủ công" ngắn sau đây?
def weighted_avg_and_std(values, weights):
"""
Return the weighted average and standard deviation.
values, weights -- Numpy ndarrays with the same shape.
"""
average = numpy.average(values, weights=weights)
# Fast and numerically precise:
variance = numpy.average((values-average)**2, weights=weights)
return (average, math.sqrt(variance))
Tại sao không sử dụng lại 'numpy.average' cho phương sai? – user2357112
Chỉ muốn chỉ ra rằng điều này sẽ cung cấp phương sai thiên vị. Đối với các kích thước mẫu nhỏ, bạn có thể muốn quy mô lại phương sai (trước sqrt) để có được phương sai không thiên vị. Xem https://en.wikipedia.org/wiki/Weighted_variance#Weighted_sample_variance – Corey
Vâng, ước tính phương sai không thiên vị sẽ hơi khác. Câu trả lời này đưa ra độ lệch chuẩn, vì câu hỏi yêu cầu một phiên bản trọng số của 'numpy.std()'. – EOL
Dường như không có chức năng như vậy trong vũng/bẩn, nhưng có một ticket đề xuất chức năng bổ sung này. Bao gồm ở đó bạn sẽ tìm thấy Statistics.py thực hiện độ lệch tiêu chuẩn trọng số.
Có một lớp học trong statsmodels
để tính toán thống kê trọng: statsmodels.stats.weightstats.DescrStatsW
:
from statsmodels.stats.weightstats import DescrStatsW
array = np.array([1,2,1,2,1,2,1,3])
weights = np.ones_like(array)
weights[3] = 100
weighted_stats = DescrStatsW(array, weights=weights, ddof=0)
weighted_stats.mean # weighted mean of data (equivalent to np.average(array, weights=weights))
# 1.97196261682243
weighted_stats.std # standard deviation with default degrees of freedom correction
# 0.21434289609681711
weighted_stats.std_mean # standard deviation of weighted mean
# 0.020818822467555047
weighted_stats.var # variance with default degrees of freedom correction
# 0.045942877107170932
Các tính năng thú vị của lớp này là nếu bạn muốn để tính toán tính chất thống kê khác nhau cuộc gọi tiếp theo sẽ rất nhanh vì đã được tính toán (ngay cả trung gian) kết quả được lưu trữ.
Có một ví dụ rất tốt bởi gaborous đề xuất:
import pandas as pd
import numpy as np
# X is the dataset, as a Pandas' DataFrame
mean = mean = np.ma.average(X, axis=0, weights=weights) # Computing the
weighted sample mean (fast, efficient and precise)
# Convert to a Pandas' Series (it's just aesthetic and more
# ergonomic; no difference in computed values)
mean = pd.Series(mean, index=list(X.keys()))
xm = X-mean # xm = X diff to mean
xm = xm.fillna(0) # fill NaN with 0 (because anyway a variance of 0 is
just void, but at least it keeps the other covariance's values computed
correctly))
sigma2 = 1./(w.sum()-1) * xm.mul(w, axis=0).T.dot(xm); # Compute the
unbiased weighted sample covariance
Correct equation for weighted unbiased sample covariance, URL (version: 2016-06-28)
- 1. độ lệch chuẩn nhanh với trọng số
- 2. Tính toán độ lệch trung bình và độ lệch tiêu chuẩn có trọng số
- 3. Độ lệch chuẩn cột R
- 4. Độ lệch chuẩn với Apache Commons Math
- 5. "AttributeError: sqrt" khi tính toán độ lệch chuẩn đơn giản
- 6. Làm cách nào tôi có thể tính toán độ lệch trung bình và độ lệch chuẩn của một luồng số trong Perl?
- 7. Cách tính hiệu quả độ lệch chuẩn di chuyển
- 8. chức năng hiện có để kết hợp độ lệch chuẩn trong R?
- 9. chênh lệch giữa dot NumPy() và bên trong()
- 10. Nền phông nền CSS có độ lệch
- 11. Hiệu quả tính toán độ lệch chuẩn tích lũy ma trận trong r
- 12. Thêm thanh lỗi để hiển thị độ lệch chuẩn trên một cốt truyện trong R
- 13. Thống kê "Đảo ngược": tạo dữ liệu dựa trên độ lệch trung bình và tiêu chuẩn
- 14. Đặt độ lệch trong một dòng
- 15. Damerau-Levenshtein có trọng số trong VBA
- 16. Thuật toán nào sử dụng để phân đoạn chuỗi số thành n tập con, để giảm thiểu độ lệch chuẩn của tổng số trong mỗi tập hợp con
- 17. Cửa sổ cuộn cho mảng 1D trong Numpy?
- 18. Nhập edgelist có trọng số bằng igraph
- 19. Tạo số ngẫu nhiên có trọng số trong R
- 20. localhost vs LAN: chênh lệch tốc độ?
- 21. Numpy loadtxt làm tròn số
- 22. Tương quan của Pearson có trọng số?
- 23. Làm thế nào để tạo ra các số có phân bố chuẩn trong SQL Server
- 24. Đánh giá độ lệch tuyệt đối trung bình của một tập hợp các số trong Oracle
- 25. Số nguyên Numpy nan
- 26. Độ lệch truy cập biến trong một dẫn xuất QObject
- 27. Kết hợp hai bên có trọng số
- 28. PHP: số ngẫu nhiên từ một phân phối chuẩn
- 29. Nhân một số ma trận trong numpy
- 30. mức độ nghiêm trọng có thể gây ra sự cố?
Btw, tính dev std trọng thực sự là một vấn đề khá phức tạp - có nhiều hơn một cách để làm điều đó. Xem ở đây để có một cuộc thảo luận tuyệt vời: https://www.stata.com/support/faqs/statistics/weights-and-summary-statistics/ – JohnE