全部产品
Search
文档中心

Platform For AI:Pengelompokan K-means

更新时间:Jun 22, 2025

Pengelompokan K-means adalah algoritma pembelajaran tanpa pengawasan yang membagi kumpulan data menjadi K kelompok untuk meminimalkan jumlah kesalahan kuadrat dalam kluster. Algoritma ini secara iteratif menetapkan titik data ke pusat kluster terdekat dan memperbarui posisi pusat hingga penugasan kluster tidak lagi berubah secara signifikan atau jumlah iterasi maksimum tercapai.

Catatan Penggunaan

Pengelompokan K-means secara acak memilih K objek sebagai pusat awal setiap kluster, menghitung jarak antara objek yang tersisa dan pusat, mendistribusikan objek yang tersisa ke kluster terdekat, lalu menghitung ulang pusat setiap kluster. Pengelompokan K-means mengasumsikan bahwa objek pengelompokan adalah vektor spasial. Pengelompokan K-means meminimalkan jumlah kesalahan kuadrat rata-rata (MSE) di dalam setiap kluster dan terus melakukan perhitungan serta iterasi hingga fungsi kriteria konvergen.

Berikut adalah beberapa hal penting yang harus diperhatikan saat menggunakan Komponen Pengelompokan K-means:

  • Jika kosinus digunakan, kluster tertentu mungkin kosong. Dalam hal ini, jumlah kluster kurang dari K. K pusat awal mungkin merupakan vektor paralel. Jika pusat dilintasi secara berurutan, sampel tidak didistribusikan ke pusat yang merupakan vektor paralel. Kami sarankan Anda menggunakan K pusat yang Anda daftarkan di tabel pusat eksternal.

  • Jika tabel input berisi nilai NULL atau kosong, sistem melaporkan kesalahan berikut: Algo Job Failed-System Error-Null feature value found. Kami sarankan Anda menggunakan nilai default untuk imputasi.

  • Jika data jarang digunakan sebagai input dan ID kolom terbesar melebihi 2.000.000, sistem melaporkan kesalahan berikut: Algo Job Failed-System Error-Feature count can't be more than 2000000. Kami sarankan Anda memberi nomor ulang kolom dari 0 atau 1.

  • Jika operasi tulis gagal karena model pusat terlalu besar, sistem melaporkan kesalahan berikut: Algo Job Failed-System Error-kIOError:Write failed for message: comparison_measure. Kami sarankan Anda memberi nomor ulang kolom yang datanya dalam format jarang dari 0 atau 1. Jika nilai dari col*centerCount lebih besar dari 270.000.000, jalankan perintah untuk menghapus parameter modelName, lalu lakukan pengelompokan lagi.

  • Jika nama kolom dalam tabel input berisi kata kunci SQL, sistem melaporkan kesalahan berikut: FAILED: Failed Task createCenterTable:kOtherError:ODPS-0130161:[1,558] Parse exception - invalid token ',', expect ")".

  • Kolom data dari tabel input dapat bertipe INT atau DOUBLE. Jika tabel input jarang, kolom bertipe STRING didukung.

Konfigurasikan komponen

Metode 1: Konfigurasikan komponen pada halaman pipeline

Di halaman detail pipeline di Machine Learning Designer, tambahkan komponen K-means Clustering ke pipeline dan konfigurasikan parameter yang dijelaskan dalam tabel berikut.

Tab

Parameter

Deskripsi

Fields Setting

Feature Columns

Kolom yang dipilih dari tabel input untuk pelatihan. Pisahkan nama kolom dengan koma (,). Kolom bertipe INT dan DOUBLE didukung. Jika data input jarang, kolom bertipe STRING didukung.

Appended Columns

Kolom input yang ditambahkan ke tabel hasil pengelompokan. Pisahkan nama kolom dengan koma (,).

Input Sparse Matrix

Menentukan apakah data input jarang. Data jarang disajikan menggunakan pasangan kunci-nilai.

