Tính phương sai trong python

  • Giới thiệu
  • Tính toán phương sai
    • Mã hóa một hàm phương sai [] trong Python
    • Sử dụng pvariance [] và phương sai [] của Python
  • Tính toán độ lệch chuẩn
    • Mã hóa một hàm stdev [] bằng Python
    • Sử dụng pstdev [] và stdev [] của Python
  • Sự kết luận

Giới thiệu

Hai biện pháp thống kê có liên quan chặt chẽ với nhau sẽ cho phép chúng tôi có được ý tưởng về sự lan truyền hoặc phân tán dữ liệu của chúng tôi. Biện pháp đầu tiên là phương sai, đo lường mức độ xa trung bình của chúng so với các quan sát riêng lẻ trong dữ liệu của chúng tôi. Thứ hai là độ lệch chuẩnlà căn bậc hai của phương sai và đo lượng biến thiên hoặc độ phân tán của tập dữ liệu.

Trong hướng dẫn này, chúng ta sẽ học cách tính phương sai và độ lệch chuẩn trong Python. Trước tiên, chúng tôi sẽ viết mã một hàm Python cho từng biện pháp và sau đó, chúng tôi sẽ tìm hiểu cách sử dụng Python statistics để hoàn thành nhiệm vụ tương tự một cách nhanh chóng.

Với kiến ​​thức này, chúng ta sẽ có thể xem xét đầu tiên về bộ dữ liệu của mình và hiểu nhanh về sự phân tán chung của dữ liệu của chúng ta.

Tính toán phương sai

Trong thống kê, variance là thước đo các giá trị riêng lẻ [số] trong tập dữ liệu khác xa giá trị trung bình hoặc giá trị trung bình. Phương sai thường được sử dụng để định lượng độ chênh lệch hoặc độ phân tán. Spread là một đặc điểm của mẫu vật hoặc dân số mô tả có bao nhiêu sự thay đổi trong đó.

Một phương sai cao cho chúng ta biết rằng các giá trị trong tập dữ liệu của chúng ta khác xa với giá trị trung bình của chúng. Vì vậy, dữ liệu của chúng tôi sẽ có mức độ biến động cao. Mặt khác, phương sai thấp cho chúng ta biết rằng các giá trị khá gần với giá trị trung bình. Trong trường hợp này, dữ liệu sẽ có mức độ biến động thấp.

Để tính toán phương sai trong một tập dữ liệu, trước tiên chúng ta cần tìm sự khác biệt giữa từng giá trị riêng lẻ và giá trị trung bình. Phương sai là giá trị trung bình của các bình phương của những khác biệt đó. Chúng ta có thể biểu thị phương sai bằng biểu thức toán học sau:

$$
sigma ^ 2 = frac {1} {n} {sum_ {i = 0} ^ {n-1} {[x_i – mu] ^ 2}}
$$

Trong phương trình này, xi là viết tắt của các giá trị hoặc quan sát riêng lẻ trong một tập dữ liệu. μ viết tắt của giá trị trung bình hoặc giá trị trung bình của các giá trị đó. n là số lượng giá trị trong tập dữ liệu.

Thời hạn xi – μ nó được gọi là deviation from the mean. Vì vậy, phương sai là giá trị trung bình của độ lệch bình phương. Đó là lý do tại sao chúng tôi ký hiệu nó là σ2.

Giả sử chúng tôi có một tập dữ liệu [3, 5, 2, 7, 1, 3]. Để tìm phương sai của nó, chúng ta cần tính giá trị trung bình là:

$$
[3 + 5 + 2 + 7 + 1 + 3] / 6 = 3,5
$$

Sau đó, chúng ta cần tính toán tổng của độ lệch bình phương từ giá trị trung bình của tất cả các quan sát. Đây là cách thực hiện:

$$
[3 – 3,5] ^ 2 + [5 – 3,5] ^ 2 + [2 – 3,5] ^ 2 + [7 – 3,5] ^ 2 + [1 – 3,5] ^ 2 + [3 – 3,5] ^ 2 = 23,5
$$

Để tìm phương sai, chúng ta chỉ cần chia kết quả này cho số lần quan sát như sau:

$$
23,5 / 6 = 3,916666667
$$

Đó là tất cả. Phương sai của dữ liệu của chúng tôi là 3.916666667. Phương sai rất khó hiểu và khó giải thích, đặc biệt là các đơn vị của nó kỳ lạ như thế nào.

Ví dụ: nếu các quan sát trong tập dữ liệu của chúng tôi được đo bằng pound, thì phương sai sẽ được đo bằng pound vuông. Vì vậy, chúng ta có thể nói rằng các quan sát trung bình là 3.916666667 bảng vuông xa giá trị trung bình 3,5. May mắn thay, độ lệch chuẩn đến để khắc phục vấn đề này nhưng đó là chủ đề của phần sau.

Nếu chúng ta áp dụng khái niệm phương sai cho một tập dữ liệu, thì chúng ta có thể phân biệt giữa sample variancepopulation variance. Phương sai tổng thể là phương sai mà chúng ta đã thấy trước đây và chúng ta có thể tính toán nó bằng cách sử dụng dữ liệu từ tổng thể đầy đủ và biểu thức cho σ2.

Phương sai mẫu được biểu thị là S2 và chúng tôi có thể tính toán nó bằng cách sử dụng một mẫu từ một tập hợp nhất định và biểu thức sau:

$$
S ^ 2 = frac {1} {n} {sum_ {i = 0} ^ {n-1} {[x_i – X] ^ 2}}
$$

Biểu thức này khá giống với biểu thức tính σ2 nhưng trong trường hợp này, xi đại diện cho các quan sát riêng lẻ trong mẫu và X là giá trị trung bình của mẫu.

S2 thường được sử dụng để ước tính phương sai của một tập hợp [σ2] bằng cách sử dụng một mẫu dữ liệu. Tuy nhiên, S2 đánh giá thấp phương sai tổng thể một cách có hệ thống. Vì lý do đó, nó được gọi là biased estimator của phương sai tổng thể.

Khi chúng tôi có một mẫu lớn, S2 có thể là một công cụ ước tính thích hợp của σ2. Đối với các mẫu nhỏ, nó có xu hướng quá thấp. May mắn thay, có một thống kê đơn giản khác mà chúng ta có thể sử dụng để ước tính tốt hơn σ2. Đây là phương trình của nó:

$$
S ^ 2_ {n-1} = frac {1} {n-1} {sum_ {i = 0} ^ {n-1} {[x_i – X] ^ 2}}
$$

Điều này trông khá giống với biểu hiện trước đó. Có vẻ như độ lệch bình phương so với giá trị trung bình nhưng trong trường hợp này, chúng tôi chia cho n – 1 bởi n. Cái này được gọi là Sự điều chỉnh của Bessel. Sự điều chỉnh của Bessel minh họa điều đó S2n-1 là công cụ ước tính không chệch tốt nhất cho phương sai tổng thể. Vì vậy, trong thực tế, chúng tôi sẽ sử dụng phương trình này để ước tính phương sai của một tập hợp bằng cách sử dụng một mẫu dữ liệu. Lưu ý rằng S2n-1 còn được gọi là phương sai với n – 1 bậc tự do.

Bây giờ chúng ta đã học cách tính phương sai bằng cách sử dụng biểu thức toán học của nó, đã đến lúc bắt đầu hành động và tính phương sai bằng Python.

Mã hóa một hàm phương sai [] trong Python

Để tính toán phương sai, chúng ta sẽ viết mã một hàm Python có tên là variance[]. Hàm này sẽ lấy một số dữ liệu và trả về phương sai của nó. Phía trong variance[], chúng tôi sẽ tính giá trị trung bình của dữ liệu và độ lệch bình phương so với giá trị trung bình. Cuối cùng, chúng ta sẽ tính toán phương sai bằng cách tìm giá trị trung bình của các độ lệch.

