Dapatkan Pentingnya Fitur untuk Hutan Acak dengan Intelijen Data Python dan Scikit-Pelajari PlatoBlockchain. Pencarian Vertikal. Ai.

Dapatkan Fitur Penting untuk Hutan Acak dengan Python dan Scikit-Learn

Pengantar

Grafik Hutan Acak algoritma adalah algoritma pembelajaran terawasi berbasis pohon yang menggunakan ensemble prediksi dari banyak pohon keputusan, baik untuk mengklasifikasikan titik data atau menentukan nilai perkiraannya. Ini berarti dapat digunakan untuk klasifikasi atau regresi.

Ketika diterapkan untuk klasifikasi, kelas titik data dipilih berdasarkan kelas yang paling banyak dipilih oleh pohon; dan ketika diterapkan untuk regresi, nilai titik data adalah rata-rata dari semua nilai yang dikeluarkan oleh pohon.

Hal penting yang perlu diingat ketika menggunakan Random Forests adalah bahwa jumlah pohon adalah hyperparameter dan akan ditentukan sebelum menjalankan model.

Saat bekerja dalam ilmu data, salah satu alasan mengapa model Hutan Acak dipilih untuk proyek tertentu mungkin berkaitan dengan kemampuan untuk melihat pohon yang digabungkan dan memahami mengapa klasifikasi dibuat, atau mengapa nilai diberikan โ€“ ini disebut penjelasan.

Mengingat algoritma berbasis pohon, mencoba untuk menjelaskan model dapat dilakukan dengan beberapa cara, dengan menampilkan dan melihat setiap pohon (bisa sulit jika model memiliki 200 pohon atau lebih), menggunakan Nilai Shapley (atau SHAP), melihat fitur yang paling dipertimbangkan oleh model, menggunakan JERUK NIPIS untuk menyelidiki hubungan antara input dan output model, dll. Biasanya, kombinasi dari semua metode digunakan.

Dalam panduan singkat ini, kami akan fokus pada pembuatan bagan fitur yang dianggap penting bagi model untuk membuat keputusan saat mengklasifikasikan penguin. Ini dikenal sebagai menyelidiki pentingnya fitur, dan dapat disampaikan kepada anggota tim lainnya (teknis dan non-teknis) untuk memberikan gambaran sekilas tentang bagaimana keputusan dibuat.

Untuk melakukan ini, mari impor pustaka yang diperlukan, muat dataset Palmer Penguins, pisahkan data, buat model, dapatkan fitur penting, dan gunakan Seaborn untuk memplotnya! Kami tidak akan membahas banyak tentang data, EDA, atau model itu sendiri โ€“ itu adalah topik dari panduan khusus ini.

Catatan: Anda dapat mengunduh dataset dari GitHub atau langsung dari kode.

Mengimpor Perpustakaan

Mari kita mulai dengan mengimpor beberapa library yang akan kita gunakan:


import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt
from sklearn.model_selection import train_test_split
from sklearn.ensemble import RandomForestClassifier


raw_data_url = "https://gist.githubusercontent.com/cassiasamp/197b4e070f5f4da890ca4d226d088d1f/raw/38c9d4906ed121481b4dc201fa2004f2b3d0065f/penguins.csv"
df = pd.read_csv(raw_data_url)

Memisahkan Data

Mari kita pisahkan data untuk pelatihan dan pengujian:


df = df.dropna().drop("rowid", axis=1)


y = df["species"]
X = df[["bill_length_mm", "bill_depth_mm", "flipper_length_mm"]]


X_train, X_test, y_train, y_test = train_test_split(X, y, random_state=42)

Mendapatkan Kepentingan Fitur

Terakhir โ€“ kita dapat melatih model dan mengekspor fitur penting dengan:


rf = RandomForestClassifier()


rf.fit(X_train, y_train)


rf.feature_importances_

Output ini:

array([0.41267633, 0.30107056, 0.28625311])

Itu adalah nilai fitur, untuk melihat nama fitur, jalankan:


rf.feature_names_in_

Ini menghasilkan nama yang sesuai untuk setiap fitur:

