Scikit Learn - Pohon Keputusan Acak

Bab ini akan membantu Anda memahami pohon keputusan acak di Sklearn.

Algoritma Pohon Keputusan Acak

Seperti yang kita ketahui bahwa DT biasanya dilatih dengan memisahkan data secara rekursif, tetapi rentan terhadap kecocokan berlebih, data tersebut telah diubah menjadi hutan acak dengan melatih banyak pohon pada berbagai sub-sampel data. Itusklearn.ensemble modul mengikuti dua algoritma berdasarkan pohon keputusan acak -

Algoritma Random Forest

Untuk setiap fitur yang dipertimbangkan, ini menghitung kombinasi fitur / pemisahan yang optimal secara lokal. Di Random forest, setiap pohon keputusan dalam ansambel dibangun dari sampel yang diambil dengan penggantian dari set pelatihan dan kemudian mendapatkan prediksi dari masing-masing dan akhirnya memilih solusi terbaik melalui pemungutan suara. Ini dapat digunakan untuk tugas klasifikasi maupun regresi.

Klasifikasi dengan Random Forest

Untuk membuat pengklasifikasi forest acak, modul Scikit-learn menyediakan sklearn.ensemble.RandomForestClassifier. Saat membuat pengklasifikasi hutan acak, parameter utama yang digunakan modul ini adalah‘max_features’ dan ‘n_estimators’.

Sini, ‘max_features’adalah ukuran subset fitur acak yang perlu dipertimbangkan saat memisahkan node. Jika kita memilih nilai parameter ini ke none maka itu akan mempertimbangkan semua fitur daripada subset acak. Di samping itu,n_estimatorsadalah jumlah pohon di hutan. Semakin tinggi jumlah pohon, semakin baik hasilnya. Tetapi akan membutuhkan waktu lebih lama untuk menghitungnya juga.

Contoh implementasi

Dalam contoh berikut, kami sedang membangun pengklasifikasi hutan acak dengan menggunakan sklearn.ensemble.RandomForestClassifier dan juga memeriksa keakuratannya juga dengan menggunakan cross_val_score modul.

from sklearn.model_selection import cross_val_score
from sklearn.datasets import make_blobs
from sklearn.ensemble import RandomForestClassifier
X, y = make_blobs(n_samples = 10000, n_features = 10, centers = 100,random_state = 0) RFclf = RandomForestClassifier(n_estimators = 10,max_depth = None,min_samples_split = 2, random_state = 0)
scores = cross_val_score(RFclf, X, y, cv = 5)
scores.mean()

Keluaran

0.9997

Contoh

Kita juga bisa menggunakan dataset sklearn untuk membangun pengklasifikasi Random Forest. Seperti pada contoh berikut kami menggunakan dataset iris. Kami juga akan menemukan skor akurasi dan matriks kebingungannya.

import numpy as np
import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.ensemble import RandomForestClassifier
from sklearn.metrics import classification_report, confusion_matrix, accuracy_score

path = "https://archive.ics.uci.edu/ml/machine-learning-database
s/iris/iris.data"
headernames = ['sepal-length', 'sepal-width', 'petal-length', 'petal-width', 'Class']
dataset = pd.read_csv(path, names = headernames)
X = dataset.iloc[:, :-1].values
y = dataset.iloc[:, 4].values
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.30)
RFclf = RandomForestClassifier(n_estimators = 50)
RFclf.fit(X_train, y_train)
y_pred = RFclf.predict(X_test)
result = confusion_matrix(y_test, y_pred)
print("Confusion Matrix:")
print(result)
result1 = classification_report(y_test, y_pred)
print("Classification Report:",)
print (result1)
result2 = accuracy_score(y_test,y_pred)
print("Accuracy:",result2)

Keluaran

Confusion Matrix:
[[14 0 0]
[ 0 18 1]
[ 0 0 12]]
Classification Report:
                  precision recall f1-score support
Iris-setosa       1.00        1.00  1.00     14
Iris-versicolor   1.00        0.95  0.97     19
Iris-virginica    0.92        1.00  0.96     12

micro avg         0.98        0.98  0.98     45
macro avg         0.97        0.98  0.98     45
weighted avg      0.98        0.98  0.98     45

Accuracy: 0.9777777777777777

Regresi dengan Random Forest

Untuk membuat regresi forest acak, modul Scikit-learn menyediakan sklearn.ensemble.RandomForestRegressor. Saat membangun regressor hutan acak, ia akan menggunakan parameter yang sama seperti yang digunakan olehsklearn.ensemble.RandomForestClassifier.

Contoh implementasi

Dalam contoh berikut, kami sedang membangun regressor hutan acak dengan menggunakan sklearn.ensemble.RandomForestregressor dan juga memprediksi nilai baru dengan menggunakan metode predict ().

from sklearn.ensemble import RandomForestRegressor
from sklearn.datasets import make_regression
X, y = make_regression(n_features = 10, n_informative = 2,random_state = 0, shuffle = False)
RFregr = RandomForestRegressor(max_depth = 10,random_state = 0,n_estimators = 100)
RFregr.fit(X, y)

Keluaran

RandomForestRegressor(
   bootstrap = True, criterion = 'mse', max_depth = 10,
   max_features = 'auto', max_leaf_nodes = None,
   min_impurity_decrease = 0.0, min_impurity_split = None,
   min_samples_leaf = 1, min_samples_split = 2,
   min_weight_fraction_leaf = 0.0, n_estimators = 100, n_jobs = None,
   oob_score = False, random_state = 0, verbose = 0, warm_start = False
)

Setelah dipasang kita dapat memprediksi dari model regresi sebagai berikut -

print(RFregr.predict([[0, 2, 3, 0, 1, 1, 1, 1, 2, 2]]))

Keluaran

[98.47729198]

Metode Pohon Ekstra

Untuk setiap fitur yang dipertimbangkan, ia memilih nilai acak untuk pemisahan. Manfaat menggunakan metode pohon tambahan adalah memungkinkan untuk mengurangi varian model sedikit lebih banyak. Kerugian menggunakan metode ini adalah sedikit meningkatkan bias.

Klasifikasi dengan Metode Pohon Ekstra

Untuk membuat pengklasifikasi menggunakan metode Extra-tree, modul Scikit-learn menyediakan sklearn.ensemble.ExtraTreesClassifier. Ini menggunakan parameter yang sama seperti yang digunakan olehsklearn.ensemble.RandomForestClassifier. Satu-satunya perbedaan adalah cara, yang dibahas di atas, mereka membangun pohon.

Contoh implementasi

Dalam contoh berikut, kami sedang membangun pengklasifikasi hutan acak dengan menggunakan sklearn.ensemble.ExtraTreeClassifier dan juga memeriksa keakuratannya dengan menggunakan cross_val_score modul.

from sklearn.model_selection import cross_val_score
from sklearn.datasets import make_blobs
from sklearn.ensemble import ExtraTreesClassifier
X, y = make_blobs(n_samples = 10000, n_features = 10, centers=100,random_state = 0)
ETclf = ExtraTreesClassifier(n_estimators = 10,max_depth = None,min_samples_split = 10, random_state = 0)
scores = cross_val_score(ETclf, X, y, cv = 5)
scores.mean()

Keluaran

1.0

Contoh

Kita juga bisa menggunakan dataset sklearn untuk membangun pengklasifikasi menggunakan metode Extra-Tree. Seperti pada contoh berikut kami menggunakan dataset Pima-Indian.

from pandas import read_csv

from sklearn.model_selection import KFold
from sklearn.model_selection import cross_val_score
from sklearn.ensemble import ExtraTreesClassifier
path = r"C:\pima-indians-diabetes.csv"
headernames = ['preg', 'plas', 'pres', 'skin', 'test', 'mass', 'pedi', 'age', 'class']
data = read_csv(path, names=headernames)
array = data.values
X = array[:,0:8]
Y = array[:,8]
seed = 7
kfold = KFold(n_splits=10, random_state=seed)
num_trees = 150
max_features = 5
ETclf = ExtraTreesClassifier(n_estimators=num_trees, max_features=max_features)
results = cross_val_score(ETclf, X, Y, cv=kfold)
print(results.mean())

Keluaran

0.7551435406698566

Regresi dengan Metode Pohon Ekstra

Untuk membuat file Extra-Tree regresi, yang disediakan oleh modul Scikit-learn sklearn.ensemble.ExtraTreesRegressor. Saat membangun regressor hutan acak, ia akan menggunakan parameter yang sama seperti yang digunakan olehsklearn.ensemble.ExtraTreesClassifier.

Contoh implementasi

Dalam contoh berikut, kami menerapkan sklearn.ensemble.ExtraTreesregressordan pada data yang sama seperti yang kami gunakan saat membuat regressor hutan acak. Mari kita lihat perbedaannya di Output

from sklearn.ensemble import ExtraTreesRegressor
from sklearn.datasets import make_regression
X, y = make_regression(n_features = 10, n_informative = 2,random_state = 0, shuffle = False)
ETregr = ExtraTreesRegressor(max_depth = 10,random_state = 0,n_estimators = 100)
ETregr.fit(X, y)

Keluaran

ExtraTreesRegressor(bootstrap = False, criterion = 'mse', max_depth = 10,
   max_features = 'auto', max_leaf_nodes = None,
   min_impurity_decrease = 0.0, min_impurity_split = None,
   min_samples_leaf = 1, min_samples_split = 2,
   min_weight_fraction_leaf = 0.0, n_estimators = 100, n_jobs = None,
   oob_score = False, random_state = 0, verbose = 0, warm_start = False)

Contoh

Setelah dipasang kita dapat memprediksi dari model regresi sebagai berikut -

print(ETregr.predict([[0, 2, 3, 0, 1, 1, 1, 1, 2, 2]]))

Keluaran

[85.50955817]