Apakah penting untuk mengukur data sebelum pengelompokan?

44

Saya menemukan tutorial ini , yang menunjukkan bahwa Anda harus menjalankan fungsi skala pada fitur sebelum pengelompokan (saya percaya itu mengubah data menjadi z-skor).

Saya bertanya-tanya apakah itu perlu. Saya bertanya sebagian besar karena ada titik siku yang bagus ketika saya tidak menskala data, tetapi menghilang ketika diskalakan. :)

Jeremy
sumber

Jawaban:

59

Masalahnya adalah apa yang mewakili ukuran jarak antar kasus yang baik.

Jika Anda memiliki dua fitur, satu di mana perbedaan antara kasus besar dan kecil lainnya, apakah Anda siap untuk memiliki yang pertama sebagai hampir satu-satunya penggerak jarak?

Jadi misalnya jika Anda mengelompokkan orang dalam berat badan mereka dalam kilogram dan ketinggian dalam meter, apakah perbedaan 1kg sama pentingnya dengan perbedaan ketinggian 1m? Apakah penting bahwa Anda akan mendapatkan pengelompokan yang berbeda pada bobot dalam kilogram dan ketinggian dalam sentimeter? Jika jawaban Anda masing-masing "tidak" dan "ya" maka Anda mungkin harus mengukur.

Di sisi lain, jika Anda mengelompokkan kota-kota Kanada berdasarkan jarak timur / barat dan jarak utara / selatan maka, meskipun biasanya akan ada perbedaan yang jauh lebih besar timur / barat, Anda mungkin senang hanya menggunakan jarak yang tidak dinaikkan baik dalam kilometer atau mil (meskipun Anda mungkin ingin menyesuaikan derajat bujur dan lintang untuk kelengkungan bumi).

Henry
sumber
33

Jawaban lain benar, tetapi mungkin bisa membantu untuk memahami secara intuitif masalah dengan melihat contoh. Di bawah ini, saya menghasilkan dataset yang memiliki dua kluster yang jelas, tetapi dimensi non-cluster jauh lebih besar daripada dimensi cluster (perhatikan skala yang berbeda pada sumbu). Clustering pada data non-normal gagal. Clustering pada data yang dinormalkan bekerja dengan sangat baik.

Hal yang sama akan berlaku dengan data yang dikelompokkan di kedua dimensi, tetapi normalisasi akan kurang membantu. Dalam hal ini, itu mungkin membantu untuk melakukan PCA, kemudian menormalkan, tetapi itu hanya akan membantu jika cluster dipisahkan secara linear, dan tidak tumpang tindih dalam dimensi PCA. (Contoh ini hanya bekerja dengan sangat jelas karena jumlah cluster yang rendah)

data clustered sintetik, dengan k-means clustering pada versi normal dan non-normal

import numpy as np
import seaborn
import matplotlib.pyplot as plt
from sklearn.cluster import KMeans

rnorm = np.random.randn

x = rnorm(1000) * 10  
y = np.concatenate([rnorm(500), rnorm(500) + 5])

fig, axes = plt.subplots(3, 1)

axes[0].scatter(x, y)
axes[0].set_title('Data (note different axes scales)')

km = KMeans(2)

clusters = km.fit_predict(np.array([x, y]).T)

axes[1].scatter(x, y, c=clusters, cmap='bwr')
axes[1].set_title('non-normalised K-means')

clusters = km.fit_predict(np.array([x / 10, y]).T)

axes[2].scatter(x, y, c=clusters, cmap='bwr')
axes[2].set_title('Normalised K-means')
tidak ada apa-apa1
sumber
17

Itu tergantung pada data Anda .

Jika Anda memiliki atribut dengan makna yang jelas. Katakan, lintang dan bujur, maka Anda tidak boleh skala data Anda, karena ini akan menyebabkan distorsi. (K-berarti mungkin pilihan yang buruk juga - Anda perlu sesuatu yang dapat menangani lat / lon secara alami)

Jika Anda memiliki data numerik campuran, di mana setiap atribut adalah sesuatu yang sama sekali berbeda (katakanlah, ukuran sepatu dan berat), memiliki unit yang berbeda terpasang (lb, ton, m, kg ...) maka nilai-nilai ini sebenarnya tidak sebanding; z membakukan mereka adalah praktik terbaik untuk memberikan bobot yang sama kepada mereka.

Jika Anda memiliki nilai biner, atribut diskrit, atau atribut kategororial, menjauhlah dari k-means. K-means perlu menghitung mean , dan nilai rata-rata tidak berarti pada data jenis ini.

Anony-Mousse
sumber
5

Seperti yang dijelaskan dalam makalah ini , k-means meminimalkan fungsi kesalahan menggunakan algoritma Newton, yaitu algoritma optimasi berbasis gradien. Normalisasi data meningkatkan konvergensi dari algoritma tersebut. Lihat di sini untuk detailnya.

Idenya adalah bahwa jika komponen data yang berbeda (fitur) memiliki skala yang berbeda, maka turunannya cenderung menyelaraskan sepanjang arah dengan varians yang lebih tinggi, yang mengarah pada konvergensi yang lebih buruk / lebih lambat.

jpmuc
sumber
4

Standardisasi adalah langkah penting dari preprocessing data.

itu mengontrol variabilitas dataset, itu mengkonversi data menjadi rentang tertentu menggunakan transformasi linear yang menghasilkan kualitas cluster yang baik dan meningkatkan akurasi algoritma clustering, periksa tautan di bawah ini untuk melihat efeknya pada analisis k-means.

https://pdfs.semanticscholar.org/1d35/2dd5f030589ecfe8910ab1cc0dd320bf600d.pdf

gui juni
sumber