KV Pair Delimiter

Pemisah yang digunakan untuk memisahkan pasangan kunci-nilai. Secara default, koma (,) digunakan.

KV Delimiter

Pemisah yang digunakan untuk memisahkan kunci dan nilai dalam pasangan kunci-nilai. Secara default, titik dua (:) digunakan.

Parameters Setting

Clusters

Jumlah pusat pengelompokan. Nilai valid: 1 hingga 1000.

Distance Measurement Method

Metode yang digunakan untuk mengukur jarak. Nilai valid: Euclidean, Cosine, dan Cityblock.

Centroid Initialization Method

Metode yang digunakan untuk menginisialisasi pusat. Nilai valid: Random, First K, Uniform, K-means++, dan Use Initial Centroid Table.

Maximum Iterations

Jumlah maksimum iterasi. Nilai valid: 1 hingga 1000.

Convergence Criteria

Ambang batas untuk menghentikan iterasi.

Initial Random Seed

Seed acak awal. Secara default, waktu saat ini digunakan. Jika parameter ini menggunakan nilai tetap, hasil pengelompokan stabil.

Tuning

Cores

Jumlah core. Secara default, sistem menentukan nilainya.

Memory Size per Core

Ukuran memori setiap core. Satuan: MB.

Metode 2: Gunakan perintah PAI

Konfigurasikan parameter komponen menggunakan perintah PAI. Anda dapat menggunakan komponen SQL Script untuk memanggil perintah PAI. Untuk informasi lebih lanjut, lihat Skenario 4: Jalankan Perintah PAI dalam Komponen Skrip SQL.

pai -name kmeans
    -project algo_public
    -DinputTableName=pai_kmeans_test_input
    -DselectedColNames=f0,f1
    -DappendColNames=f0,f1
    -DcenterCount=3
    -Dloop=10
    -Daccuracy=0.01
    -DdistanceType=euclidean
    -DinitCenterMethod=random
    -Dseed=1
    -DmodelName=pai_kmeans_test_output_model_
    -DidxTableName=pai_kmeans_test_output_idx
    -DclusterCountTableName=pai_kmeans_test_output_couter
    -DcenterTableName=pai_kmeans_test_output_center;

Parameter

Diperlukan

Nilai Default

Deskripsi

inputTableName

Ya

Tidak ada nilai default

Nama tabel input.

selectedColNames

Tidak

Semua kolom

Kolom yang dipilih dari tabel input untuk pelatihan. Pisahkan nama kolom dengan koma (,). Kolom bertipe INT dan DOUBLE didukung. Jika data input jarang, kolom bertipe STRING didukung.

inputTablePartitions

Tidak

Semua partisi

Partisi yang dipilih dari tabel input untuk pelatihan. Format berikut didukung:

  • Partition_name=value

  • name1=value1/name2=value2: partisi multi-level

null

Pisahkan beberapa partisi dengan koma (,).

appendColNames

Tidak

Tidak ada nilai default

Kolom input yang ditambahkan ke tabel hasil pengelompokan. Pisahkan nama kolom dengan koma (,).

enableSparse

Tidak

false

Menentukan apakah data input jarang. Nilai valid: true dan false.

itemDelimiter

Tidak

,

Pemisah yang digunakan untuk memisahkan pasangan kunci-nilai.

kvDelimiter

Tidak

:

Pemisah yang digunakan untuk memisahkan kunci dan nilai dalam pasangan kunci-nilai.

centerCount

Ya

10

Jumlah pusat pengelompokan. Nilai valid: 1 hingga 1000.

distanceType

Tidak

euclidean

Metode yang digunakan untuk mengukur jarak. Nilai valid:

  • euclidean: Jarak Euclidean yang dihitung menggunakan rumus berikut: d (x - c) = (x - c) (x - c)'

  • cosine: Cosine yang dihitung menggunakan rumus berikut: cosine

  • cityblock: Jarak blok kota, yang juga disebut jarak Manhattan. Di hitung menggunakan rumus berikut: d (x - c) = | x - c |

