1. Phân phối dữ liệu là gì?

Phân phối dữ liệu là danh sách tất cả các giá trị có thể có và tần suất xuất hiện của mỗi giá trị đó.

Những danh sách các giá trị kèm theo tần suất xuất hiện của chúng rất quan trọng khi làm việc với thống kê và khoa học dữ liệu.

Mô-đun Numpy cung cấp các hàm  được sử dụng để trả về các phân phối dữ liệu được tạo ngẫu nhiên. Trong bài viết này, chúng ta sẽ sử hàm random.choice() để thực hiện việc này!

2. Phân phối ngẫu nhiên trong Numpy

Phân phối ngẫu nhiên là một tập hợp các số ngẫu nhiên tuân theo một hàm mật độ xác suất nhất định.

Hàm mật độ xác suất: là một hàm mô tả một xác suất liên tục, tức là xác suất của tất cả các giá trị trong một khoảng liên tục. Xác suất được đặt bởi một số từ 0 đến 1, trong đó 0 có nghĩa là giá trị sẽ không bao giờ xảy ra và 1 có nghĩa là giá trị sẽ luôn xảy ra.

Chúng ta có thể tạo các số ngẫu nhiên dựa trên các xác suất xác định sẵn bằng cách sử dụng hàm random.choice(). Ví dụ tạo mảng 1 chiều chứa 100 phần tử, trong đó mỗi phần tử sẽ có giá trị thuộc trong các số [3, 5, 7, 9] Trong đó ta có các xác suất p = [0.1, 0.4, 0, 0.5] tương ứng với tần xuất, xuất hiện các giá trị như sau:

  • Xác suất để giá trị 3 xuất hiện là 0,1
  • Xác suất để giá trị 5 xuất hiện là 0,4
  • Xác suất để giá trị 7 xuất hiện là 0
  • Xác suất để giá trị 9 xuất hiện là 0.5
from numpy import random

x = random.choice([3, 5, 7, 9], p=[0.1, 0.4, 0, 0.5], size=(100))

print(x)

Kết quả:

[5 5 5 5 3 5 9 5 9 5 9 5 9 9 5 5 5 5 9 3 9 9 5 9 5 9 9 5 5 9 9 9 9 9 5 9 5
 5 5 5 9 5 9 9 3 5 5 5 9 9 5 5 9 9 9 9 5 9 9 9 9 9 5 5 3 5 9 9 5 5 5 5 5 9
 9 9 5 5 5 5 5 9 9 9 5 5 9 9 3 9 9 9 5 5 5 9 3 9 5 5]

Lưu ý: Tổng của các xác xuất phải bằng 1. Tương đương với, 0.1 + 0.4 + 0 + 0.5 = 1. Vì xác xuất để giá trị 7 xuất hiện bằng 0 nên cho dù chúng ta tăng kích thước mảng lên 1000 thậm chí 100000 lần thì giá trị 7 cũng không thể xuất hiện trong mảng.

Bạn có thể trả về một mảng 2 chiều, với kích thước m x n dựa vào phân phối dữ liệu ngẫu nhiên. Ví dụ tạo mảng 2 chiều có kích thước 3 x 5, trong đó mỗi phần tử trong mảng sẽ có giá trị thuộc trong các số [3, 5, 7, 9]. Trong đó ta có các xác suất p = [0.1, 0.4, 0, 0.5] tương ứng với tần suất xuất hiện các giá trị trên.

from numpy import random

x = random.choice([3, 5, 7, 9], p=[0.1, 0.4, 0, 0.5], size=(3,5))

print(x)

Kết quả:

[[7 7 3 7 7]
 [5 5 5 5 3]
 [3 7 7 5 3]]