Làm cách nào để tính Gini bằng Python?

Hệ số Gini là thước đo sự bất bình đẳng. Nó được mô tả tốt trên trang wiki của nó và cũng có nhiều ví dụ đơn giản hơn ở đây

Tôi không tìm thấy việc triển khai trong gói R ineq đặc biệt mang tính đối thoại và tôi cũng đang làm việc trên một dự án Python, vì vậy tôi đã viết hàm này để tính Hệ số Gini từ danh sách các giá trị thực. Nó chỉ là một tích hợp nhỏ thú vị dưới dạng tổng kết. Không tệ

def gini(list_of_values):
    sorted_list = sorted(list_of_values)
    height, area = 0, 0
    for value in sorted_list:
        height += value
        area += height - value / 2.
    fair_area = height * len(list_of_values) / 2.
    return (fair_area - area) / fair_area

Đối với tôi, điều này khá dễ đọc và lập bản đồ độc đáo cho bức tranh tinh thần về việc cộng diện tích dưới đường cong Lorenz và sau đó so sánh nó với diện tích dưới đường bình đẳng. Nó chỉ là thanh và hình tam giác. Và tôi không nghĩ nó kém hiệu quả hơn cách tính toán của ineq

(cập nhật. lalala, tôi nghĩ rằng có một số trường hợp khó khăn khi cách tính gini tiêu chuẩn và cách này không thống nhất với nhau; . )

Bạn không thể có đủ cây quyết định, phải không? . Không chỉ vậy, trong bài viết này, bạn còn được tìm hiểu về Gini Impurity, một phương pháp giúp xác định các tuyến phân loại hiệu quả nhất trong cây quyết định

Một vài điều kiện tiên quyết. vui lòng đọc bài viết này và bài viết này để hiểu những kiến ​​thức cơ bản về phân tích dự đoán và học máy. Ngoài ra, hãy cài đặt matplotlib, pandas và scikit-learning để bạn có thể cùng tôi viết mã liền mạch

Nếu bạn không có môi trường Python cho khoa học dữ liệu, hãy sử dụng một trong các tùy chọn này để có được một

  • Nhận máy chủ dữ liệu của riêng bạn và cài đặt các thư viện khoa học dữ liệu phổ biến nhất
  • Cài đặt Anaconda trên máy tính cục bộ của bạn

Một thí nghiệm khởi động cho cây phân loại

Giả sử anh họ của bạn điều hành một sở thú chỉ dành riêng cho hổ và ngựa vằn. Cũng giả sử anh họ của bạn rất tệ với động vật, vì vậy họ không thể phân biệt được ngựa vằn với hổ. 😔

Bây giờ hãy tưởng tượng một tình huống mà một số con hổ và ngựa vằn thoát ra. Đây là vấn đề. một số con hổ rất nguy hiểm, vì chúng còn trẻ và tràn đầy năng lượng, vì vậy chúng rất thích săn lùng ngựa vằn (những con hổ già biết chúng thường xuyên được nhân viên vườn thú cho ăn nên chúng không thèm săn lùng).

Nhân viên sở thú đang tìm kiếm những con vật trốn thoát. Nếu họ nhìn thấy một con, họ ngay lập tức gọi cho anh họ của bạn ở trụ sở chính để hỏi họ nên làm gì với con vật

  • nếu đó là một con ngựa vằn, họ sẽ dụ nó về chỗ của nó bằng cỏ,
  • nếu đó là một con hổ bình thường, họ dụ nó trở lại vị trí của nó bằng một viên thịt,
  • nếu đó là một con hổ nguy hiểm, họ sẽ bắt nó bằng một chiếc lưới đặc biệt (sau đó mang nó trở lại cho những con hổ)

Vì những lý do dễ hiểu, anh họ của bạn muốn xác định tất cả các con vật càng sớm càng tốt. Nhưng họ có kiến ​​thức rất hạn chế về chúng

Làm cách nào để tính Gini bằng Python?