Đây là cách triển khai khả thi cho variance[]:

>>> def variance[data]:
...     # Number of observations
...     n = len[data]
...     # Mean of the data
...     mean = sum[data] / n
...     # Square deviations
...     deviations = [[x - mean] ** 2 for x in data]
...     # Variance
...     variance = sum[deviations] / n
...     return variance
...

>>> variance[[4, 8, 6, 5, 3, 2, 8, 9, 2, 5]]
5.76

Đầu tiên chúng tôi tính toán số lượng quan sát [n] trong dữ liệu của chúng tôi bằng cách sử dụng chức năng tích hợp sẵn len[]. Sau đó, chúng tôi tính giá trị trung bình của dữ liệu, chia tổng tổng của các quan sát cho số quan sát.

Bước tiếp theo là tính toán độ lệch bình phương so với giá trị trung bình. Để làm điều đó, chúng tôi sử dụng list sự hiểu biết tạo ra một list của độ lệch bình phương bằng cách sử dụng biểu thức [x – mean] ** 2 ở đâu x viết tắt của mọi quan sát trong dữ liệu của chúng tôi.

Cuối cùng, chúng tôi tính toán phương sai bằng cách tổng các độ lệch và chia chúng cho số lần quan sát n.

Trong trường hợp này, variance[] sẽ tính toán phương sai tổng thể bởi vì chúng tôi đang sử dụng n của n – 1 để tính giá trị trung bình của độ lệch. Nếu chúng tôi đang làm việc với một mẫu và chúng tôi muốn ước tính phương sai của tổng thể, thì chúng tôi sẽ cần cập nhật biểu thức variance = sum[deviations] / n đến variance = sum[deviations] / [n – 1].

Chúng tôi có thể cấu trúc lại chức năng của mình để làm cho nó ngắn gọn và hiệu quả hơn. Đây là một ví dụ:

>>> def variance[data, ddof=0]:
...     n = len[data]
...     mean = sum[data] / n
...     return sum[[x - mean] ** 2 for x in data] / [n - ddof]
...

>>> variance[[4, 8, 6, 5, 3, 2, 8, 9, 2, 5]]
5.76

>>> variance[[4, 8, 6, 5, 3, 2, 8, 9, 2, 5], ddof=1]
6.4

Trong trường hợp này, chúng tôi xóa một số bước trung gian và các biến tạm thời như deviationsvariance. Chúng tôi cũng biến list hiểu thành một biểu thức máy phát điện, hiệu quả hơn nhiều về tiêu thụ bộ nhớ.

Lưu ý rằng việc triển khai này có một đối số thứ hai được gọi là ddof mặc định là 0. Đối số này cho phép chúng ta thiết lập các bậc tự do mà chúng ta muốn sử dụng khi tính toán phương sai. Ví dụ, ddof=0 sẽ cho phép chúng tôi tính toán phương sai của một tập hợp. Trong khi đó, ddof=1 sẽ cho phép chúng tôi ước tính phương sai tổng thể bằng cách sử dụng một mẫu dữ liệu.

Sử dụng pvariance [] và phương sai [] của Python

Python bao gồm một mô-đun tiêu chuẩn được gọi là statistics cung cấp một số chức năng để tính toán số liệu thống kê cơ bản của dữ liệu. Trong trường hợp này, statistics.pvariance[]statistics.variance[] là các hàm mà chúng ta có thể sử dụng để tính toán phương sai của một tập hợp và của một mẫu tương ứng.

Đây là cách Python pvariance[] làm:

>>> import statistics

>>> statistics.pvariance[[4, 8, 6, 5, 3, 2, 8, 9, 2, 5]]
5.760000000000001

Chúng tôi chỉ cần nhập statistics và sau đó gọi pvariance[] dữ liệu của chúng tôi như một đối số. Điều đó sẽ trả về phương sai của tổng thể.