initCenterMethod

Tidak

random

Metode yang digunakan untuk menginisialisasi pusat. Nilai valid:

  • random: K pusat awal diambil secara acak dari data input. Seed acak awal ditentukan menggunakan parameter seed.

  • topk: K baris pertama dalam data input digunakan sebagai pusat awal.

  • uniform: K pusat awal dihitung dari nilai minimum hingga nilai maksimum. Ini memastikan bahwa pusat awal tersebut tersebar merata.

  • kmpp: K pusat awal diperoleh menggunakan algoritma k-means++.

  • external: Metode ini menentukan pusat awal tambahan dalam tabel.

initCenterTableName

Tidak

Tidak ada nilai default

Nama tabel yang mencantumkan pusat awal. Parameter ini berlaku hanya jika parameter initCenterMethod diatur ke external.

loop

Tidak

100

Jumlah maksimum iterasi. Nilai valid: 1 hingga 1000.

accuracy

Tidak

0.1

Kondisi untuk menghentikan algoritma. Algoritma dihentikan jika perbedaan tujuan antara dua iterasi kurang dari nilai parameter ini.

seed

Tidak

Waktu saat ini

Seed acak awal.

modelName

Tidak

Tidak ada nilai default

Nama model output.

idxTableName

Ya

Tidak ada nilai default

Nama tabel hasil pengelompokan, yang mencakup ID kluster tempat setiap rekaman termasuk setelah pengelompokan.

idxTablePartition

Tidak

Tidak ada nilai default

Partisi dalam tabel hasil pengelompokan.

clusterCountTableName

Tidak

Tidak ada nilai default

Tabel statistik pengelompokan yang mencatat jumlah poin yang termasuk dalam setiap kluster.

centerTableName

Tidak

Tidak ada nilai default

Tabel pusat pengelompokan.

coreNum

Tidak

Ditentukan oleh sistem

Jumlah core. Parameter ini harus digunakan bersama dengan parameter memSizePerCore. Jumlah core. Nilai valid: 1 hingga 9999.

memSizePerCore

Tidak

Ditentukan oleh sistem

Ukuran memori setiap core. Nilai valid: 1024 hingga 65536. Satuan: MB.

lifecycle

Tidak

Tidak ada nilai default

Siklus hidup tabel output. Satuan: hari.

Output

Data output dari komponen Pengelompokan K-means mencakup tabel hasil pengelompokan, tabel statistik pengelompokan, dan tabel pusat pengelompokan. Format output:

  • Tabel hasil pengelompokan

    Kolom

    Deskripsi

    appendColNames

    Nama kolom tambahan.

    cluster_index

    Kluster tempat setiap sampel ditugaskan dalam tabel pelatihan.

    distance

    Jarak dari setiap sampel ke pusat kluster dalam tabel pelatihan.

  • Tabel statistik pengelompokan

    Kolom

    Deskripsi

    cluster_index

    ID kluster.

    cluster_count

    Jumlah sampel dalam setiap kluster.

  • Tabel pusat pengelompokan

    Kolom

    Deskripsi

    cluster_index

    ID kluster.

    selectedColNames

    Kolom yang dipilih dari tabel pelatihan untuk pelatihan.

Contoh