Anh họ của bạn nên hỏi những người trông coi vườn thú những câu hỏi nào để xác định các con vật càng sớm càng tốt?

Bạn có thể cố gắng tự mình tìm ra giải pháp, nhưng có một cách tiếp cận mà cây phân loại sử dụng để giải quyết các vấn đề như thế này. Nó được gọi là tạp chất Gini

Chờ đợi

Gì cơ?

Gini tạp chất là gì và làm thế nào để tính toán nó?

Gini tạp chất là một trong những cách tiếp cận được sử dụng phổ biến nhất với cây phân loại để đo mức độ không tinh khiết của thông tin trong một nút. Nó giúp xác định câu hỏi nào cần hỏi trong mỗi nút để phân loại danh mục (e. g. ngựa vằn) theo cách hiệu quả nhất có thể

Công thức của nó là

1 - p12 - p22

Hoặc là

1 - (the probability of belonging to the first category)2  - (the probability of belonging to the second category)2

(Công thức cũng có phiên bản khác, nhưng nó sẽ mang lại kết quả tương tự. )

Gini tạp chất là trung tâm của cây phân loại; . Một số nhỏ hơn có nghĩa là sự phân tách đã làm rất tốt việc tách các lớp khác nhau

Mục tiêu của cây phân loại là tìm ra các phần tách tốt nhất với Tạp chất Gini thấp nhất có thể ở mỗi bước. Điều này cuối cùng dẫn đến 100% tinh khiết (=chỉ chứa một loại giá trị phân loại, e. g. chỉ ngựa vằn) nút lá

Hãy xem qua một số ví dụ để hiểu rõ hơn về khái niệm này

Tính Gini tạp chất cho các giá trị phân loại

Quay lại với anh em họ của bạn và những con vật bỏ trốn, trước tiên họ có thể hỏi liệu một con vật có ăn thịt không

Làm cách nào để tính Gini bằng Python?

Sự phân tách này dẫn đến hai nút. nút bên trái chứa tất cả hổ (ngay cả những con nguy hiểm), nút bên phải chỉ chứa ngựa vằn

Bây giờ chúng ta có thể tính Gini tạp chất cho mỗi nút

  • Tạp chất Gini của nút phải. 1 - (probability of belonging to tigers)2 - (probability of belonging to zebras)2 = 1 - 12 - 02 = 1 - 1 - 0 = 0
  • Tạp chất Gini của nút trái. 1 - (probability of belonging to tigers)2 - (probability of belonging to zebras)2 =
    X = pd.get_dummies(df.drop("animal", axis=1), drop_first=True)
    y = df["animal"]
    from sklearn.model_selection import train_test_split
    X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=44)
    1

Gini tạp chất bằng 0 có nghĩa là không có tạp chất, vì vậy dữ liệu trong nút của chúng tôi là hoàn toàn tinh khiết. Hoàn toàn thuần túy có nghĩa là các phần tử trong nút chỉ thuộc một loại (e. g. tất cả chúng đều là ngựa vằn)

Có thể xảy ra trường hợp chúng ta hoàn toàn không chắc một phần tử thuộc về danh mục nào. nếu chúng ta có bốn con ngựa vằn và bốn con hổ trong một nút, thì đó là tình huống 50-50. Trong những trường hợp như vậy Gini tạp chất là

X = pd.get_dummies(df.drop("animal", axis=1), drop_first=True)
y = df["animal"]
from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=44)
2. (Đó là.
X = pd.get_dummies(df.drop("animal", axis=1), drop_first=True)
y = df["animal"]
from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=44)
3)

