Một hệ thống gọn gàng trong Python
Hướng dẫn này minh họa cách tính tạp chất và mức tăng thông tin trong Python bằng cách sử dụng các mô-đun probs = fruits.value_counts(normalize=True) probs2 và probs = fruits.value_counts(normalize=True) probs3 cho máy học dựa trên thông tin. Các phương pháp tính toán tạp chất được mô tả ở đây như sau Show
Chúng ta bắt đầu với một ví dụ đơn giản, tiếp theo là ví dụ về Thực vật trong Chương "Học tập dựa trên thông tin" trong sách giáo khoa Một ví dụ đơn giảnGiả sử bạn đang đi dã ngoại và bạn đang chuẩn bị một giỏ trái cây ngon Trong 1] import warnings warnings.filterwarnings("ignore") import pandas as pd import numpy as np Trong 2] lst = ['apple']*3 + ['orange']*2 + ['banana']*2 fruits = pd.Series(lst) print(fruits) 0 apple 1 apple 2 apple 3 orange 4 orange 5 banana 6 banana dtype: object Đây là tần suất tương đối của từng quả trong rổ, có thể coi đây là phân phối xác suất của các quả Trong 3] probs = fruits.value_counts(normalize=True) probs Ra[3] apple 0.428571 orange 0.285714 banana 0.285714 dtype: float64 Nếu thích, bạn có thể tự định nghĩa phân phối xác suất như bên dưới Trong [4] probs_by_hand = [3/7, 2/7, 2/7] print(probs_by_hand) ________số 8 Nhớ lại rằng mô hình của Shannon định nghĩa entropy là $$H(x). = - \sum_{i=1}^{\ell}(P(t=i) \times \log_{2}(P(t=i))$$ Ý tưởng về entropy là a càng không đồng nhất và không tinh khiết đặc điểm là, entropy càng cao. Ngược lại, một tính năng càng đồng nhất và thuần khiết thì entropy càng thấp. Phép tính sau đây cho thấy cách tính tạp chất của giỏ trái cây này bằng cách sử dụng tiêu chí entropy Trong [5] entropy = -1 * np.sum(np.log2(probs) * probs) entropy Ra[5] probs = fruits.value_counts(normalize=True) probs0 Chỉ số tạp chất gini được xác định như sau. $$ \mbox{Gini}(x). = 1 - \sum_{i=1}^{\ell}P(t=i)^{2}$$ Ý tưởng về chỉ số Gini cũng giống như trong entropy theo nghĩa là một tính năng càng không đồng nhất và không tinh khiết thì , chỉ số Gini càng cao Một thuộc tính hay của chỉ số Gini là nó luôn nằm trong khoảng từ 0 đến 1 và điều này có thể giúp so sánh các chỉ số Gini qua các tính năng khác nhau dễ dàng hơn Tạp chất của giỏ trái cây của chúng tôi sử dụng chỉ số Gini được tính như sau Trong [6] probs = fruits.value_counts(normalize=True) probs1 Ra[6] lst = ['apple']*3 + ['orange']*2 + ['banana']*2 fruits = pd.Series(lst) print(fruits)0 Để so sánh, hãy tính tạp chất của một rổ quả khác có 7 quả khác nhau với tần suất bằng nhau Trong [7] lst = ['apple']*3 + ['orange']*2 + ['banana']*2 fruits = pd.Series(lst) print(fruits)1 lst = ['apple']*3 + ['orange']*2 + ['banana']*2 fruits = pd.Series(lst) print(fruits)2 Ra[7] lst = ['apple']*3 + ['orange']*2 + ['banana']*2 fruits = pd.Series(lst) print(fruits)3 Trong [8] lst = ['apple']*3 + ['orange']*2 + ['banana']*2 fruits = pd.Series(lst) print(fruits)4 Ra[8] lst = ['apple']*3 + ['orange']*2 + ['banana']*2 fruits = pd.Series(lst) print(fruits)5 Trong [9] lst = ['apple']*3 + ['orange']*2 + ['banana']*2 fruits = pd.Series(lst) print(fruits)6 Ra[9] lst = ['apple']*3 + ['orange']*2 + ['banana']*2 fruits = pd.Series(lst) print(fruits)7 Đúng như dự đoán, cả chỉ số entropy và Gini của giỏ trái cây thứ hai đều cao hơn giỏ trái cây thứ nhất Ví dụ thực vậtBây giờ chúng ta cùng tìm hiểu chi tiết các phép tính tạp chất cho bộ dữ liệu Thực vật ở Chương 5 trong sách giáo khoa Trước tiên hãy nhập tập dữ liệu từ Đám mây Trong [10] lst = ['apple']*3 + ['orange']*2 + ['banana']*2 fruits = pd.Series(lst) print(fruits)8 Ra[10] suốidốcđộ caothực vật0Dốc sai caochapparal1Đúngtrung bìnhthấp ven sông2Dốc đúngtrung bìnhven sông3Saidốctrung bìnhchapparal4Sai bằng phẳngcaocây lá kim5Truestepcao nhấtcây lá kim6Truestepcaochapparal Để thuận tiện, chúng tôi định nghĩa một hàm có tên là probs = fruits.value_counts(normalize=True) probs4 để tính toán tạp chất của một tính năng bằng cách sử dụng chỉ số entropy hoặc gini Trong [11] lst = ['apple']*3 + ['orange']*2 + ['banana']*2 fruits = pd.Series(lst) print(fruits)9 0 apple 1 apple 2 apple 3 orange 4 orange 5 banana 6 banana dtype: object0 Hãy tính entropy của tính năng mục tiêu "thực vật" bằng cách sử dụng chức năng mới của chúng tôi Trong [12] 0 apple 1 apple 2 apple 3 orange 4 orange 5 banana 6 banana dtype: object1 Ra[12] 0 apple 1 apple 2 apple 3 orange 4 orange 5 banana 6 banana dtype: object2 Hãy tính toán mức tăng thông tin cho việc chia nhỏ dựa trên một tính năng mô tả để tìm ra tính năng tốt nhất để chia nhỏ. Đối với nhiệm vụ này, chúng tôi làm như sau
Chúng tôi sẽ xác định một chức năng khác để đạt được điều này, được gọi là probs = fruits.value_counts(normalize=True) probs5 Ví dụ, chúng ta hãy xem các cấp độ của tính năng "độ cao" Trong [13] 0 apple 1 apple 2 apple 3 orange 4 orange 5 banana 6 banana dtype: object3 Ra[13] 0 apple 1 apple 2 apple 3 orange 4 orange 5 banana 6 banana dtype: object4 Hãy xem các phân vùng trông như thế nào đối với tính năng này và cách tính toán tương ứng đang sử dụng tiêu chí phân chia entropy Trong [14] 0 apple 1 apple 2 apple 3 orange 4 orange 5 banana 6 banana dtype: object5 0 apple 1 apple 2 apple 3 orange 4 orange 5 banana 6 banana dtype: object6 Ý tưởng ở đây là, đối với mỗi một trong 4 phân vùng dữ liệu ở trên,
Chẳng hạn, tạp chất còn lại được đo bằng entropy cho tính năng độ cao là 0. 918 x (3/7) + 1. 0 x (2/7) = 0. 679 Mức tăng thông tin sau đó được tính là 1. 557 - 0. 679 = 0. 878 Bây giờ chúng tôi đã sẵn sàng để xác định chức năng của chúng tôi. Có một chút mã hóa ở đây, nhưng chúng tôi có thể đảm bảo với bạn rằng việc cố gắng tìm hiểu cách mọi thứ hoạt động ở đây sẽ rất bổ ích để cải thiện kỹ năng lập trình Python của bạn Trong [15] 0 apple 1 apple 2 apple 3 orange 4 orange 5 banana 6 banana dtype: object7 Bây giờ chức năng của chúng tôi đã được xác định, chúng tôi sẽ gọi nó cho từng tính năng mô tả trong tập dữ liệu. Trước tiên, hãy gọi nó bằng cách sử dụng tiêu chí phân chia entropy Trong [16] 0 apple 1 apple 2 apple 3 orange 4 orange 5 banana 6 banana dtype: object8 0 apple 1 apple 2 apple 3 orange 4 orange 5 banana 6 banana dtype: object9 Bây giờ, hãy gọi nó bằng cách sử dụng tiêu chí phân chia chỉ số gini Trong [17] probs = fruits.value_counts(normalize=True) probs0 probs = fruits.value_counts(normalize=True) probs1 Chúng tôi quan sát thấy rằng, với cả tiêu chí phân chia chỉ số entropy và gini, mức thu được thông tin cao nhất xảy ra với tính năng "độ cao" Đây là phần tách tại nút gốc của cây quyết định tương ứng. Trong các lần phân tách tiếp theo, quy trình trên được lặp lại với tập hợp con của toàn bộ tập dữ liệu trong nhánh hiện tại cho đến khi đạt được điều kiện kết thúc Công thức cho tỷ lệ là gì?Tỷ số so sánh hai số, thường bằng cách chia chúng. Nếu bạn đang so sánh một điểm dữ liệu (A) với một điểm dữ liệu khác (B), công thức của bạn sẽ là A/B . Điều này có nghĩa là bạn đang chia thông tin A cho thông tin B. Ví dụ: nếu A là 5 và B là 10, tỷ lệ của bạn sẽ là 5/10.
Làm cách nào để chia 2 mảng NumPy?Sử dụng numpy. divide() hàm để chia các phần tử mảng đầu tiên (arr1) với các phần tử mảng thứ hai (arr2) . Cả mảng 1 và mảng 2 phải có cùng hình dạng và phần tử trong mảng 2 không được bằng 0; .
Làm thế nào để tính tỷ lệ Sharpe ở gấu trúc?Cách tính tỷ lệ Sharpe với Pandas và NumPy . Bước 1. Công thức cho Tỷ lệ Sharpe và cách diễn giải kết quả. . Bước 2. Nhận danh mục giá cổ phiếu với Pandas Datareader. . Bước 3. Tính log-return của danh mục đầu tư. . Bước 4. Trực quan hóa log-return của danh mục đầu tư |