Mặt khác, chúng ta có thể sử dụng Python’s variance[] để tính toán phương sai của một mẫu và sử dụng nó để ước tính phương sai của toàn bộ tổng thể. Đó là bởi vì variance[] sử dụng n – 1 của n để tính toán phương sai. Đây là cách nó hoạt động:

>>> import statistics

>>> statistics.variance[[4, 8, 6, 5, 3, 2, 8, 9, 2, 5]]
6.4

Đây là phương sai mẫu S2. Vì vậy, kết quả của việc sử dụng Python’s variance[] phải là một ước tính không thiên vị về phương sai tổng thể σ2với điều kiện là các quan sát được đại diện cho toàn bộ dân số.

Tính toán độ lệch chuẩn

Các standard deviation đo lường lượng biến đổi hoặc sự phân tán của một tập hợp các giá trị số. Độ lệch chuẩn là căn bậc hai của phương sai σ2 và được biểu thị là σ. Vì vậy, nếu chúng ta muốn tính độ lệch chuẩn, thì tất cả những gì chúng ta phải làm là lấy căn bậc hai của phương sai như sau:

$$
sigma = sqrt {sigma ^ 2}
$$

Một lần nữa, chúng ta cần phân biệt giữa độ lệch chuẩn tổng thể, là căn bậc hai của phương sai tổng thể [σ2] và độ lệch chuẩn mẫu, là căn bậc hai của phương sai mẫu [S2]. Chúng tôi sẽ biểu thị độ lệch chuẩn mẫu là S:

$$
S = sqrt {S ^ 2}
$$

Các giá trị thấp của độ lệch chuẩn cho chúng ta biết rằng các giá trị riêng lẻ gần giá trị trung bình hơn. Mặt khác, các giá trị cao cho chúng ta biết rằng các quan sát riêng lẻ khác xa với giá trị trung bình của dữ liệu.

Các giá trị nằm trong một độ lệch chuẩn của giá trị trung bình có thể được coi là khá điển hình, trong khi các giá trị cách giá trị trung bình từ ba độ lệch chuẩn trở lên có thể được coi là không điển hình hơn nhiều. Chúng còn được gọi là outliers.

Không giống như phương sai, độ lệch chuẩn sẽ được biểu thị bằng các đơn vị tương tự của các quan sát ban đầu. Do đó, độ lệch chuẩn là một thống kê có ý nghĩa hơn và dễ hiểu hơn. Lấy lại ví dụ của chúng tôi, nếu các quan sát được biểu thị bằng pound, thì độ lệch chuẩn cũng sẽ được biểu thị bằng pound.

Nếu chúng tôi đang cố gắng ước tính độ lệch chuẩn của dân số bằng cách sử dụng một mẫu dữ liệu, thì chúng tôi sẽ được phục vụ tốt hơn bằng cách sử dụng n – 1 bậc tự do. Đây là một biểu thức toán học mà chúng tôi thường sử dụng để ước tính phương sai tổng thể:
$$
sigma_x = sqrtfrac {sum_ {i = 0} ^ {n-1} {[x_i – mu_x] ^ 2}} {n-1}
$$
Lưu ý rằng đây là căn bậc hai của phương sai mẫu với n – 1 bậc tự do. Điều này tương đương với nói:
$$
S_ {n-1} = sqrt {S ^ 2_ {n-1}}
$$
Khi chúng ta biết cách tính độ lệch chuẩn bằng cách sử dụng biểu thức toán học của nó, chúng ta có thể xem cách chúng ta có thể tính toán thống kê này bằng Python.

Mã hóa một hàm stdev [] bằng Python

Để tính toán độ lệch chuẩn của một tập dữ liệu, chúng tôi sẽ dựa vào variance[]. Chúng tôi cũng sẽ sử dụng sqrt[] chức năng từ math của thư viện chuẩn Python. Đây là một hàm được gọi là stdev[] lấy dữ liệu từ một tập hợp và trả về độ lệch chuẩn của nó:

>>> import math

>>> # We relay on our previous implementation for the variance
>>> def variance[data, ddof=0]:
...     n = len[data]
...     mean = sum[data] / n
...     return sum[[x - mean] ** 2 for x in data] / [n - ddof]
...

>>> def stdev[data]:
...     var = variance[data]
...     std_dev = math.sqrt[var]
...     return std_dev

>>> stdev[[4, 8, 6, 5, 3, 2, 8, 9, 2, 5]]
2.4

Của chúng ta stdev[] lấy một số data và trả về độ lệch chuẩn dân số. Để làm điều đó, chúng tôi dựa vào variance[] để tính toán phương sai và sau đó chúng tôi sử dụng math.sqrt[] để lấy căn bậc hai của phương sai.

Nếu chúng ta muốn sử dụng stdev[] để ước tính độ lệch chuẩn tổng thể bằng cách sử dụng một mẫu dữ liệu, sau đó chúng ta chỉ cần tính phương sai với n – 1 bậc tự do như chúng ta đã thấy trước đây. Đây là một cái chung chung hơn stdev[] điều đó cũng cho phép chúng ta vượt qua các bậc tự do:

>>> def stdev[data, ddof=0]:
...     return math.sqrt[variance[data, ddof]]

>>> stdev[[4, 8, 6, 5, 3, 2, 8, 9, 2, 5]]
2.4

>>> stdev[[4, 8, 6, 5, 3, 2, 8, 9, 2, 5], ddof=1]
2.5298221281347035

Với cách triển khai mới này, chúng tôi có thể sử dụng ddof=0 để tính toán độ lệch chuẩn của một tập hợp hoặc chúng ta có thể sử dụng ddof=1 để ước tính độ lệch chuẩn của một tập hợp bằng cách sử dụng một mẫu dữ liệu.

Sử dụng pstdev [] và stdev [] của Python

Con trăn statistics cũng cung cấp các hàm để tính toán độ lệch chuẩn. Chúng tôi có thể tìm ra pstdev[]stdev[]. Hàm đầu tiên lấy dữ liệu của toàn bộ tập hợp và trả về độ lệch chuẩn của nó. Hàm thứ hai lấy dữ liệu từ một mẫu và trả về ước tính độ lệch chuẩn tổng thể.

Đây là cách các chức năng này hoạt động:

>>> import statistics

>>> statistics.pstdev[[4, 8, 6, 5, 3, 2, 8, 9, 2, 5]]
2.4000000000000004

>>> statistics.stdev[[4, 8, 6, 5, 3, 2, 8, 9, 2, 5]]
2.5298221281347035

Trước tiên, chúng tôi cần nhập statistics. Sau đó, chúng ta có thể gọi statistics.pstdev[] từ một tập hợp để có được độ lệch chuẩn của nó.

Nếu chúng ta không có dữ liệu cho toàn bộ dân số, đây là một tình huống phổ biến, thì chúng ta có thể sử dụng một mẫu dữ liệu và sử dụng statistics.stdev[] để ước tính độ lệch chuẩn dân số.

Sự kết luận

Các variancestandard deviation thường được sử dụng để đo độ biến thiên hoặc độ phân tán của tập dữ liệu. Các thước đo thống kê này bổ sung cho việc sử dụng giá trị trung bình, giá trị trung bình và chế độ khi chúng tôi mô tả dữ liệu của mình.

Trong hướng dẫn này, chúng ta đã học cách tính phương sai và độ lệch chuẩn của tập dữ liệu bằng Python. Đầu tiên chúng tôi đã học từng bước cách tạo các hàm của riêng mình để tính toán chúng và sau đó chúng tôi học cách sử dụng Python statistics như một cách nhanh chóng để tiếp cận tính toán của họ.

Chủ Đề