Chúng ta đã thấy hai ví dụ để tính Gini tạp chất của một nút. Nhưng cũng tồn tại một giá trị Tạp chất Gini cho toàn bộ quá trình phân tách. Để tính toán nó, chúng ta phải lấy giá trị trung bình có trọng số của các giá trị Tạp chất Gini của các nút

  1. trước tiên hãy đếm xem chúng ta có tổng cộng bao nhiêu phần tử.
    X = pd.get_dummies(df.drop("animal", axis=1), drop_first=True)
    y = df["animal"]
    from sklearn.model_selection import train_test_split
    X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=44)
    4 (
    X = pd.get_dummies(df.drop("animal", axis=1), drop_first=True)
    y = df["animal"]
    from sklearn.model_selection import train_test_split
    X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=44)
    5 hổ và
    X = pd.get_dummies(df.drop("animal", axis=1), drop_first=True)
    y = df["animal"]
    from sklearn.model_selection import train_test_split
    X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=44)
    5 ngựa vằn),
  2. sau đó đếm xem chúng ta có bao nhiêu phần tử trong mỗi nút (trái.
    X = pd.get_dummies(df.drop("animal", axis=1), drop_first=True)
    y = df["animal"]
    from sklearn.model_selection import train_test_split
    X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=44)
    5, đúng.
    X = pd.get_dummies(df.drop("animal", axis=1), drop_first=True)
    y = df["animal"]
    from sklearn.model_selection import train_test_split
    X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=44)
    5),
  3. sau đó chia các số này cho tổng số phần tử và nhân chúng với giá trị Tạp chất Gini của nút tương ứng (trái.
    X = pd.get_dummies(df.drop("animal", axis=1), drop_first=True)
    y = df["animal"]
    from sklearn.model_selection import train_test_split
    X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=44)
    9, phải.
    X = pd.get_dummies(df.drop("animal", axis=1), drop_first=True)
    y = df["animal"]
    from sklearn.model_selection import train_test_split
    X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=44)
    9),
  4. và thêm chúng lên.
    from sklearn.tree import DecisionTreeClassifier
    model = DecisionTreeClassifier()
    model.fit(X_train, y_train)
    predictions = model.predict(X_test)
    predictions
    1

Kết quả là

from sklearn.tree import DecisionTreeClassifier
model = DecisionTreeClassifier()
model.fit(X_train, y_train)
predictions = model.predict(X_test)
predictions
2 bởi vì với một câu hỏi, chúng tôi đã tách được hoàn toàn ngựa vằn và hổ. Tuy nhiên, anh họ của bạn vẫn không biết cách xác định những con hổ nguy hiểm. 😭

Nếu bạn muốn giúp cô ấy/anh ấy, hãy đọc thêm

Tính tạp chất Gini cho các giá trị số/liên tục

Chúng tôi biết rằng bất kỳ con hổ nào dưới 4 tuổi đều được coi là nguy hiểm

Làm cách nào để tính Gini bằng Python?

Tôi cho rằng bạn biết ngay cách chúng tôi có thể xác định những con hổ nguy hiểm, nhưng nó là một ví dụ điển hình trong việc giải thích cách Gini tạp chất hoạt động với các giá trị liên tục

Vì vậy, đây là cách phân chia tốt nhất được xác định bằng các giá trị số

  1. sắp xếp dữ liệu số theo thứ tự tăng dần (nó đã được thực hiện trong ảnh chụp màn hình ở trên),
  2. lấy trung bình cộng của hai số lân cận,
  3. sau đó tính Gini tạp chất cho giá trị trung bình,
  4. cuối cùng, chọn loại có giá trị Tạp chất Gini thấp nhất

Đây là bước 2 trông như thế nào

Làm cách nào để tính Gini bằng Python?

Sau khi chúng tôi có giá trị trung bình, chúng tôi cần tính giá trị Tạp chất Gini của mỗi lần phân tách có thể. Đối với

from sklearn.tree import DecisionTreeClassifier
model = DecisionTreeClassifier()
model.fit(X_train, y_train)
predictions = model.predict(X_test)
predictions
3 nó được đưa ra bởi
from sklearn.tree import DecisionTreeClassifier
model = DecisionTreeClassifier()
model.fit(X_train, y_train)
predictions = model.predict(X_test)
predictions
4

Làm cách nào để tính Gini bằng Python?

Đối với

