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 daricol*centerCountlebih 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:
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:
|
initCenterMethod | Tidak | random | Metode yang digunakan untuk menginisialisasi pusat. Nilai valid:
|
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:
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;
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;
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:
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:0Dalam 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.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;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 | +---------------+------------+------------+
