Komponen Random Forest melatih klasifikasi ensemble dengan membangun beberapa Pohon keputusan pada subset acak dari data pelatihan, lalu menggabungkan prediksinya menggunakan suara mayoritas. Dua sumber keacakan—pengambilan sampel bootstrap baris (maxRecordSize) dan pemilihan fitur acak pada setiap pemisahan (randomColNum)—mengurangi varians pohon individual dan meningkatkan generalisasi terhadap data yang belum pernah dilihat sebelumnya. Gunakan komponen ini ketika satu Pohon keputusan mengalami overfitting atau ketika Anda memerlukan klasifikasi garis dasar yang tangguh yang dapat menangani fitur kontinu maupun kategorikal.
Konfigurasikan komponen
Konfigurasikan komponen Random Forest menggunakan kanvas pipeline Machine Learning Designer atau perintah PAI.
Metode 1: Konfigurasi pada kanvas pipeline
Pada halaman pipeline Machine Learning Designer di Machine Learning Platform for AI (PAI), konfigurasikan parameter berikut. Machine Learning Designer sebelumnya dikenal sebagai Machine Learning Studio.
| Tab | Parameter | Deskripsi |
|---|---|---|
| Fields Setting | Feature Columns | Kolom yang digunakan sebagai fitur untuk pelatihan. Secara default, semua kolom kecuali kolom label dan kolom bobot dipilih. |
| Excluded Columns | Kolom yang dikecualikan dari pelatihan. Kolom yang dikecualikan tidak dapat digunakan sebagai kolom fitur. | |
| Forced Conversion Column | Kolom yang dipaksa diurai berdasarkan tipe: kolom STRING, BOOLEAN, dan DATETIME diurai sebagai diskrit; kolom DOUBLE dan BIGINT diurai sebagai kontinu. Untuk memperlakukan kolom BIGINT sebagai kategorikal, tentukan menggunakan parameter forceCategorical. | |
| Weight Columns | Kolom yang berisi bobot sampel untuk setiap baris. Tipe data numerik didukung. | |
| Label Column | Kolom label dalam tabel input. Tipe data STRING dan numerik didukung. | |
| Parameters Setting | Number of Decision Trees in the Forest | Jumlah pohon. Semakin banyak pohon akan mengurangi varians tetapi meningkatkan waktu pelatihan. Nilai valid: 1 hingga 1.000. Default: 100. |
| Single Decision tree Algorithm | Algoritma pohon yang ditetapkan untuk setiap posisi dalam hutan. Untuk hutan dengan N pohon dan algorithmTypes=[a,b]: posisi [0, a) menggunakan ID3, posisi [a, b) menggunakan CART, dan posisi [b, N] menggunakan C4.5. Jika diatur ke None, algoritma pohon didistribusikan secara merata di seluruh hutan. | |
| Number of Random Features for Each Decision Tree | Jumlah fitur yang diambil secara acak pada setiap pemisahan. Nilai yang lebih rendah meningkatkan keragaman antar pohon tetapi dapat meningkatkan bias. Nilai valid: [1, N], dengan N adalah jumlah total fitur. Default: log₂N. | |
| Minimum Number of Leaf Nodes | Jumlah minimum sampel yang diperlukan pada node daun. Tingkatkan nilai ini untuk mencegah pohon mengalami overfitting pada sampel kecil. Nilai valid: bilangan bulat positif. Default: 2. | |
| Minimum Ratio of Leaf Nodes to Parent Nodes | Rasio minimum sampel pada node daun relatif terhadap node induknya. Nilai valid: [0, 1]. Default: 0. | |
| Maximum Decision Tree Depth | Kedalaman maksimum satu pohon. Batasi kedalaman untuk mengurangi overfitting. Nilai valid: [1, +∞). Default: Tanpa Batas. | |
| Number of Random Data Input for Each Decision Tree | Ukuran sampel bootstrap untuk setiap pohon. Nilai valid: (1.000, 1.000.000]. Default: 100.000. |
Metode 2: Gunakan perintah PAI
Jalankan perintah PAI melalui komponen SQL Script. Untuk informasi lebih lanjut, lihat SQL Script.
PAI -name randomforests
-project algo_public
-DinputTableName="pai_rf_test_input"
-DmodelName="pai_rf_test_model"
-DforceCategorical="f1"
-DlabelColName="class"
-DfeatureColNames="f0,f1"
-DmaxRecordSize="100000"
-DminNumPer="0"
-DminNumObj="2"
-DtreeNum="3";| Parameter | Wajib | Deskripsi | Default |
|---|---|---|---|
inputTableName | Ya | Nama tabel input. | — |
inputTablePartitions | Tidak | Partisi yang digunakan untuk pelatihan. Format: partition_name=value untuk partisi tingkat tunggal, atau name1=value1/name2=value2 untuk partisi multi-level. Pisahkan beberapa partisi dengan koma. | Semua partisi |
labelColName | Ya | Nama kolom label. | — |
modelName | Ya | Nama model output. | — |
treeNum | Ya | Jumlah pohon dalam hutan. Nilai valid: 1 hingga 1000. | 100 |
excludedColNames | Tidak | Kolom yang dikecualikan dari pelatihan. Kolom yang dikecualikan tidak dapat digunakan sebagai kolom fitur. | String kosong |
weightColName | Tidak | Nama kolom bobot. | — |
featureColNames | Tidak | Kolom fitur untuk pelatihan. | Semua kolom kecuali yang ditentukan oleh labelColName dan weightColName |
forceCategorical | Tidak | Memaksa kolom BIGINT tertentu diperlakukan sebagai kategorikal. Secara default, kolom BIGINT diperlakukan sebagai kontinu. Kolom STRING, BOOLEAN, dan DATETIME selalu diurai sebagai diskrit terlepas dari parameter ini. | INT diperlakukan sebagai kontinu |
algorithmTypes | Tidak | Algoritma pohon yang ditetapkan untuk setiap posisi dalam hutan. Untuk N pohon dengan algorithmTypes=[a,b]: [0, a) menggunakan ID3, [a, b) menggunakan CART, dan [b, N] menggunakan C4.5. Jika diatur ke None, algoritma didistribusikan secara merata. | Didistribusikan secara merata |
randomColNum | Tidak | Jumlah fitur yang diambil secara acak pada setiap pemisahan. Nilai yang lebih rendah menghasilkan pohon yang lebih beragam. Nilai valid: [1, N], dengan N adalah jumlah total fitur. | log₂N |
minNumObj | Tidak | Jumlah minimum sampel yang diperlukan pada node daun. Harus berupa bilangan bulat positif. | 2 |
minNumPer | Tidak | Rasio minimum sampel pada node daun relatif terhadap node induknya. Nilai valid: [0, 1]. | 0.0 |
maxTreeDeep | Tidak | Kedalaman maksimum satu pohon. Nilai valid: [1, +∞). | Tanpa Batas |
maxRecordSize | Tidak | Ukuran sampel bootstrap untuk setiap pohon. Nilai valid: (1000, 1000000]. | 100000 |
Contoh
Contoh ini melatih klasifikasi Random Forest dengan 3 pohon pada set data kecil untuk mengklasifikasikan sampel sebagai "good" atau "bad".
Langkah 1: Buat tabel pelatihan.
CREATE TABLE pai_rf_test_input AS
SELECT * FROM
(
SELECT 1 AS f0, 2 AS f1, 'good' AS class
UNION ALL
SELECT 1 AS f0, 3 AS f1, 'good' AS class
UNION ALL
SELECT 1 AS f0, 4 AS f1, 'bad' AS class
UNION ALL
SELECT 0 AS f0, 3 AS f1, 'good' AS class
UNION ALL
SELECT 0 AS f0, 4 AS f1, 'bad' AS class
) tmp;Langkah 2: Latih model.
PAI -name randomforests
-project algo_public
-DinputTableName="pai_rf_test_input"
-Dmodelname="pai_rf_test_model"
-DforceCategorical="f1"
-DlabelColName="class"
-DfeatureColNames="f0,f1"
-DmaxRecordSize="100000"
-DminNumPer="0"
-DminNumObj="2"
-DtreeNum="3";Ini melatih hutan dengan 3 pohon menggunakan f0 dan f1 sebagai fitur, dengan class sebagai label. Kolom f1 dipaksa menjadi tipe kategorikal melalui forceCategorical.
Langkah 3: Periksa output model.
Setelah pelatihan, model disimpan sebagai file Predictive Model Markup Language (PMML). Output PMML menggambarkan setiap pohon sebagai segmen TreeModel dalam MiningModel yang menggunakan suara mayoritas untuk menggabungkan prediksi:
<?xml version="1.0" encoding="utf-8"?>
<PMML xmlns="http://www.dmg.org/PMML-4_2" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="4.2" xsi:schemaLocation="http://www.dmg.org/PMML-4_2 http://www.dmg.org/v4-2/pmml-4-2.xsd">
<Header copyright="Copyright (c) 2014, Alibaba Inc." description="">
<Application name="ODPS/PMML" version="0.1.0"/>
<Timestamp>Tue, 12 Jul 2016 07:04:48 GMT</Timestamp>
</Header>
<DataDictionary numberOfFields="2">
<DataField name="f0" optype="continuous" dataType="integer"/>
<DataField name="f1" optype="continuous" dataType="integer"/>
<DataField name="class" optype="categorical" dataType="string">
<Value value="bad"/>
<Value value="good"/>
</DataField>
</DataDictionary>
<MiningModel modelName="xlab_m_random_forests_1_75078_v0" functionName="classification" algorithmName="RandomForests"/>
<MiningSchema>
<MiningField name="f0" usageType="active"/>
<MiningField name="f1" usageType="active"/>
<MiningField name="class" usageType="target"/>
</MiningSchema>
<Segmentation multipleModelMethod="majorityVote">
<Segment id="0">
<True/>
<TreeModel modelName="xlab_m_random_forests_1_75078_v0" functionName="classification" algorithmName="RandomForests">
<MiningSchema>
<MiningField name="f0" usageType="active"/>
<MiningField name="f1" usageType="active"/>
<MiningField name="class" usageType="target"/>
</MiningSchema>
<Node id="1">
<True/>
<ScoreDistribution value="bad" recordCount="2"/>
<ScoreDistribution value="good" recordCount="3"/>
<Node id="2" score="good">
<SimplePredicate field="f1" operator="equal" value="2"/>
<ScoreDistribution value="good" recordCount="1"/>
</Node>
<Node id="3" score="good">
<SimplePredicate field="f1" operator="equal" value="3"/>
<ScoreDistribution value="good" recordCount="2"/>
</Node>
<Node id="4" score="bad">
<SimplePredicate field="f1" operator="equal" value="4"/>
<ScoreDistribution value="bad" recordCount="2"/>
</Node>
</Node>
</TreeModel>
</Segment>
<Segment id="1">
<True/>
<TreeModel modelName="xlab_m_random_forests_1_75078_v0" functionName="classification" algorithmName="RandomForests">
<MiningSchema>
<MiningField name="f0" usageType="active"/>
<MiningField name="f1" usageType="active"/>
<MiningField name="class" usageType="target"/>
</MiningSchema>
<Node id="1">
<True/>
<ScoreDistribution value="bad" recordCount="2"/>
<ScoreDistribution value="good" recordCount="3"/>
<Node id="2" score="good">
<SimpleSetPredicate field="f1" booleanOperator="isIn">
<Array n="2" type="integer">2 3</Array>
</SimpleSetPredicate>
<ScoreDistribution value="good" recordCount="3"/>
</Node>
<Node id="3" score="bad">
<SimpleSetPredicate field="f1" booleanOperator="isNotIn">
<Array n="2" type="integer">2 3</Array>
</SimpleSetPredicate>
<ScoreDistribution value="bad" recordCount="2"/>
</Node>
</Node>
</TreeModel>
</Segment>
<Segment id="2">
<True/>
<TreeModel modelName="xlab_m_random_forests_1_75078_v0" functionName="classification" algorithmName="RandomForests">
<MiningSchema>
<MiningField name="f0" usageType="active"/>
<MiningField name="f1" usageType="active"/>
<MiningField name="class" usageType="target"/>
</MiningSchema>
<Node id="1">
<True/>
<ScoreDistribution value="bad" recordCount="2"/>
<ScoreDistribution value="good" recordCount="3"/>
<Node id="2" score="bad">
<SimplePredicate field="f0" operator="lessOrEqual" value="0.5"/>
<ScoreDistribution value="bad" recordCount="1"/>
<ScoreDistribution value="good" recordCount="1"/>
</Node>
<Node id="3" score="good">
<SimplePredicate field="f0" operator="greaterThan" value="0.5"/>
<ScoreDistribution value="bad" recordCount="1"/>
<ScoreDistribution value="good" recordCount="2"/>
</Node>
</Node>
</TreeModel>
</Segment>
</Segmentation>
</MiningModel>
</PMML>Elemen utama yang perlu diperhatikan dalam output PMML:
`DataDictionary`: Mencantumkan setiap kolom fitur dan kolom label, beserta tipe datanya (
continuousataucategorical).`Segmentation multipleModelMethod="majorityVote"`: Menunjukkan bahwa hutan menggabungkan prediksi dari semua pohon dengan suara mayoritas.
`ScoreDistribution`: Menampilkan distribusi kelas pada setiap node, yang menunjukkan seberapa percaya diri setiap pohon mengklasifikasikan sampel pada pemisahan tersebut.
Langkah 4: Lihat output visualisasi.