X = pd.get_dummies(df.drop("animal", axis=1), drop_first=True)
y = df["animal"]
from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=44)
5 nó được đưa ra bởi
from sklearn.tree import DecisionTreeClassifier
model = DecisionTreeClassifier()
model.fit(X_train, y_train)
predictions = model.predict(X_test)
predictions
6

Làm cách nào để tính Gini bằng Python?
ví dụ cây phân loại tạp chất Gini

Đối với

from sklearn.tree import DecisionTreeClassifier
model = DecisionTreeClassifier()
model.fit(X_train, y_train)
predictions = model.predict(X_test)
predictions
7 nó được đưa ra bởi
from sklearn.tree import DecisionTreeClassifier
model = DecisionTreeClassifier()
model.fit(X_train, y_train)
predictions = model.predict(X_test)
predictions
8

Làm cách nào để tính Gini bằng Python?

Dễ dàng nhận thấy rằng sự phân chia tốt nhất là phân chia tại

X = pd.get_dummies(df.drop("animal", axis=1), drop_first=True)
y = df["animal"]
from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=44)
5 – nó phân biệt hoàn hảo những con hổ nguy hiểm với những con hổ bình thường

Với điều này, chúng tôi kết luận những gì bạn nên đề nghị với anh họ của bạn. đầu tiên hỏi xem con vật có ăn thịt không, sau đó hỏi xem nó có dưới 4 tuổi không

Bây giờ chúng ta đã biết cách tính Gini tạp chất cho cả giá trị phân loại và số, đã đến lúc mã hóa cây phân loại đầu tiên của chúng ta

Tháng đầu tiên của nhà khoa học dữ liệu cơ sở

Một khóa học trực tuyến thực tế 100%. Mô phỏng 6 tuần để trở thành nhà khoa học dữ liệu cấp dưới tại một công ty khởi nghiệp thực tế

“Giải quyết các vấn đề thực tế, có được trải nghiệm thực tế - giống như trong một công việc khoa học dữ liệu thực sự. ”

Tìm hiểu thêm

Hãy viết mã Cây quyết định (Cây phân loại) bằng Python

Mã hóa cây phân loại I. – Chuẩn bị dữ liệu

Chúng tôi sẽ sử dụng bộ dữ liệu sở thú từ bài viết hướng dẫn về gấu trúc đầu tiên của Tomi Mester. Nó chỉ có một vài hàng (22) nhưng sẽ rất hoàn hảo để học cách xây dựng cây phân loại với scikit-learning

Chúng tôi sẽ sử dụng cây của mình để dự đoán loài động vật dựa trên nhu cầu nước của nó và loại thức ăn mà nó ưa thích. Bạn có thể tải xuống bộ dữ liệu tại đây. (Liên kết đầy đủ. 46. 101. 230. 157/datacoding101/zoo_python. csv)

Để bắt đầu, hãy đọc và kiểm tra năm hàng đầu tiên của dữ liệu

Làm cách nào để tính Gini bằng Python?

Với

from sklearn.tree import plot_tree
plt.figure(figsize=(10,8), dpi=150)
plot_tree(model, feature_names=X.columns, filled=True);
0, chúng tôi có thể kiểm tra loại động vật mà chúng tôi đang xử lý

Làm cách nào để tính Gini bằng Python?

Chúng tôi sẽ không cần id, vì vậy hãy bỏ cột đó

Làm cách nào để tính Gini bằng Python?

Vì các cây quyết định trong scikit-learning không thể hoạt động với các giá trị chuỗi, nên chúng tôi cần chuyển đổi các chuỗi thành số với

from sklearn.tree import plot_tree
plt.figure(figsize=(10,8), dpi=150)
plot_tree(model, feature_names=X.columns, filled=True);
1

Làm cách nào để tính Gini bằng Python?

