Apakah perlu untuk membakukan data Anda sebelum pengelompokan?

23

Apakah perlu untuk membakukan data Anda sebelum cluster? Dalam contoh dari scikit learntentang DBSCAN, di sini mereka melakukan ini di baris:

X = StandardScaler().fit_transform(X)

Tapi saya tidak mengerti mengapa itu perlu. Bagaimanapun, pengelompokan tidak mengasumsikan distribusi data tertentu - itu adalah metode pembelajaran yang tidak diawasi sehingga tujuannya adalah untuk mengeksplorasi data.

Mengapa perlu mengubah data?

Candic3
sumber
Terima kasih atas tanggapan terperinci! Sebagai tindak lanjut dari semua jawaban Anda: Saya mengerti bahwa jika fitur-fiturnya ada pada skala yang berbeda, ini dapat menimbulkan masalah. Namun, jika metrik jarak dinormalisasi ke varian, apakah ini mencapai hasil yang sama dengan penskalaan standar sebelum pengelompokan? yaitu saya biasanya menggunakan euclidean distance yang dinormalisasi terkait - apakah ini juga mengurangi efek penskalaan?
Candic3

Jawaban:

19

Normalisasi tidak selalu diperlukan, tetapi jarang menyakitkan.

Beberapa contoh:

K-means :

K-means clustering adalah "isotropik" di semua arah ruang dan karenanya cenderung menghasilkan lebih banyak atau lebih sedikit (bukan memanjang) cluster. Dalam situasi ini meninggalkan varians yang tidak sama dengan menempatkan bobot lebih pada variabel dengan varians yang lebih kecil.

Contoh di Matlab:

X = [randn(100,2)+ones(100,2);...
     randn(100,2)-ones(100,2)];

% Introduce denormalization
% X(:, 2) = X(:, 2) * 1000 + 500;

opts = statset('Display','final');

[idx,ctrs] = kmeans(X,2,...
                    'Distance','city',...
                    'Replicates',5,...
                    'Options',opts);

plot(X(idx==1,1),X(idx==1,2),'r.','MarkerSize',12)
hold on
plot(X(idx==2,1),X(idx==2,2),'b.','MarkerSize',12)
plot(ctrs(:,1),ctrs(:,2),'kx',...
     'MarkerSize',12,'LineWidth',2)
plot(ctrs(:,1),ctrs(:,2),'ko',...
     'MarkerSize',12,'LineWidth',2)
legend('Cluster 1','Cluster 2','Centroids',...
       'Location','NW')
title('K-means with normalization')

masukkan deskripsi gambar di sini

masukkan deskripsi gambar di sini

(FYI: Bagaimana saya bisa mendeteksi jika dataset saya berkerumun atau tidak terputus (yaitu membentuk satu cluster tunggal )

Cluster terdistribusi :

Analisis komparatif menunjukkan bahwa hasil clustering terdistribusi tergantung pada jenis prosedur normalisasi.

Jaringan saraf tiruan (input) :

Jika variabel input digabungkan secara linier, seperti dalam MLP, maka jarang diperlukan standar untuk input, setidaknya secara teori. Alasannya adalah bahwa setiap skala ulang vektor input dapat dibatalkan secara efektif dengan mengubah bobot dan bias yang sesuai, membuat Anda dengan output yang sama persis seperti yang Anda miliki sebelumnya. Namun, ada berbagai alasan praktis mengapa standardisasi input dapat membuat pelatihan lebih cepat dan mengurangi kemungkinan terjebak dalam optima lokal. Juga, pembusukan berat dan estimasi Bayesian dapat dilakukan dengan lebih mudah dengan input standar.

Jaringan saraf tiruan (input / output)

Haruskah Anda melakukan hal-hal ini pada data Anda? Jawabannya adalah, tergantung.

Menstandarisasi baik input atau variabel target cenderung membuat proses pelatihan berperilaku lebih baik dengan meningkatkan kondisi numerik (lihat ftp://ftp.sas.com/pub/neural/illcond/illcond.html ) dari masalah optimasi dan memastikan bahwa berbagai standar nilai-nilai yang terlibat dalam inisialisasi dan terminasi adalah tepat. Menstandarkan target juga dapat memengaruhi fungsi objektif.

Standarisasi kasus harus didekati dengan hati-hati karena membuang informasi. Jika informasi itu tidak relevan, maka standarisasi kasus dapat sangat membantu. Jika informasi itu penting, maka standarisasi kasus dapat menjadi bencana.


Menariknya, mengubah unit pengukuran bahkan dapat menyebabkan orang melihat struktur pengelompokan yang sangat berbeda: Kaufman, Leonard, dan Peter J. Rousseeuw .. "Menemukan grup dalam data: Pengantar analisis klaster." (2005).

Dalam beberapa aplikasi, mengubah unit pengukuran bahkan dapat menyebabkan orang melihat struktur pengelompokan yang sangat berbeda. Misalnya, usia (dalam tahun) dan tinggi (dalam sentimeter) dari empat orang imajiner diberikan pada Tabel 3 dan diplot pada Gambar 3. Tampaknya {A, B) dan {C, 0) adalah dua kelompok yang terpisah . Di sisi lain, ketika tinggi dinyatakan dalam kaki satu memperoleh Tabel 4 dan Gambar 4, di mana cluster yang jelas sekarang {A, C} dan {B, D}. Partisi ini benar-benar berbeda dari yang pertama karena setiap subjek telah menerima pendamping lain. (Gambar 4 akan lebih rata jika usia diukur dalam beberapa hari.)

Untuk menghindari ketergantungan ini pada pilihan unit pengukuran, seseorang memiliki pilihan untuk menstandarisasi data. Ini mengubah pengukuran asli ke variabel tanpa unit.

masukkan deskripsi gambar di sini masukkan deskripsi gambar di sini

Kaufman et al. berlanjut dengan beberapa pertimbangan menarik (halaman 11):

Dari sudut pandang filosofis, standardisasi tidak benar-benar menyelesaikan masalah. Memang, pilihan unit pengukuran menimbulkan bobot relatif dari variabel. Mengekspresikan variabel dalam unit yang lebih kecil akan mengarah ke rentang yang lebih besar untuk variabel itu, yang kemudian akan memiliki efek besar pada struktur yang dihasilkan. Di sisi lain, dengan menstandarisasi satu upaya untuk memberikan semua variabel bobot yang sama, dengan harapan mencapai objektivitas. Dengan demikian, dapat digunakan oleh seorang praktisi yang tidak memiliki pengetahuan sebelumnya. Namun, mungkin bahwa beberapa variabel secara intrinsik lebih penting daripada yang lain dalam aplikasi tertentu, dan kemudian penugasan bobot harus didasarkan pada pengetahuan materi pelajaran (lihat, misalnya, Abrahamowicz, 1985). Di samping itu, telah ada upaya untuk merancang teknik pengelompokan yang independen dari skala variabel (Friedman dan Rubin, 1967). Usulan Hardy dan Rasson (1982) adalah untuk mencari partisi yang meminimalkan volume total cembung lambung cluster. Pada prinsipnya metode semacam itu invarian sehubungan dengan transformasi linear dari data, tetapi sayangnya tidak ada algoritma untuk implementasinya (kecuali untuk perkiraan yang terbatas pada dua dimensi). Oleh karena itu, dilema standardisasi tampaknya tidak dapat dihindari saat ini dan program-program yang dijelaskan dalam buku ini menyerahkan pilihan kepada pengguna. Usulan Hardy dan Rasson (1982) adalah untuk mencari partisi yang meminimalkan volume total cembung lambung cluster. Pada prinsipnya metode semacam itu invarian sehubungan dengan transformasi linear dari data, tetapi sayangnya tidak ada algoritma untuk implementasinya (kecuali untuk perkiraan yang terbatas pada dua dimensi). Oleh karena itu, dilema standardisasi tampaknya tidak dapat dihindari saat ini dan program-program yang dijelaskan dalam buku ini menyerahkan pilihan kepada pengguna. Usulan Hardy dan Rasson (1982) adalah untuk mencari partisi yang meminimalkan volume total cembung lambung cluster. Pada prinsipnya metode semacam itu invarian sehubungan dengan transformasi linear dari data, tetapi sayangnya tidak ada algoritma untuk implementasinya (kecuali untuk perkiraan yang terbatas pada dua dimensi). Oleh karena itu, dilema standardisasi tampaknya tidak dapat dihindari saat ini dan program-program yang dijelaskan dalam buku ini menyerahkan pilihan kepada pengguna.

Franck Dernoncourt
sumber
1
Jawaban ini sangat fenomenal
Candic3
6

Membakukan data direkomendasikan karena jika tidak, rentang nilai di setiap fitur akan bertindak sebagai bobot ketika menentukan bagaimana mengelompokkan data, yang biasanya tidak diinginkan.

Sebagai contoh, pertimbangkan metrik standar untuk sebagian besar algoritma pengelompokan (termasuk DBSCAN dalam pembelajaran sci-kit) - euclidean, atau dikenal sebagai norma L2. Jika salah satu fitur Anda memiliki rentang nilai yang jauh lebih besar daripada yang lain, pengelompokan akan sepenuhnya didominasi oleh satu fitur itu. Untuk menggambarkan tampilan ini pada contoh sederhana di bawah ini:

>>> import numpy as np
>>> from sklearn.preprocessing import StandardScaler
>>> from sklearn.metrics.pairwise import euclidean_distances
>>> 
>>> X = np.array([[1,2,100],[4,3,50],[1,1,75]])
>>> 
>>> print X
[[  1   2 100]
 [  4   3  50]
 [  1   1  75]]
>>> 
>>> print euclidean_distances(X)
[[  0.          50.0999002   25.01999201]
 [ 50.0999002    0.          25.25866188]
 [ 25.01999201  25.25866188   0.        ]]
>>> print euclidean_distances(StandardScaler().fit_transform(X))
[[ 0.          3.46410162  1.73205081]
 [ 3.46410162  0.          3.46410162]
 [ 1.73205081  3.46410162  0.        ]]

Dari sini Anda akan melihat bahwa jarak euclidean antara versi yang tidak terstandarisasi didominasi oleh kolom ketiga karena rentang nilainya jauh lebih besar daripada dua lainnya. Namun ketika data terstandarisasi ini tidak lagi menjadi masalah dan menimbang setiap fitur sama ketika menghitung jarak antara setiap titik data.

David
sumber
1

Tidak perlu untuk melakukan standarisasi, apakah diperlukan atau tidak tergantung pada jarak metrik yang Anda pilih.

Misalnya jika Anda memilih jarak Mahalanobis maka pemisahan akan didasarkan pada jumlah standar deviasi yang memisahkan titik dan bukan jarak absolut di antara mereka, karena itu adalah metrik skala invarian.

Seperti banyak hal dalam pembelajaran mesin tidak ada jawaban yang sulit dan cepat dan satu-satunya cara untuk mengetahui dengan pasti adalah menerapkan berbagai teknik melihat yang memberikan hasil yang paling tepat untuk data Anda.

image_doctor
sumber
0

Saya menemukan dalam beberapa kasus berguna untuk mendefinisikan fungsi "evaluasi bisnis", mendefinisikan "pentingnya" dimensi yang digunakan untuk pengelompokan. Misalnya untuk pedagang sayur yang mengelompok pelanggan, jika apel dua kali lebih mahal dari jeruk, jumlah apel akan berlipat ganda.

Pembom Marmite
sumber
Tapi, tidak bisakah Anda memasukkannya sebagai fitur tambahan yang Anda klasterkan? yaitu harga menjadi fitur untuk dikelompokkan?
Candic3