FundaML 3: Làm việc với các mảng ngẫu nhiên

FundaML 3: Làm việc với các mảng ngẫu nhiên

Tất cả các bài tập trong bài viết này có thể được thực hiện trực tiếp trong trình duyệt thông qua trang web fundaml

Số ngẫu nhiên đóng một vai trò cực kỳ quan trọng trong lập trình nói chung, đặc biệt là lập trình máy học.

Bạn Đang Xem: FundaML 3: Làm việc với các mảng ngẫu nhiên

Trong bài học này, chúng ta sẽ tìm hiểu về bộ tạo số ngẫu nhiên cơ bản.

3.1. Một mảng ngẫu nhiên gồm các số được phân phối đồng đều

Một trong những điều quan trọng nhất khi lập trình bất kỳ ngôn ngữ nào là cách sử dụng các hàm ngẫu nhiên. Trong bài viết này, chúng ta sẽ tìm hiểu về các hàm ngẫu nhiên trong numpy và cách sử dụng chúng trong các bài toán học máy.

3.1.1. function numpy.random.rand

Hàm numpy.random.rand trả về một mảng các số ngẫu nhiên, trong đó mỗi phần tử là một số ngẫu nhiên được phân phối đồng đều trong nửa phạm vi [0, 1):

  • Nếu số lượng đầu vào là 0, hàm trả về một đại lượng vô hướng.

  • Nếu có đầu vào (số nguyên dương), hàm này trả về một mảng ngẫu nhiên có kích thước bằng số đầu vào, mỗi kích thước bằng giá trị của đầu vào.

    3.1.2. function np.random.seed

    Các ngôn ngữ lập trình thường không tạo ra các giá trị “thực sự ngẫu nhiên”. Trên thực tế, nếu bạn mở python và bắt đầu:

    Sau đó, kết quả luôn là một số giống nhau mọi lúc (bạn thoát khỏi python và thử lại nhiều lần). Trên máy tính của tôi, kết quả luôn là 0.38919680466308004. Vì vậy, hàm ngẫu nhiên không thực sự tạo ra các giá trị ngẫu nhiên. Tuy nhiên, nếu chúng ta thực hiện hàm này nhiều lần, chúng ta sẽ nhận được các số trong phạm vi [0, 1) trong đó xác suất một điểm nằm trong khoảng [a, b] là 0 <= a <b <1 bằng b – a .

    function np.random.seed () là một hàm được cho là để giúp khởi tạo các trình tạo ngẫu nhiên. Các biến trong hạt giống thường là các số nguyên không âm 32 bit. Các giá trị biến khác nhau sẽ tạo ra các số ngẫu nhiên khác nhau.

    Hàm này được sử dụng để so khớp các kết quả từ các lần chạy khác nhau của một vấn đề học máy. Nhiều thuật toán học máy hoạt động dựa trên các phép tính ngẫu nhiên (ví dụ: giảm độ dốc ngẫu nhiên được sử dụng nhiều trong việc tối ưu hóa mạng nơ-ron). Để so sánh kết quả của nhiều lần chạy, trình tạo ngẫu nhiên thường được khởi tạo với cùng một hạt giống.

    Xem Thêm : Cho Em Hỏi Tí &quot From Me With Love Nghĩa Là Gì Ah&quot??? Ý Nghĩa Của Cụm Từ From

    Bạn có thể nhận thấy rằng trong các bài viết trước, tôi đã sử dụng np.random.seed () rất nhiều. Điều này được thực hiện để đảm bảo rằng bạn nhận được kết quả giống như trong mã ví dụ.

    Bài tập : Cho các số a, b, m, n, trong đó a & lt; b là hai số thực bất kỳ; m, n là các số nguyên dương. Viết hàm tạo mảng 2D có dạng = (m, n) có các phần tử là các số ngẫu nhiên phân bố đều trong nửa khoảng [a, b).

    Lưu ý:

    1. Để kiểm tra xem mảng trả về có phải là một mảng ngẫu nhiên của các phần tử trong một nửa ([a, b) ) hay không, tôi sẽ tính giá trị trung bình và phương sai của các phần tử trong mảng. Tôi biết rằng nếu (x ) là một biến ngẫu nhiên được phân phối bình thường trong một nửa khoảng thời gian ([a, b) ), thì kỳ vọng và phương sai của nó là: [ frac {b: + a2}; quad frac {(b-a) ^ 2} {12} ]
    2. Lưu ý rằng đây là điều kiện cần, không phải là điều kiện đủ.

      1. Nếu x là biến ngẫu nhiên có phân phối chuẩn trong nửa khoảng [0, 1) thì y = ax + b là biến ngẫu nhiên có phân phối chuẩn trong nửa khoảng [b], a + b) nếu a dương, hoặc [a + b, b) nếu a âm.
      2. 3.2. Mảng ngẫu nhiên các số có phân phối chuẩn

        Phân phối chuẩn hoặc Gaussian rất quan trọng trong các bài toán thực tế và kỹ thuật.

        function numpy.random.randn () (n cuối cùng là viết tắt của normal) có chức năng tương tự như np.random.rand, nhưng trả về một mảng có các phần tử được phân phối theo tiêu chuẩn phân phối, với kỳ vọng là 0 và a phương sai của 1.

        Bài tập: Đối với các số a, s, m, n có:

        • a là một số thực bất kỳ.
        • s là một số thực dương.
        • m, n là các số nguyên dương.
        • Xây dựng một mảng ngẫu nhiên 2D có hình dạng = (m, n) với các phần tử được phân phối chuẩn với giá trị kỳ vọng bằng a và phương sai s.

          Lưu ý: Ký hiệu ( mathcal {n} ( mu, sigma ^ 2) ) biểu thị phân phối chuẩn mong đợi ( mu ) và phương thức false ( sigma ^ 2 ). Đối với một biến ngẫu nhiên (x ) tuân theo phân phối chuẩn dự kiến ​​ ( mu ), phương sai ( sigma ^ 2 ) sẽ được biểu thị bằng (x sim mathcal {n} ( mu, sigma ^ 2) ).

          Nếu (x sim mathcal {n} ( mu, sigma ^ 2) ) thì:

          • (x + a sim mathcal {n} ( mu + a, sigma ^ 2) ) trong đó (a ) là bất kỳ số thực nào.
          • (kx sim mathcal {n} (k mu, k ^ 2 sigma ^ 2) ) trong đó (k ) là bất kỳ số thực nào.
          • 3.3. Mảng số nguyên ngẫu nhiên

            Hàm tạo mảng cho các số tự nhiên ngẫu nhiên. Bạn đọc có thể tham khảo trực tiếp cách sử dụng trong tài liệu numpy:

            Lưu ý cụm từ phân phối “đồng nhất rời rạc”. Điều này có nghĩa là mọi số nguyên trong nửa phạm vi [thấp, cao) sẽ xảy ra với xác suất như nhau. Ví dụ:

            Xem Thêm : Mặt trái xoan (Oval) là gì? Cách nhận biết ra sao? Nên để tóc gì?

            Không có bài tập nào trong phần này.

            3.4. Sắp xếp

            Mục đích của ví dụ trên là tạo một mảng 10 phần tử bao gồm các số tự nhiên từ 0 đến 9 được sắp xếp theo thứ tự ngẫu nhiên. Mảng này còn được gọi là hoán vị của các số từ 0 đến 9.

            Hoán vị ngẫu nhiên được sử dụng nhiều khi xử lý dữ liệu trong học máy. Đây là hai ví dụ điển hình.

            3.4.1. Đổ dốc Stochastic.

            Trong quá trình giảm dần độ dốc ngẫu nhiên, quan trọng nhất, tại mỗi thời điểm, chúng ta cần trộn thứ tự của dữ liệu và lấy từng lô nhỏ bên trong nó. Cụ thể, nếu bạn coi toàn bộ dữ liệu dưới dạng ma trận, thì mỗi hàng là một điểm dữ liệu, với tổng số là (n ) điểm. Trên mỗi lần lặp, chúng tôi truy xuất một tập hợp con các điểm dữ liệu (k ) và sử dụng (k ll n ) để cập nhật giải pháp. Trong một kỷ nguyên, chúng ta cần đảm bảo rằng tất cả các điểm dữ liệu được truy xuất trong một nhóm nhỏ nhất định và không có điểm nào được truy xuất nhiều lần (giả sử (n ) chia hết cho (k ).). Ngoài ra, minibatch được trích xuất cho mỗi kỷ nguyên là khác nhau.

            Điều này có thể được thực hiện bằng cách tạo một hoán vị ngẫu nhiên của các số từ (0 ) (thành (n-1 ) và coi chúng là chỉ số của điểm dữ liệu. Đối với lô nhỏ đầu tiên, chúng tôi truy xuất các số bằng tìm thấy Chỉ mục tương ứng với số (k ) đầu tiên trong hoán vị, v.v., cho đến khi lấy ra lô nhỏ cuối cùng, sau đó chúng tôi trộn dữ liệu lại để bằng một hoán vị ngẫu nhiên khác.

            3.4.2. Tách dữ liệu tàu hỏa và thử nghiệm

            (Bạn đọc có thể tham khảo cách sử dụng thư viện trực tiếp tại đây)

            Khi kiểm tra các thuật toán học máy, tập dữ liệu thu được thường được chia thành hai phần: đào tạo và kiểm tra (có thể có xác nhận bổ sung). Quan trọng là, sự phân tách này được tạo ngẫu nhiên để tránh dữ liệu bị phân tách quá sai lệch. Đây là nơi chúng ta có thể sử dụng hoán vị ngẫu nhiên.

            Giả sử có 100 điểm dữ liệu, chúng tôi cần chọn ngẫu nhiên 70 điểm để đào tạo và kiểm tra, và 30 điểm còn lại làm bộ kiểm tra. Cách dễ nhất là tạo một hoán vị ngẫu nhiên của các số từ 0 đến 99. Sau đó, 70 điểm được lập chỉ mục cho 70 phần tử đầu tiên của mảng hoán vị được sử dụng làm tập huấn luyện, và 30 điểm còn lại được sử dụng làm tập kiểm tra.

            Bài tập: Hai số tự nhiên n> k> 0 Viết hàm sample_no_replace (n, k) trả về ngẫu nhiên k số tự nhiên trong tập {0, 1, …, n-1 }, để không có hai số nào giống nhau.

            Tính ngẫu nhiên ở đây sẽ được xác minh bằng cách gọi sample_no_replace (n, k) nhiều lần. Trong tất cả các kết quả trả về, mỗi số trong tập {0, 1, …, n-1} phải xảy ra gần như thường xuyên như nhau.

            Giả sử x là một ma trận chứa các điểm dữ liệu trong n hàng. Nếu idx = sample_no_replace (n, k) là kết quả trả về của hàm bạn đã viết, thì x [idx,:] có thể nhận được k điểm ngẫu nhiên của x.

            (còn nữa)

Nguồn: https://anhvufood.vn
Danh mục: Kinh Nghiệm

Trả lời

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *