Decision Tree
Decision tree merupakan metode non parametrik yang digunakan untuk klasifikasi dan regresi. Tujuan dari decision tree adalah membuat model yang memprediksi nilai variabel target dengan mengikuti aturan keputusan sederhana dari fitur data yang tersedia
import pandas as pd
from sklearn.datasets import load_breast_cancer
bc=load_breast_cancer()
df= pd.DataFrame(bc.data, columns=bc.feature_names)
df['diagnosis']=bc.target
df
import matplotlib.pyplot as plt
%matplotlib inline
df.iloc[:,:10].plot(kind='bar');
X=df.iloc[:,:10]
from sklearn.preprocessing import Normalizer
ss=Normalizer()
x=ss.fit_transform(X)
y=pd.DataFrame(x)
y
y.plot(kind='bar')
Decision tree memiliki 2 jenis node
Regression : sum(y — prediction)²
Classification : G = sum(pk * (1 — pk))
DecisionTreeClassifier adalah metode yang mampu melakukan klasifikasi multi-kelas pada dataset.
min_weight_fraction_leaf : float, optional (default=0.) Fraksi total minimum dari jumlah total bobot (dari semua sampel input) yang diperlukan berada pada simpul daun. Sampel memiliki bobot yang sama ketika sample_weight tidak disediakan.
If int, then consider max_features features at each split. If float, then max_features is a fraction and int(max_features * n_features) features are considered at each split. If “auto”, then max_features=sqrt(n_features). If “sqrt”, then max_features=sqrt(n_features). If “log2”, then max_features=log2(n_features). If None, then max_features=n_features.
featureimportances : array of shape = [n_features] Kembalikan kepentingan fitur.
Seperti pengklasifikasi lain, DecisionTreeClassifier mengambil input dua array: array X, jarang atau padat, dengan ukuran [n_samples, n_fatures] memegang data training, dan array Y dari nilai integer, ukuran [n_samples], memegang label kelas untuk data training:
from sklearn import tree
from sklearn.datasets import load_iris
iris=load_iris()
X=iris.data
Y=iris.target
clf = tree.DecisionTreeClassifier()
clf = clf.fit(X, Y)
Setelah dipasang, model kemudian dapat digunakan untuk memprediksi kelas sampel:
Y
clf.predict([X[60,:]])
Probabilitas masing-masing kelas dapat diprediksi, yang merupakan sebagian kecil dari data training dari kelas yang sama dalam leaves:
DecisionTreeClassifier mampu klasifikasi biner (di mana labelnya [-1, 1]) dan klasifikasi multiclass (di mana labelnya adalah klasifikasi [0,…, K-1])
from sklearn.datasets import load_iris
from sklearn import tree
iris = load_iris()
clf = tree.DecisionTreeClassifier()
clf = clf.fit(iris.data, iris.target)
Plot tree dengan fungsi plot_tree:
plt.figure(figsize=(18,9))
tree.plot_tree(clf.fit(iris.data, iris.target));
Eksportir export_graphviz juga mendukung berbagai opsi estetika, termasuk pewarnaan node berdasarkan kelas mereka (atau nilai untuk regresi) dan menggunakan variabel eksplisit dan nama kelas jika diinginkan. Notebook Jupyter juga membuat plot ini sebaris secara otomatis:
import graphviz
dot_data = tree.export_graphviz(clf, out_file=None, feature_names=iris.feature_names,
class_names=iris.target_names,filled=True, rounded=True,
special_characters=True)
graph = graphviz.Source(dot_data)
graph
Klasifikasi Decision Tree langkah-perlangkah dapat dilihat di video berikut:
Decision Tree juga dapat diterapkan untuk masalah regresi, menggunakan kelas DecisionTreeRegressor. Seperti dalam pengaturan klasifikasi, metode fit akan dianggap sebagai array argumen X dan y, hanya saja dalam hal ini y diharapkan memiliki nilai floating point juga nilai integer:
from sklearn import tree
X = [[0, 0], [2, 2]]
y = [0.5, 2.5]
clf = tree.DecisionTreeRegressor()
clf = clf.fit(X, y)
clf.predict([[1, 1]])