Data input dalam format padat:

  1. Buat data uji menggunakan salah satu metode berikut:

    • Gunakan tabel pusat awal

      create table pai_kmeans_test_init_center as
      select * from
      (
      select 1 as f0,2 as f1
      union all
      select 1 as f0,3 as f1
      union all
      select 1 as f0,4 as f1
      )tmp;
    • Gunakan pusat awal lainnya

      create table pai_kmeans_test_input as
      select * from
      (
        select 'id1' as id,1 as f0,2 as f1
        union all
        select 'id2' as id,1 as f0,3 as f1
        union all
        select 'id3' as id,1 as f0,4 as f1
        union all
        select 'id4' as id,0 as f0,3 as f1
        union all
        select 'id5' as id,0 as f0,4 as f1
      )tmp;
  2. Jalankan perintah PAI untuk mengirimkan parameter komponen Pengelompokan K-means.

    • Gunakan tabel pusat awal

      drop table if exists pai_kmeans_test_output_idx;
      yes
      drop table if exists pai_kmeans_test_output_couter;
      yes
      drop table if exists pai_kmeans_test_output_center;
      yes
      drop offlinemodel if exists pai_kmeans_test_output_model_;
      yes
      pai -name kmeans
          -project algo_public
          -DinputTableName=pai_kmeans_test_input
          -DinitCenterTableName=pai_kmeans_test_init_center
          -DselectedColNames=f0,f1
          -DappendColNames=f0,f1
          -DcenterCount=3
          -Dloop=10
          -Daccuracy=0.01
          -DdistanceType=euclidean
          -DinitCenterMethod=external
          -Dseed=1
          -DmodelName=pai_kmeans_test_output_model_
          -DidxTableName=pai_kmeans_test_output_idx
          -DclusterCountTableName=pai_kmeans_test_output_couter
          -DcenterTableName=pai_kmeans_test_output_center;
    • Gunakan pusat awal yang dipilih secara acak

      drop table if exists pai_kmeans_test_output_idx;
      yes
      drop table if exists pai_kmeans_test_output_couter;
      yes
      drop table if exists pai_kmeans_test_output_center;
      yes
      drop offlinemodel if exists pai_kmeans_test_output_model_;
      yes
      pai -name kmeans
          -project algo_public
          -DinputTableName=pai_kmeans_test_input
          -DselectedColNames=f0,f1
          -DappendColNames=f0,f1
          -DcenterCount=3
          -Dloop=10
          -Daccuracy=0.01
          -DdistanceType=euclidean
          -DinitCenterMethod=random
          -Dseed=1
          -DmodelName=pai_kmeans_test_output_model_
          -DidxTableName=pai_kmeans_test_output_idx
          -DclusterCountTableName=pai_kmeans_test_output_couter
          -DcenterTableName=pai_kmeans_test_output_center;
  3. Lihat tabel hasil pengelompokan, tabel statistik pengelompokan, dan tabel pusat pengelompokan.

    • Tabel hasil pengelompokan yang ditentukan oleh idxTableName

      +------------+------------+---------------+------------+
      | f0         | f1         | cluster_index | distance   |
      +------------+------------+---------------+------------+
      | 1          | 2          | 0             | 0.0        |
      | 1          | 3          | 1             | 0.5        |
      | 1          | 4          | 2             | 0.5        |
      | 0          | 3          | 1             | 0.5        |
      | 0          | 4          | 2             | 0.5        |
      +------------+------------+---------------+------------+
    • Tabel statistik pengelompokan yang ditentukan oleh clusterCountTableName

      +---------------+---------------+
      | cluster_index | cluster_count |
      +---------------+---------------+
      | 0             | 1             |
      | 1             | 2             |
      | 2             | 2             |
      +---------------+---------------+
    • Tabel pusat pengelompokan yang ditentukan oleh centerTableName

      +---------------+------------+------------+
      | cluster_index | f0         | f1         |
      +---------------+------------+------------+
      | 0             | 1.0        | 2.0        |
      | 1             | 0.5        | 3.0        |
      | 2             | 0.5        | 4.0        |
      +---------------+------------+------------+