from sklearn.tree import plot_tree
plt.figure(figsize=(10,8), dpi=150)
plot_tree(model, feature_names=X.columns, filled=True);
2 xóa cột
from sklearn.tree import plot_tree
plt.figure(figsize=(10,8), dpi=150)
plot_tree(model, feature_names=X.columns, filled=True);
3 khỏi khung dữ liệu của chúng tôi (
from sklearn.tree import plot_tree
plt.figure(figsize=(10,8), dpi=150)
plot_tree(model, feature_names=X.columns, filled=True);
4), do đó,
from sklearn.tree import plot_tree
plt.figure(figsize=(10,8), dpi=150)
plot_tree(model, feature_names=X.columns, filled=True);
1 vẫn hoạt động với
from sklearn.tree import plot_tree
plt.figure(figsize=(10,8), dpi=150)
plot_tree(model, feature_names=X.columns, filled=True);
6 và
from sklearn.tree import plot_tree
plt.figure(figsize=(10,8), dpi=150)
plot_tree(model, feature_names=X.columns, filled=True);
7. Nhưng vì nó chỉ ảnh hưởng đến các cột có chuỗi và
from sklearn.tree import plot_tree
plt.figure(figsize=(10,8), dpi=150)
plot_tree(model, feature_names=X.columns, filled=True);
6 lưu trữ các giá trị số, nên
from sklearn.tree import plot_tree
plt.figure(figsize=(10,8), dpi=150)
plot_tree(model, feature_names=X.columns, filled=True);
1 chỉ chuyển đổi các giá trị của
from sklearn.tree import plot_tree
plt.figure(figsize=(10,8), dpi=150)
plot_tree(model, feature_names=X.columns, filled=True);
7 thành giá trị số. Trong khi làm như vậy, nó sẽ tạo ra hai cột mới (1 - p12 - p221 và 1 - p12 - p222)

Đây là cách đọc hai cột mới

Làm cách nào để tính Gini bằng Python?

1 - p12 - p221 và 1 - p12 - p222 không thể giữ cùng một giá trị cho một con vật nhất định (không thể là 1 hoặc 0; một con vật ăn thịt hoặc rau), sử dụng một trong số chúng là đủ. Chẳng hạn, 1 - p12 - p221 = 0 và 1 - p12 - p222 = 1 có nghĩa giống nhau. con vật này ăn rau

Để loại bỏ một trong các cột, chúng tôi sử dụng 1 - p12 - p227

pd.get_dummies(df.drop("animal", axis=1), drop_first=True)

Kết quả là, 1 - p12 - p221 bị xóa

Làm cách nào để tính Gini bằng Python?

Bây giờ chúng tôi đã sẵn sàng để tạo cây phân loại của mình

Mã hóa cây phân loại II. – Xác định dữ liệu đầu vào và đầu ra, và chia nhỏ tập dữ liệu

Chúng tôi bắt đầu với vài dòng này

X = pd.get_dummies(df.drop("animal", axis=1), drop_first=True)
y = df["animal"]
from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=44)

Mọi thứ chúng tôi vừa làm trong phần trước, chúng tôi lưu vào 1 - p12 - p229. 1 - p12 - p229 nắm giữ các tính năng (còn gọi là yếu tố dự đoán) cho mô hình học máy của chúng tôi

Tương tự, 1 - (the probability of belonging to the first category)2  - (the probability of belonging to the second category)21 giữ (1 - (the probability of belonging to the first category)2  - (the probability of belonging to the second category)22) các con vật, hay còn gọi là phản ứng mà cây phân loại của chúng ta sẽ dự đoán. liệu một loài động vật nhất định dựa trên nhu cầu nước của nó và loại thức ăn mà nó ăn là voi, hổ, v.v.

Sau đó, chúng tôi nhập 1 - (the probability of belonging to the first category)2  - (the probability of belonging to the second category)23 (dòng thứ ba) để lưu 70% các tính năng và phản hồi của chúng tôi vào 1 - (the probability of belonging to the first category)2  - (the probability of belonging to the second category)24 và 1 - (the probability of belonging to the first category)2  - (the probability of belonging to the second category)25 tương ứng, và 30% còn lại vào 1 - (the probability of belonging to the first category)2  - (the probability of belonging to the second category)26 và 1 - (the probability of belonging to the first category)2  - (the probability of belonging to the second category)27 (_______41_______8 xử lý tất cả những điều này trong dòng thứ tư)

