All Products
Search
Document Center

Platform For AI:Random forest

Last Updated:Apr 02, 2026

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.

TabParameterDeskripsi
Fields SettingFeature ColumnsKolom yang digunakan sebagai fitur untuk pelatihan. Secara default, semua kolom kecuali kolom label dan kolom bobot dipilih.
Excluded ColumnsKolom yang dikecualikan dari pelatihan. Kolom yang dikecualikan tidak dapat digunakan sebagai kolom fitur.
Forced Conversion ColumnKolom 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 ColumnsKolom yang berisi bobot sampel untuk setiap baris. Tipe data numerik didukung.
Label ColumnKolom label dalam tabel input. Tipe data STRING dan numerik didukung.
Parameters SettingNumber of Decision Trees in the ForestJumlah pohon. Semakin banyak pohon akan mengurangi varians tetapi meningkatkan waktu pelatihan. Nilai valid: 1 hingga 1.000. Default: 100.
Single Decision tree AlgorithmAlgoritma 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 TreeJumlah 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 NodesJumlah 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 NodesRasio minimum sampel pada node daun relatif terhadap node induknya. Nilai valid: [0, 1]. Default: 0.
Maximum Decision Tree DepthKedalaman maksimum satu pohon. Batasi kedalaman untuk mengurangi overfitting. Nilai valid: [1, +∞). Default: Tanpa Batas.
Number of Random Data Input for Each Decision TreeUkuran 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";
ParameterWajibDeskripsiDefault
inputTableNameYaNama tabel input.
inputTablePartitionsTidakPartisi 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
labelColNameYaNama kolom label.
modelNameYaNama model output.
treeNumYaJumlah pohon dalam hutan. Nilai valid: 1 hingga 1000.100
excludedColNamesTidakKolom yang dikecualikan dari pelatihan. Kolom yang dikecualikan tidak dapat digunakan sebagai kolom fitur.String kosong
weightColNameTidakNama kolom bobot.
featureColNamesTidakKolom fitur untuk pelatihan.Semua kolom kecuali yang ditentukan oleh labelColName dan weightColName
forceCategoricalTidakMemaksa 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
algorithmTypesTidakAlgoritma 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
randomColNumTidakJumlah 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
minNumObjTidakJumlah minimum sampel yang diperlukan pada node daun. Harus berupa bilangan bulat positif.2
minNumPerTidakRasio minimum sampel pada node daun relatif terhadap node induknya. Nilai valid: [0, 1].0.0
maxTreeDeepTidakKedalaman maksimum satu pohon. Nilai valid: [1, +∞).Tanpa Batas
maxRecordSizeTidakUkuran 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 (continuous atau categorical).

  • `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.

Visualized output