Data input dalam format jarang:

  1. Buat data uji.

    create table pai_kmeans_test_sparse_input as
    select * from
    (
      select 1 as id,"s1" as id_s,"0:0.1,1:0.2" as kvs0,"2:0.3,3:0.4" as kvs1
      union all
      select 2 as id,"s2" as id_s,"0:1.1,2:1.2" as kvs0,"4:1.3,5:1.4" as kvs1
      union all
      select 3 as id,"s3" as id_s,"0:2.1,3:2.2" as kvs0,"6:2.3,7:2.4" as kvs1
      union all
      select 4 as id,"s4" as id_s,"0:3.1,4:3.2" as kvs0,"8:3.3,9:3.4" as kvs1
      union all
      select 5 as id,"s5" as id_s,"0:5.1,5:5.2" as kvs0,"10:5.3,6:5.4" as kvs1
    )tmp;

    Jika data input jarang, 0 digunakan untuk mengisi sel dengan nilai yang hilang. Jika beberapa kolom digunakan sebagai input, kolom-kolom tersebut digabungkan. Sebagai contoh, jika kvs0 dan kvs1 digunakan sebagai input, baris pertama berisi data berikut:

    0:0.1,1:0.2,2:0.3,3:0.4,4:0,5:0,6:0,7:0,8:0,9:0,10:0

    Dalam contoh ini, matriks jarang diberi nomor dari 0, dan memiliki lima baris dan 11 kolom. Jika kolom dalam kvs berisi 123456789:0.1, matriks jarang memiliki lima baris dan 123.456.789 kolom. Matriks ini mengonsumsi sejumlah besar sumber daya CPU dan memori. Jika kvs berisi kolom yang diberi nomor secara salah, kami sarankan Anda memberi nomor ulang kolom untuk mengurangi ukuran matriks.

  2. Jalankan perintah PAI berikut untuk mengirimkan parameter komponen Pengelompokan K-means:

    pai -name kmeans
      -project algo_public
      -DinputTableName=pai_kmeans_test_sparse_input
      -DenableSparse=true
      -DselectedColNames=kvs0,kvs1
      -DappendColNames=id,id_s
      -DitemDelimiter=,
      -DkvDelimiter=:
      -DcenterCount=3
      -Dloop=100
      -Daccuracy=0.01
      -DdistanceType=euclidean
      -DinitCenterMethod=topk
      -Dseed=1
      -DmodelName=pai_kmeans_test_input_sparse_output_model
      -DidxTableName=pai_kmeans_test_sparse_output_idx
      -DclusterCountTableName=pai_kmeans_test_sparse_output_couter
      -DcenterTableName=pai_kmeans_test_sparse_output_center;
  3. Lihat tabel hasil pengelompokan, tabel statistik pengelompokan, dan tabel pusat pengelompokan.

    • Tabel hasil pengelompokan yang ditentukan oleh idxTableName

      +------------+------------+---------------+------------+
      | id         | id_s       | cluster_index | distance   |
      +------------+------------+---------------+------------+
      | 4          | s4         | 0             | 2.90215437218629 |
      | 5          | s5         | 1             | 0.0        |
      | 1          | s1         | 2             | 0.7088723439378913 |
      | 2          | s2         | 2             | 1.1683321445547923 |
      | 3          | s3         | 0             | 2.0548722588034516 |
      +------------+------------+---------------+------------+
    • Tabel statistik pengelompokan yang ditentukan oleh clusterCountTableName

      +---------------+---------------+
      | cluster_index | cluster_count |
      +---------------+---------------+
      | 0             | 2             |
      | 1             | 1             |
      | 2             | 2             |
      +---------------+---------------+
    • Tabel pusat pengelompokan yang ditentukan oleh centerTableName

      +---------------+------------+------------+
      | cluster_index | kvs0       | kvs1       |
      +---------------+------------+------------+
      | 0             | 0:2.6,1:0,2:0,3:1.1,4:1.6,5:0 | 6:1.15,7:1.2,8:1.65,9:1.7,10:0 |
      | 1             | 0:5.1,1:0,2:0,3:0,4:0,5:5.2 | 6:5.4,7:0,8:0,9:0,10:5.3 |
      | 2             | 0:0.6,1:0.1,2:0.75,3:0.2,4:0.65,5:0.7 | 6:0,7:0,8:0,9:0,10:0 |
      +---------------+------------+------------+