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 Show
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ệ
Đố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 (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
Một thí nghiệm khởi động cho cây phân loạiGiả 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
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 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à
Hoặc là
(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ạiQuay 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 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
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
Kết quả là from sklearn.tree import DecisionTreeClassifier2 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ụcChú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 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ố
Đây là bước 2 trông như thế nào 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 DecisionTreeClassifier3 nó được đưa ra bởi from sklearn.tree import DecisionTreeClassifier4 Đố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 DecisionTreeClassifier6ví dụ cây phân loại tạp chất Gini Đối với from sklearn.tree import DecisionTreeClassifier7 nó được đưa ra bởi from sklearn.tree import DecisionTreeClassifier8 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
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 PythonMã hóa cây phân loại I. – Chuẩn bị dữ liệuChú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 Với from sklearn.tree import plot_tree0, chúng tôi có thể kiểm tra loại động vật mà chúng tôi đang xử lý Chúng tôi sẽ không cần id, vì vậy hãy bỏ cột đó 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_tree1 from sklearn.tree import plot_tree2 xóa cột from sklearn.tree import plot_tree3 khỏi khung dữ liệu của chúng tôi ( from sklearn.tree import plot_tree4), do đó, from sklearn.tree import plot_tree1 vẫn hoạt động với from sklearn.tree import plot_tree6 và from sklearn.tree import plot_tree7. Nhưng vì nó chỉ ảnh hưởng đến các cột có chuỗi và from sklearn.tree import plot_tree6 lưu trữ các giá trị số, nên from sklearn.tree import plot_tree1 chỉ chuyển đổi các giá trị của from sklearn.tree import plot_tree7 thành giá trị số. Trong khi làm như vậy, nó sẽ tạo ra hai cột mới ( 1 - p12 - p22 1 và 1 - p12 - p22 2)Đây là cách đọc hai cột mới Vì Để loại bỏ một trong các cột, chúng tôi sử dụng pd.get_dummies(df.drop("animal", axis=1), drop_first=True) Kết quả là, 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ệuChú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 Tương tự, Sau đó, chúng tôi nhập Đâ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, Đây là ảnh chụp màn hình về những gì chúng tôi đã làm cho đến nay; Mã hóa cây phân loại III. – Tạo cây phân loại với scikit-learningBâ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 Đây là những gì đang xảy ra
Thấp và kìa, những dự đoán 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 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ị. 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 Bởi vì from sklearn.tree import plot_tree6 đó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ó
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ạiChú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 Đầu tiên, chúng tôi nhập Sau đó, chúng tôi đặt kích thước ( Và cuối cùng, chúng tôi vẽ sơ đồ cây của mình bằng
Đâ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 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ụ Có bốn mẩu thông tin trong đó. from sklearn.tree import plot_tree6, 1 - 12 - 02 = 1 - 1 - 0 = 0 5, 1 - 12 - 02 = 1 - 1 - 0 = 0 6 và 1 - 12 - 02 = 1 - 1 - 0 = 0 7
Vài lời tạm biệt
Phần kết luậnHuh… đó 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. |