array(['bill_length_mm', 'bill_depth_mm', 'flipper_length_mm'],
      dtype=object)

Ini berarti bahwa fitur terpenting untuk menentukan kelas peguin untuk model khusus ini adalah bill_length_mm!

Kepentingan relatif terhadap ukuran seberapa baik data dipisahkan di setiap pemisahan node โ€“ dalam hal ini, ukuran diberikan oleh Indeks Gini โ€“ nilai gini kemudian dibobot dengan berapa banyak baris yang telah terbelah saat menggunakan bill_length_mm fitur dan rata-rata lebih dari 100 pohon dalam ansambel. Hasil dari langkah-langkah tersebut menjelaskan 0.41267633, atau lebih dari 40% dalam hal ini.

Memvisualisasikan Pentingnya Fitur

Cara umum untuk merepresentasikan nilai penting adalah dengan menggunakan obrolan batang. Pertama-tama mari kita buat kerangka data dengan nama fitur dan kepentingannya yang sesuai, lalu visualisasikan menggunakan Seaborn's barplot():


importances_df = pd.DataFrame({"feature_names" : rf.feature_names_in_, 
                               "importances" : rf.feature_importances_})
                             

g = sns.barplot(x=importances_df["feature_names"], 
                y=importances_df["importances"])
g.set_title("Feature importances", fontsize=14);                          

Saran: Praktik yang baik saat menyajikan informasi adalah mengurutkan nilai baik dalam urutan menaik atau menurun. Dalam hal ini, data sudah dipesan, dengan nilai pertama menjadi yang pertama yang ingin kita ketahui. Jika tidak demikian, Anda dapat memesan kerangka data dengan sort_values. Ini dapat dilakukan pada kolom mana pun dalam urutan menaik atau menurun: importances_df.sort_values(by="importances", ascending=False).

Saat melihat plot pertama ini, lebih sulit untuk menafsirkan nilai kepentingan setiap fitur. Jelas bahwa panjang paruhnya lebih besar dari dua batang lainnya, tetapi tidak persis seperti itu bill_depth_mm adalah setara dengan 0.30107056, dan bahwa flipper_length_mm adalah 0.28625311. Jadi, grafik pertama ini dapat ditingkatkan dengan menampilkan nilai setiap batang. Ini dapat dilakukan dengan mengakses Seaborn's containers obyek. Ini menyimpan setiap informasi batang dan meneruskan nilai sebagai label batang:

Lihat panduan praktis dan praktis kami untuk mempelajari Git, dengan praktik terbaik, standar yang diterima industri, dan termasuk lembar contekan. Hentikan perintah Googling Git dan sebenarnya belajar itu!

g = sns.barplot(data=importances_df, 
                x="importances", 
                y="feature_names")
g.set_title("Feature importances", fontsize=14)
for value in g.containers:
    g.bar_label(value)

Dapatkan Pentingnya Fitur untuk Hutan Acak dengan Intelijen Data Python dan Scikit-Pelajari PlatoBlockchain. Pencarian Vertikal. Ai.

Sekarang, kita dapat melihat setiap nilai kepentingan dengan jelas, atau hampir dengan jelas, karena bill_length_mm nilai sedang dipotong oleh garis vertikal yang merupakan bagian dari batas luar grafik. Batas digunakan untuk menutup suatu area sebagai sarana untuk lebih memfokuskan perhatian padanya, tetapi dalam hal ini kita tidak perlu melampirkan, karena hanya ada satu graf. Mari kita hilangkan batas dan tingkatkan keterbacaan angka:

g = sns.barplot(data=importances_df, 
                x="importances", 
                y="feature_names")
                

sns.despine(bottom=True, left=True)
g.set_title("Feature importances", fontsize=14)
for value in g.containers:
    g.bar_label(value)

Dapatkan Pentingnya Fitur untuk Hutan Acak dengan Intelijen Data Python dan Scikit-Pelajari PlatoBlockchain. Pencarian Vertikal. Ai.

Bagan tampaknya lebih mudah dibaca, tetapi tanda centang pada sumbu X tampak mengambang dan kita sudah memiliki nilai bersama dengan batangnya, jadi kita dapat menghapus xticks:

g = sns.barplot(data=importances_df, 
                x="importances", 
                y="feature_names")
sns.despine(bottom=True, left=True)


g.set(xticks=[])
g.set_title("Feature importances", fontsize=14)
for value in g.containers:
    g.bar_label(value)

Dapatkan Pentingnya Fitur untuk Hutan Acak dengan Intelijen Data Python dan Scikit-Pelajari PlatoBlockchain. Pencarian Vertikal. Ai.

Perhatikan bagaimana setelah menghapus centang, label Y dan X agak sulit dibaca. label Y, feature_names, adalah vertikal dan pada sumbu X, hanya ada importances. Karena judulnya sudah menyatakan bahwa grafiknya adalah Fitur penting, kita juga dapat menghapus label sumbu:

g = sns.barplot(data=importances_df, 
                x="importances", 
                y="feature_names")
sns.despine(bottom=True, left=True)
g.set_title("Feature importances", fontsize=14)
g.set(xticks=[])


g.set(xlabel=None)
g.set(ylabel=None)
for value in g.containers:
    g.bar_label(value)

Dapatkan Pentingnya Fitur untuk Hutan Acak dengan Intelijen Data Python dan Scikit-Pelajari PlatoBlockchain. Pencarian Vertikal. Ai.

Anda dapat melihat bagaimana bagan ini lebih bersih, mudah dibaca dan dipahami ketika membandingkan dengan yang pertama. Masih ada beberapa hal yang bisa kita lakukan. Perhatikan bahwa angka-angkanya sangat dekat dengan batang, akan lebih mudah dibaca jika ada sedikit jarak di antara mereka.

Elemen lain dalam plot ini adalah warna, ketika warna kontras digunakan, itu mentransmisikan ide pemisahan, sebaliknya, ketika warna serupa digunakan, mereka mengomunikasikan ide kesatuan, atau bagian dari keseluruhan. Karena semua fitur adalah bagian dari penguin, kita dapat menggunakan warna yang membuat setiap batang berbeda dengan tetap mempertahankan kesatuan:

g = sns.barplot(data=importances_df, 
                x="importances", 
                y="feature_names",
                
                
                palette="mako")
sns.despine(bottom=True, left=True)
g.set_title("Feature importances", fontsize=14)
g.set(xticks=[])
g.set(xlabel=None)
g.set(ylabel=None)
for value in g.containers:
    g.bar_label(value, 
                padding=2) 

Dapatkan Pentingnya Fitur untuk Hutan Acak dengan Intelijen Data Python dan Scikit-Pelajari PlatoBlockchain. Pencarian Vertikal. Ai.

Jika Anda ingin membuat hasilnya lebih langsung, Anda dapat mengubah judul dan menambahkan kesimpulan. Diketahui bahwa panjang tagihan dianggap sebagai fitur yang paling penting menurut kriteria yang telah kita bahas sebelumnya. Ini bisa menjadi informasi pertama bagi seseorang yang melihat plotnya, bisa dibilang begitu panjang paruh penguin adalah fitur terpenting untuk klasifikasi spesies dalam model dasar Hutan Acak (RF) :

g = sns.barplot(data=importances_df, 
                x="importances", 
                y="feature_names", 
                palette="mako")
sns.despine(bottom=True, left=True)
g.set_title("The penguin's bill length was the most important feature for species classification (RF base model)", fontsize=14)
g.set(xticks=[])
g.set(xlabel=None)
g.set(ylabel=None)
for value in g.containers:
    g.bar_label(value, padding=2)

Ini adalah hasil akhir dari bagan kepentingan fitur:

Dapatkan Pentingnya Fitur untuk Hutan Acak dengan Intelijen Data Python dan Scikit-Pelajari PlatoBlockchain. Pencarian Vertikal. Ai.

Kesimpulan

Dalam panduan ini โ€“ kami telah membuat Pengklasifikasi Hutan Acak โ€“ dan memeriksa pentingnya fitur yang digunakan untuk melatih model dalam upaya untuk menjelaskan apa yang telah dipelajari model, dan apa yang mempengaruhi penalarannya.

Stempel Waktu:

Lebih dari penyalahgunaan