Đây là một bước cần thiết trong học máy vì chúng tôi chỉ muốn đào tạo mô hình của mình trên một phần dữ liệu của mình, sau đó kiểm tra hiệu suất của nó trên dữ liệu chưa từng thấy (dữ liệu thử nghiệm)

Và như lần chạm cuối cùng, 1 - (the probability of belonging to the first category)2  - (the probability of belonging to the second category)29 chỉ đảm bảo rằng bạn sẽ nhận được kết quả giống như tôi nếu bạn viết mã cùng với tôi

Đây là ảnh chụp màn hình về những gì chúng tôi đã làm cho đến nay;

Làm cách nào để tính Gini bằng Python?

Mã hóa cây phân loại III. – Tạo cây phân loại với scikit-learning

Bây giờ chúng ta có thể bắt đầu tạo mô hình cây phân loại của mình

from sklearn.tree import DecisionTreeClassifier
model = DecisionTreeClassifier()
model.fit(X_train, y_train)
predictions = model.predict(X_test)
predictions

Đây là những gì đang xảy ra

  • 1 - (probability of belonging to tigers)2 - (probability of belonging to zebras)20. việc nhập này giúp chúng tôi có thể tạo cây phân loại,
  • 1 - (probability of belonging to tigers)2 - (probability of belonging to zebras)21. chúng ta tạo mô hình cây phân loại cơ bản,
  • 1 - (probability of belonging to tigers)2 - (probability of belonging to zebras)22. chúng tôi đào tạo cây của mình trên dữ liệu dành riêng cho đào tạo (_______41_______4 và 1 - (the probability of belonging to the first category)2  - (the probability of belonging to the second category)25),
  • sau đó chúng tôi cung cấp dữ liệu mô hình của mình mà nó chưa từng thấy trước đây (1 - (probability of belonging to tigers)2 - (probability of belonging to zebras)25),
  • và kiểm tra những gì nó dự đoán (1 - (probability of belonging to tigers)2 - (probability of belonging to zebras)26)

Thấp và kìa, những dự đoán

Làm cách nào để tính Gini bằng Python?

Chúng ta có thể đánh giá độ chính xác của những dự đoán này nếu chúng ta kiểm tra 1 - (the probability of belonging to the first category)2  - (the probability of belonging to the second category)27 (biến chứa giá trị thực cho các hàng 1 - (the probability of belonging to the first category)2  - (the probability of belonging to the second category)26 tương ứng)

Làm cách nào để tính Gini bằng Python?

Như bạn có thể thấy, mô hình của chúng tôi đã hoàn thành khá tốt. 🥳

Một lưu ý phụ thú vị. 1 - (probability of belonging to tigers)2 - (probability of belonging to zebras)29 cho thấy tầm quan trọng tương đối của từng tính năng trong dự đoán của mô hình

Làm cách nào để tính Gini bằng Python?

Nếu bạn cộng hai giá trị, bạn sẽ nhận được 100% – vì vậy, ảnh chụp màn hình cho chúng tôi biết rằng khi dự đoán một con vật, một tính năng có giá trị hơn nhiều (gần 81%) so với tính năng kia (19%). Nhưng cái nào chính xác?

Hãy cùng tìm hiểu với =0

Làm cách nào để tính Gini bằng Python?

Bởi vì 1 - (probability of belonging to tigers)2 - (probability of belonging to zebras)29 theo sau thứ tự của =2, nên chúng ta có thể dễ dàng thấy rằng

from sklearn.tree import plot_tree
plt.figure(figsize=(10,8), dpi=150)
plot_tree(model, feature_names=X.columns, filled=True);
6 đóng vai trò quan trọng hơn trong việc xác định loại động vật mà chúng ta đang xử lý

Cây của chúng ta đã được hoàn thiện, vì vậy hãy hình dung nó

Tháng đầu tiên của nhà khoa học dữ liệu cơ sở

