microsoft power bi python random forest rastgele orman algorithm

Python ile Sınıflandırma Analizleri – Rastgele Orman (Random Forest) Algoritması

Merhaba, iyi günler.

Bugün; çeşitli veri kümeleri üzerinde özel işlemler ile farklı çözümlemeler için yapılandırılmış denetimli/gözetimli öğrenme algoritmalarından regresyon ve diğer analizler için eğitim aşamasında çok sayıda karar ağacı oluşturarak problemin tipine göre sınıf/sonuç tahmini gerçekleştiren toplu öğrenme yöntemi olan Rastgele Orman (Random Forest) algoritması üzerine çeşitli bilgi ve çözümlemeler aktarmaya çalışacağım.

Genel konu özetinin bulunduğu Python Veri Analizi yazısına link üzerinden ulaşabilirsiniz

Random Forest (Rastgele Orman) algoritması; birden çok karar ağacı üzerinden her bir karar ağacını farklı bir gözlem örneği üzerinde eğiterek çeşitli modeller üretip, sınıflandırma oluşturmanızı sağlamaktadır.

Kullanım kolaylığı ve esnekliği; hem sınıflandırma hem de regresyon problemlerini ele aldığı için benimsenmesini ve kullanımının yaygınlaşmasını hızlandırdı.

Algoritmaya yönelik en beğenilen nokta ise; veri kümeniz üzerinde çeşitli modellerin oluşturulması ile kümenizi yeniden ve daha derin keşfetme imkanı sunmasıdır.

microsoft power bi python random forest algorithm base solution

Algoritma;

  • Analiz edilecek veri seti hazırlanır,
    (Analiz edilecek küme oluşturulur, gerekli görülürse veri temizlemesi gerçekleştirilir.)
  • Algoritma her bir örnek için karar ağacı oluşturur ve her bir karar ağacının tahmini değer sonucu oluşur,
  • Tahmin sonucu oluşan her değer için oylama gerçekleştirilir,
    *(Sınıflandırma problemi için Modu (Mode), Regresyon problemi için Ortalamayı (Mean))
  • Son olarak algoritma son tahmin için en çok oylanan değeri seçerek sonuç oluşturur.

 adımları ile analiz gerçekleştirmektedir. 

Rastgele Orman (Random Forest) Uygulama Örneği

RF (Random Forest, Rastgele Orman) algoritması uygulamasına örnek olarak, çokça duyulan ve kullanılan Iris Veri Seti üzerinden basit bir örnek ile çözümlemelerde bulunalım.

İlgili veri setine ait csv. uzantılı dosyasına buradan ulaşabilirsiniz.

microsoft power bi iris machine learning data sets support vector machine

Iris Veri Seti 3 Iris bitki türüne (Iris Setosa, Iris Virginica ve Iris Versicolor) ait, her bir türden 50 örnek olmak üzere toplam 150 örnek sayısına sahip bir veri setidir.

Iris Veri Seti içerisinde;

Sınıflar (Türler);

  • Iris Setosa,
  • Iris Versicolor,
  • Iris Virginica.

Veri Özellikleri (Ortak Özellikler);

  • Sepal Uzunluk (cm),
  • Sepal Genişlik (cm),
  • Petal Genişliği (cm)
  • Petal Uzunluk (cm).

özellik ve değerleri bulunmaktadır.

Dilerseniz hızlıca analizimizi gerçekleştirmek için adımlarımızı uygulamaya başlayalım.

1-Gerçekleştireceğimiz analizler için kullanacağımız kütüphanelerimizi projemize dahil edelim;
(Scikit-LearnPandas, Matplotlip, Seaborn)

>>> from sklearn import datasets
       import pandas as pan
       from sklearn.model_selection import train_test_split
       from sklearn.ensemble import RandomForestClassifier
       from sklearn import metrics
       import matplotlib.pyplot as plot
       import seaborn as sea

  • datasets: Kullanacağımız veri kümesini çalışmaya dahil etmek için, (Iris)
  • pan: İçeri aktardığımız veri kümesinin bir çok boyutlu olarak kullanacağımız veri çerçevesini (DataFrame) oluşturmak için,
  • train_test_split: Eğitim ve Test kümesi işlemleri kullanımı için,
  • RandomForestClassifier: Rastgele Orman modelini kullanmak için,
  • metrics: Tahminlememizde doğruluk hesaplaması kullanmak için,
  • plot: Görselleştirme kullanmak için,
  • sea: Görselleştirme kullanmak için

ilgili kütüphaneleri projemize aktarmaktayız.

python random forest algorithm import library in project

2-Çalışmamıza ilgili verilerimizi dahil edelim ve önizleme gerçekleştirelim;,

>>> iris_dataset = datasets.load_iris()
       print(iris_dataset)

***Önceki çalışmamızda yerel dizin üzerinden ilgili verilerimizi projemize dahil etmiştik;
    Iris_Data = pd.read_csv(“D:\Yedekleme\Iris.csv”)

python random forest algorithm import and show datasets

3-Etiket türlerimizin ve özelliklerimizin önizlemesini gerçekleştirelim;

>>> print(iris_dataset.target_names)
       print(iris_dataset.feature_names)

python random forest algorithm show label and features

4-DataFrame yapımızı oluşturmadan verilerimize yönelik önizleme gerçekleştirelim; (TOP 10 Kayıt)

>>> print(iris_dataset.data[0:10])
       print(iris_dataset.target)

python random forest algorithm show n record

5-Iris veri kümesi üzerinden bir DataFrame oluşturalım;

>>> salt_data=pan.DataFrame({
       ‘sepal length’:iris_dataset.data[:,0],
       ‘sepal width’:iris_dataset.data[:,1],
       ‘petal length’:iris_dataset.data[:,2],
       ‘petal width’:iris_dataset.data[:,3],
       ‘species’:iris_dataset.target
})

python random forest algorithm create dataframe from iris

6-Oluşturmuş olduğumuz DataFrame’in önzilemesini gerçekleştirelim;

>>> salt_data.head()

python random forest algorithm show dataframe

7-Veri kümemizi test ve eğitim/öğrenme kümeleri olarak ikiye bölelim-ayıralım; (Test-Train)
*Verileri; 35% Test, 65% Eğitim olarak ayıralım.
*
test_size ile verilerin %kaçının test için kullanılacağını ifade belirleyebilmektesiniz. (Örneğimizde %35.)
*train_size ile verilerin %kaçının eğitim için kullanılacağını ifade belirleyebilmektesiniz.
*shuffle ile verilerin bölünmeden karıştırma uygulanıp-uygulanmayacağınız belirleyebilmektesiniz.
*random_state ile bölünmeden önce verilere-veriye uygulanan karıştırmayı kontrol edebilmektesiniz.

>>> X=salt_data[[‘sepal length’, ‘sepal width’, ‘petal length’, ‘petal width’]]
       y=salt_data[‘species’]
       X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.35, shuffle=True)

python random forest algorithm test and train shuffle dataset

8-Veri kümemizi bölme-ayırma işleminden sonra modeli eğitim seti üzerinde eğitip, test seti üzerinde tahminler gerçekleştirelim;
*Verileri; 120 ağaç sayısı olarak ele alalım.
*n_estimators ile 
maksimum oylama veya tahmin ortalamalarını almadan önce inşa etmek istediğiniz ağaç sayısını belirleyebilmektesiniz.
*min_sample_leaf ile daha önce bir karar ağacı oluşturduysanız, minimum örnek yaprak boyutunun önemini anlayabilir ve sonrasında değer üzerinden sayısını belirleyebilmektesiniz.
*min_sample_split ile dahili düğümü bölmek için gereken minimum örnek sayısını belirleyebilmektesiniz.
*max_depth ile a
ğacın maksimum derinliğini belirleyebilmektesiniz.
Kullanılmaz ise varsayılan olarak 0, tüm yapraklar saf olana veya tüm yapraklar min_samples_split örneklerinden daha azını içerene kadar düğümler genişletilmektedir.

>>> clf=RandomForestClassifier(n_estimators=120)
       clf.fit(X_train,y_train)
       y_pred=clf.predict(X_test)

python random forest algorithm predict and analyze data

9-Eğitimden sonra, gerçek ve tahmin edilen değerleri kullanarak doğruluk değerini kontrol edelim;

>>> print(“Accuracy Value:”,metrics.accuracy_score(y_test, y_pred))

python random forest algorithm predicted accuracy value

10-Eğitim işlemlerimizin tamamlanmasından sonra dilerseniz tahminlemenizi tek bir belirlediğiniz öğe içinde kontrol edebilirsiniz;

  • sepal length = 1
  • sepal width = 2
  • petal length = 3
  • petal width = 4
değerleri için;

>>>
clf.predict([[1, 2, 3, 4]])
>>> array([1])  değeri elde edilir.

[1]: Versicolor çiçeğini ifade etmektedir.
python random forest algorithm one predict

Şimdi analiz yapımızı bira daha geliştirip, basit seviyede görselleştirme gerçekleştirelim.

11-(8) adım üzerindeki işlemlerimizi tekrar ederek analizimize başlayalım;

>>> clf=RandomForestClassifier(n_estimators=120)
       clf.fit(X_train,y_train)

python random forest algorithm again predict estimator

12-Rastgele Orman sınıflandırıcımızı bir seviye daha derinleştirip, eğitimde bulunalım;
*bootstrap ile ağaç oluştururken önyükleme örneklerinin kullanılıp kullanılmadığı kontrol edebilmektesiniz.
Alt örnek boyutu; eğer bootstrap=True (varsayılan) ise max_samples parametresi ile kontrol edilmekte, aksi takdirde her bir ağacı oluşturmak için tüm veri seti kullanılmaktadır.
*class_weight ile formdaki sınıflarla ilişkili ağırlıkları belirleyebilmektesiniz.
*criterion ile bir bölünmenin kalitesini ölçme işlevini belirleyebilmektesiniz.
Desteklenen kriterler Gini Safsızlığı/Kirliliği için “gini”, bilgi kazancı için “entropi” değerleri kullanılmaktadır.
*max_features ile bir düğümü ayırırken dikkate alınacak maksimum özellik sayısını belirleyebilmektesiniz.
*max_leaf_nodes ile maksimum kullanılacak yaprak sayısını belirleyebilmektesiniz.
*min_impurity_decrease ile safsızlık/kirlilik değerlerini belirleyebilmektesiniz.
*min_impurity_split ile 
safsızlık/kirlilik bölünmesi değerini belirleyebilmektesiniz.
*min_weight_fraction_leaf ile bir yaprak düğümde olması gereken ağırlıklar toplamının minimum ağırlıklı değerini belirleyebilmektesiniz.
*n_jobs ile paralel olarak çalıştırılacak iş sayısını belirleyebilmektesiniz.
*oob_score ile tahmin hatalarını hesaplayabilmektesiniz.
*verbose ile ayrıntı düzeyini belirleyebilmektesiniz.
*warm_start ile işlem sonucu dahilinde önceki uygun çözümü yeniden kullanmak yerine, yeni bir orman oluşturulmasını sağlayabilmektesiniz. (EK Parametreler ve bilgilendirmeleri.)

>>> RandomForestClassifier(bootstrap=True, class_weight=None, criterion=’gini’,
       max_depth=None, max_features=’auto’, max_leaf_nodes=None,
       min_impurity_decrease=0.0, min_impurity_split=None,
       min_samples_leaf=1, min_samples_split=0,
       min_weight_fraction_leaf=0.0, n_estimators=100, n_jobs=1,
       oob_score=False, random_state=None, verbose=0,
       warm_start=False)

python random forest algorithm classifier gini split warm start

13-Özelliklere yönelik önem puanlarını değerlendirelim;
*sort_values ile verilerinizi belirlemiş olduğunuz sütuna/parametreye göre sıralayabilmektesiniz.
 sort_values(by=’sıralanacak sütun’, ascending=False)

>>> feature_imp = pan.Series(clf.feature_importances_,index=iris_dataset.feature_names)
                              .sort_values(ascending=False)
>>> feature_imp

python random forest algorithm classifier features score

14-Çıktı olarak elde ettiğimiz skor değerlerini görselleştirelim;

>>> sea.barplot(x=feature_imp, y=feature_imp.index)
       plot.xlabel(‘Feature Importance Score’)
       plot.ylabel(‘Features’)
       plot.title(“Visualizing Important Features”)
       plot.show()

python random forest algorithm graphic seaborn visual

Skorlar üzerinden çıkarımla düşük öneme sahip olan parametreleri tahminleyicimizde göz ardı edip tekrar analizde bulunabiliriz.

15-Analizimizde kullanacağımız veri kümemizin parametreleri yeniden belirleyelim; (Test-Train)

>>> X=salt_data[[‘petal length’, ‘petal width’,’sepal length’]]
       y=salt_data[‘species’]
       X
       y

python random forest algorithm again new predict calculate

16-Veri kümemizi test ve eğitim/öğrenme kümeleri olarak ikiye bölelim-ayıralım; (Test-Train)
*Verileri; 75% Test, 25% Eğitim olarak ayıralım.

>>> X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.75,shuffle=True, random_state=5)

python random forest algorithm again new predict estimator

17-Modelimizi eğitim seti üzerinde eğitip, test seti üzerinde tahminler gerçekleştirelim;
*Verileri; 120 ağaç sayısı olarak ele alalım.

>>> clf=RandomForestClassifier(n_estimators=120)
       clf.fit(X_train,y_train)
       y_pred=clf.predict(X_test)

python random forest algorithm classifier new predict type calculate

18-Son olarak modelimizin ne sıklıkla doğru olduğunu kontrol edelim; (Accuracy Score)

>>> print(“Accuracy Value:”,metrics.accuracy_score(y_test, y_pred))

python random forest algorithm classifier new predict end of accuracy value

Önem değeri düşük olan özellikleri/parametreleri (Sepal Width) analizimizden çıkardıktan sonra doğruluk değerinin arttığını görebilirsiniz.*Yanıltıcı verilerin/parametrelerin analizden çıkarılması.

Görselleştirme işlemleri için dilerseniz Python üzerinde ki çeşitli kütüphaneleri kullanarak dilerseniz de geçmiş dönemlerde uygulamış olduğumuz Power BI ile görselleştirme (12) çalışmalarından faydalanabilirsiniz. 

Günlük Hayatta Algoritma Uygulama Alanları

Finans-Bankacılık Sektörü

  • Kredi ve Risk Değerlendirilmesi (Analizleri),
  • Dolandırıcılık Değerlendirmeleri (Fraud)
  • Opsiyon Fiyatlama Sorunu Analizleri

Sağlık Hizmetleri Sektörü

  • Kısmi Biyolojik Hesaplamalar 
  • Gen Analizleri
  • Biyobelirteç Keşfi ve Analizleri

E-Ticaret Sektörü

  • Çapraz Satış Analizleri
  • Müşteri Öneri Sistemleri

Avantaj Dezavantaj

Rastgele Orman algoritması avantajları olarak;

  • Sınıflandırma ve Regresyon problemleri üzerinde kullanılabilmektedir,
    (Çok yönlü esnek çözüm imkanı)
  • İyi tahminleme oluşturmanızı sağlayan güçlü hiperparametreler bulunmaktadır,
  • Yüksek öneme sahip özelliklerin belirlenmesinde kolaylık sağlamaktadır,
  • Aşırı Uyum/Öğrenme (Over Fit) problemini önlemektedir-azaltmaktadır,
  • Eksik verileri (Bilinmeyen) işlemek için önemli bir çözümdür,
  • Büyük veri kümeleri için verimli işleme ve sonuç üretmektedir,
  • Kural tabanlı bir yaklaşım kullandığı için verilerin normalleştirilmesi gerekli olmamaktadır,
  • Paralelleştirilebilir-Paralel işlemler gerçekleştirilebilmektedir.
    (Analiz ve işlem sürecinizi çalıştırmak için birden fazla makineye bölebilirsiniz. n_jobs)

Rastgele Orman algoritması dezavantajları olarak;

  • Yapısal olarak oluşturmuş olduğu fazlaca çözüm (Ağaç) sayısından dolayı biraz yavaş sonuç üretmektedir, (Eğitim hızlı, tahmin uzun)
    (Özellikle gerçek zamanlı tahminlemeler için)
  • Daha doğru bir tahminleme için daha yavaş sonuçlanan bir modelle yüksek sayıda çözüm (Ağaç) gerekmektedir,
  • Verilerin ekstrapolasyonunda* ideal değildir,
    *Ekstrapolasyon; bilinen veri noktalarının ayrık kümesi dışında yeni veri noktaları oluşturma işlemidir.
  • Veriler çok seyrek olduğunda iyi sonuçlar üretmemektedir,
    (Özelliklerin alt kümesi ve önyüklenen örnek değişmez bir uzay üretmektedir.)
  • Tanımlayıcı bir araç değil, tahmine dayalı bir modelleme aracıdır.
    (Yani; verilerinizdeki ilişkilerin bir tanımını arıyorsanız, diğer yaklaşımlara yönelmeniz daha iyi olacaktır.)

Bu bölümde genel manada Sınıflandırma metoduna ait Rastgele Orman (Random Forest) algoritmasına değinmeye çalıştım.

Gelecek yazımda Anomali Tespiti (Anomaly Detection) algoritmasını ele almaya çalışacağım.

İyi günler, iyi çalışmalar…

, ,

İlgili Yazılar