Python ve Scikit-Learn PlatoBlockchain Veri Zekası ile Rastgele Ormanlar için Özellik Önemlerini Alın. Dikey Arama. Ai.

Python ve Scikit-Learn ile Rastgele Ormanlar için Özelliğin Önemlerini Alın

Giriş

The Rastgele Orman Algoritma, bir veri noktasını sınıflandırmak veya yaklaşık değerini belirlemek için birçok karar ağacının bir tahmin topluluğunu kullanan ağaç tabanlı bir denetimli öğrenme algoritmasıdır. Bu, sınıflandırma veya regresyon için kullanılabileceği anlamına gelir.

Sınıflandırma için başvurulduğunda, veri noktasının sınıfı, ağaçlar tarafından en çok oylanan sınıfa göre seçilir; ve regresyon için uygulandığında, veri noktasının değeri, ağaçların ürettiği tüm değerlerin ortalamasıdır.

Rastgele Ormanları kullanırken hatırlanması gereken önemli bir nokta, ağaç sayısının bir hiperparametre olduğu ve modeli çalıştırmadan önce tanımlanacağıdır.

Veri biliminde çalışırken, belirli bir proje için bir Rastgele Orman modelinin seçilmesinin nedenlerinden biri, birleştirilmiş ağaçlara bakma ve anlama becerisiyle ilgili olabilir. neden bir sınıflandırma yapılmış veya neden bir değer verildi - buna denir açıklanabilirlik.

Ağaç tabanlı algoritmalar göz önüne alındığında, bir modeli açıklamaya çalışmak, her bir ağacı görüntüleyerek ve ona bakarak (modelde 200 veya daha fazla ağaç varsa zor olabilir), kullanarak çeşitli şekillerde yapılabilir. Shapley (veya SHAP) değerleri, model tarafından en çok dikkate alınan özelliklere bakıldığında, MİSKET LİMONU model girdisi ve çıktısı arasındaki ilişkileri araştırmak vb. Genellikle tüm yöntemlerin bir kombinasyonu kullanılır.

Bu hızlı kılavuzda, modelin penguenleri sınıflandırırken karar vermesi için önemli olduğu düşünülen özelliklerin bir tablosunu oluşturmaya odaklanacağız. Bu, soruşturma olarak bilinir özellik önemive kararların nasıl alındığına dair bir fikir vermek için ekibin diğer üyelerine (teknik ve teknik olmayan) iletilebilir.

Bunun için gerekli kitaplıkları içe aktaralım, Palmer Penguins veri setini yükleyelim, verileri bölelim, modeli oluşturalım, özellik önemlerini elde edelim ve bunları çizmek için Seaborn'u kullanalım! Verilere, EDA'ya veya modelin kendisine fazla değinmeyeceğiz – bunlar özel kılavuzun konusu.

Not: Veri setini adresinden indirebilirsiniz. GitHub veya doğrudan koddan.

Kütüphaneleri İçe Aktarma

Kullanacağımız birkaç kitaplığı içe aktararak başlayalım:


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)

Verileri Bölme

Eğitim ve test için verileri bölelim:


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)

Özellik Önemlerini Elde Etme

Son olarak – bir model eğitebilir ve özellik önemlerini şununla dışa aktarabiliriz:


rf = RandomForestClassifier()


rf.fit(X_train, y_train)


rf.feature_importances_

Bu çıktılar:

array([0.41267633, 0.30107056, 0.28625311])

Bunlar özellik değerleridir, özellik adlarını görmek için şunu çalıştırın:


rf.feature_names_in_

Bu, her özelliğin karşılık gelen adıyla sonuçlanır:

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

Bu, bu belirli model için peguen sınıflarına karar vermede en önemli özelliğin, bill_length_mm!

Önem, verilerin her bir düğüm bölünmesinde ne kadar iyi ayrıldığının ölçüsüne bağlıdır - bu durumda, ölçü şu şekilde verilir: Gini Endeksi – daha sonra gini değeri, kullanılırken kaç satırın bölündüğüne göre ağırlıklandırılır. bill_length_mm özellik ve topluluktaki 100 ağacın ortalaması. Bu adımların sonucu 0.41267633veya bu durumda %40'tan fazla.

Görselleştirme Özelliği Önemi

Önem değerlerini temsil etmenin yaygın bir yolu, çubuk sohbetleri kullanmaktır. Önce özellik adları ve bunlara karşılık gelen önemleri içeren bir veri çerçevesi oluşturalım ve ardından bunları Seaborn's kullanarak görselleştirelim. 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);                          

Önerileri: Bilgileri sunarken iyi bir uygulama, değerleri artan veya azalan düzende sıralamaktır. Bu durumda, veriler zaten sıralanmıştır ve ilk bilmek istediğimiz ilk değerdir. Durum böyle olmadığında, dataframe'i şununla sipariş edebilirsiniz: sort_values. Bu, artan veya azalan sırada herhangi bir sütunda yapılabilir: importances_df.sort_values(by="importances", ascending=False).

Bu ilk çizime bakıldığında, her bir özelliğin öneminin değerini yorumlamak daha zordur. Fatura uzunluğunun diğer iki çubuktan daha büyük olduğu açıktır, ancak tam olarak bu değildir. bill_depth_mm eşdeğerdir 0.30107056ve bu flipper_length_mm 0.28625311'dir. Bu nedenle, bu ilk grafik, her bir çubuğun değeri görüntülenerek geliştirilebilir. Bu, Seaborn's'a erişerek yapılabilir. containers nesne. Her çubuk bilgisini saklar ve değerleri çubuk etiketleri olarak iletir:

En iyi uygulamalar, endüstri tarafından kabul edilen standartlar ve dahil edilen hile sayfası ile Git'i öğrenmek için uygulamalı, pratik kılavuzumuza göz atın. Googling Git komutlarını durdurun ve aslında öğrenmek o!

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)

Python ve Scikit-Learn PlatoBlockchain Veri Zekası ile Rastgele Ormanlar için Özellik Önemlerini Alın. Dikey Arama. Ai.

Şimdi, her önem değerini net bir şekilde veya neredeyse net bir şekilde görebiliriz, çünkü bill_length_mm değer, grafiğin dış sınırının parçası olan dikey bir çizgi tarafından kesiliyor. Kenarlıklar, bir alana daha fazla odaklanmanın bir yolu olarak çevrelemek için kullanılır, ancak bu durumda, çevrelememize gerek yoktur, çünkü yalnızca bir grafik vardır. Kenarlığı kaldıralım ve sayıların okunabilirliğini artıralım:

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)

Python ve Scikit-Learn PlatoBlockchain Veri Zekası ile Rastgele Ormanlar için Özellik Önemlerini Alın. Dikey Arama. Ai.

Grafiği okumak daha kolay görünüyor, ancak X eksenindeki işaretler dalgalanıyor gibi görünüyor ve çubuklarla birlikte değerlere zaten sahibiz, bu nedenle 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)

Python ve Scikit-Learn PlatoBlockchain Veri Zekası ile Rastgele Ormanlar için Özellik Önemlerini Alın. Dikey Arama. Ai.

İşaretleri çıkardıktan sonra Y ve X etiketlerini okumanın biraz zor olduğuna dikkat edin. Y etiketi, feature_names, dikeydir ve X ekseninde yalnızca importances. Başlık zaten grafiğin olduğunu belirttiğinden Özelliğin önemi, eksen etiketlerini de kaldırabiliriz:

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)

Python ve Scikit-Learn PlatoBlockchain Veri Zekası ile Rastgele Ormanlar için Özellik Önemlerini Alın. Dikey Arama. Ai.

Bu tablonun ilkiyle karşılaştırıldığında ne kadar temiz, okunması ve anlaşılması kolay olduğunu görebilirsiniz. Hala yapabileceğimiz bazı şeyler var. Rakamların çubuklara çok yakın olduğunu gözlemleyin, aralarında biraz daha boşluk olsa daha kolay okunur.

Bu olay örgüsünün bir diğer unsuru da renklerdir, zıt renkler kullanıldığında bir ayrılık, benzer renkler kullanıldığında ise bir birlik veya bütünün parçaları fikrini iletirler. Özelliklerin tümü penguenlerin parçası olduğu için, birliği korurken her çubuğu farklı kılan bir renk kullanabiliriz:

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) 

Python ve Scikit-Learn PlatoBlockchain Veri Zekası ile Rastgele Ormanlar için Özellik Önemlerini Alın. Dikey Arama. Ai.

Sonuçları daha da doğrudan hale getirmek istiyorsanız, başlığı değiştirebilir ve sonucu ekleyebilirsiniz. Bilinen, daha önce ele aldığımız kriterlere göre fatura uzunluğunun en önemli özellik olarak kabul edildiğidir. Olay örgüsüne bakan biri için bu ilk bilgi olabilir, diyebiliriz. penguenin gaga uzunluğu, Rastgele Orman (RF) temel modelinde tür sınıflandırması için en önemli özellikti. :

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)

Bu, özellik önem tablosunun nihai sonucudur:

Python ve Scikit-Learn PlatoBlockchain Veri Zekası ile Rastgele Ormanlar için Özellik Önemlerini Alın. Dikey Arama. Ai.

Sonuç

Bu kılavuzda - bir Rastgele Orman Sınıflandırıcısı oluşturduk - ve modeli eğitmek için kullanılan özellik önemlerini inceledik. açıklamak bir modelin ne öğrendiği ve onun muhakemesini neyin etkilediği.

Zaman Damgası:

Den fazla Yığın kötüye kullanımı