Một khóa học trực tuyến thực tế 100%. Mô phỏng 6 tuần để trở thành nhà khoa học dữ liệu cấp dưới tại một công ty khởi nghiệp thực tế

“Giải quyết các vấn đề thực tế, có được trải nghiệm thực tế - giống như trong một công việc khoa học dữ liệu thực sự. ”

Tìm hiểu thêm

Mã hóa cây phân loại IV. – Trực quan hóa một cây phân loại

Chúng ta có thể hình dung cây của mình bằng một vài dòng mã

from sklearn.tree import plot_tree
plt.figure(figsize=(10,8), dpi=150)
plot_tree(model, feature_names=X.columns, filled=True);

Đầu tiên, chúng tôi nhập =4 cho phép chúng tôi hình dung cây của chúng tôi (=5)

Sau đó, chúng tôi đặt kích thước (=6) và độ sắc nét (=7) của hình ảnh trực quan của chúng tôi. =8

Và cuối cùng, chúng tôi vẽ sơ đồ cây của mình bằng =9

  • 1 - 12 - 02 = 1 - 1 - 0 = 00 là cây đã tồn tại của chúng tôi,
  • 1 - 12 - 02 = 1 - 1 - 0 = 01  giúp chúng tôi có thể xem tên của các tính năng,
  • 1 - 12 - 02 = 1 - 1 - 0 = 02 tô màu các nút của chúng tôi,
  • 1 - 12 - 02 = 1 - 1 - 0 = 03 xóa mọi thông tin bằng văn bản thường đi kèm với hình dung của chúng tôi, vì vậy chúng tôi chỉ được nhìn thấy cái cây xinh đẹp của chúng tôi

Đây là những gì chúng tôi đã chờ đợi, cây phân loại của chúng tôi được hình dung

Làm cách nào để tính Gini bằng Python?

Mã hóa cây phân loại V. – Tất cả những điều này có ý nghĩa gì?

Có nhiều thứ để hấp thụ. Hãy để tôi giải thích bằng cách lấy nút gốc làm ví dụ

Làm cách nào để tính Gini bằng Python?

Có bốn mẩu thông tin trong đó.

from sklearn.tree import plot_tree
plt.figure(figsize=(10,8), dpi=150)
plot_tree(model, feature_names=X.columns, filled=True);
6, 1 - 12 - 02 = 1 - 1 - 0 = 05, 1 - 12 - 02 = 1 - 1 - 0 = 06 và 1 - 12 - 02 = 1 - 1 - 0 = 07

  • from sklearn.tree import plot_tree
    plt.figure(figsize=(10,8), dpi=150)
    plot_tree(model, feature_names=X.columns, filled=True);
    6. nó không nhất thiết phải là water_need (thay vào đó, có một nút với food_vegetables). Thông tin này cho biết tính năng nào mà một nút nhất định đã được phân tách – nếu tính năng này được đi kèm với một số (e. g. 1 - 12 - 02 = 1 - 1 - 0 = 09), điều đó có nghĩa là cây phân loại của chúng tôi chia nút trên một giá trị nhất định của một tính năng
  • 1 - 12 - 02 = 1 - 1 - 0 = 05. tạp chất Gini của nút
  • 1 - 12 - 02 = 1 - 1 - 0 = 06. số lượng các yếu tố có sẵn trong một nút cụ thể. Trong trường hợp của nút gốc, đó là 1 - (probability of belonging to tigers)2 - (probability of belonging to zebras)22 vì ban đầu chúng tôi đã huấn luyện mô hình của mình trên 15 con vật (1 - (the probability of belonging to the first category)2  - (the probability of belonging to the second category)24 và 1 - (the probability of belonging to the first category)2  - (the probability of belonging to the second category)25). Số lượng mẫu giảm khi chúng tôi đi xuống cây và cây phân loại thành công các loài động vật
  • 1 - 12 - 02 = 1 - 1 - 0 = 07. nếu bạn cộng các số lại, bạn sẽ nhận được một số bằng các mẫu (e. g. 1 - (probability of belonging to tigers)2 - (probability of belonging to zebras)26). Nó đại diện cho số lượng phần tử trong các danh mục khác nhau trong một nút. ví dụ: 1 - (probability of belonging to tigers)2 - (probability of belonging to zebras)27 có nghĩa là 1 con voi, 3 con chuột túi, 2 con sư tử, 4 con hổ và 5 con ngựa vằn (bạn có thể nhanh chóng kiểm tra nó với 1 - (probability of belonging to tigers)2 - (probability of belonging to zebras)28)

Vài lời tạm biệt

  • chúng tôi đã làm việc với một tập dữ liệu rất nhỏ, vì vậy cây phân loại của chúng tôi đã sử dụng tất cả các tính năng – điều này thường không xảy ra với các tập dữ liệu lớn hơn và nhiều tính năng hơn, bởi vì không phải mọi tính năng đều cần thiết để phân loại chính xác các giá trị phân loại,
  • chúng tôi đã sử dụng tạp chất Gini để định lượng tạp chất của các nút, nhưng chúng tôi cũng có thể sử dụng entropy (chúng tôi sử dụng tạp chất Gini vì đây là một phương pháp phổ biến để làm như vậy và nó hiệu quả hơn về mặt tính toán),
  • với các bộ dữ liệu và cây lớn hơn, bạn có thể thấy cần phải cắt tỉa cây của mình; . g. sử dụng 1 - (probability of belonging to tigers)2 - (probability of belonging to zebras)29 hoặc
    X = pd.get_dummies(df.drop("animal", axis=1), drop_first=True)
    y = df["animal"]
    from sklearn.model_selection import train_test_split
    X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=44)
    00)

Phần kết luận

Huh… đó là một hành trình khá thú vị phải không? . Cây quyết định không phải là thuật toán học máy tốt nhất (một số người sẽ nói, chúng hết sức kinh khủng)

Nhưng đừng để điều này làm bạn nản lòng, bởi vì bạn đã làm được một điều tuyệt vời nếu hoàn thành bài viết này – bạn đã học được những kiến ​​thức cơ bản về một thuật toán máy học mới và đó không phải là điều gì đó có thể xem nhẹ

Vì vậy, hãy chú ý theo dõi, vì trong bài viết tiếp theo, chúng tôi sẽ chỉ cho bạn cách biến cây quyết định thành một thuật toán rừng ngẫu nhiên mạnh mẽ. Cho đến lúc đó, hãy tiếp tục luyện tập và chia sẻ với chúng tôi những cây quyết định tuyệt đẹp mà bạn đã tạo

Làm thế nào để tính Gini?

Chỉ số Gini được tính bằng tỷ lệ diện tích giữa đường đẳng thức hoàn hảo và đường cong Lorenz (A) chia cho tổng diện tích dưới đường đẳng thức hoàn hảo (A + . .

Gini trong Python là gì?

Đo lường tạp chất Gini là một trong những phương pháp được sử dụng trong thuật toán cây quyết định để quyết định cách phân tách tối ưu từ một nút gốc và các lần phân tách tiếp theo . (Trước khi tiếp tục, bạn có thể muốn xem lại Đưa ra Quyết định với Cây cối)

Chức năng Gini là gì?

Chỉ số Gini hay hệ số Gini đo lường phân bổ thu nhập trên toàn bộ dân số . Được phát triển bởi nhà thống kê người Ý Corrado Gini vào năm 1912, nó thường đóng vai trò là thước đo sự bất bình đẳng kinh tế, đo lường phân phối thu nhập hoặc ít phổ biến hơn là phân phối của cải trong dân số.

Gini tốt cho người mẫu là gì?

Nói cách khác, hệ số Gini là một tỷ lệ biểu thị mức độ gần của mô hình của chúng ta với “mô hình hoàn hảo” và mức độ của nó so với “mô hình ngẫu nhiên”. ” Do đó, một “mô hình hoàn hảo” sẽ có hệ số Gini là 1 và một “mô hình ngẫu nhiên” sẽ có hệ số Gini là 0.