จำเป็นหรือไม่ที่จะต้องทำการขยายข้อมูลก่อนทำการจัดกลุ่ม?


44

ฉันพบบทช่วยสอนนี้ซึ่งแนะนำว่าคุณควรเรียกใช้ฟังก์ชันมาตราส่วนบนฟีเจอร์ก่อนการจัดกลุ่ม (ฉันเชื่อว่ามันแปลงข้อมูลเป็นคะแนน z)

ฉันสงสัยว่าจำเป็นหรือไม่ ฉันถามเป็นส่วนใหญ่เพราะมีจุดศอกที่ดีเมื่อฉันไม่ได้ปรับขนาดข้อมูล แต่มันจะหายไปเมื่อมันถูกลดขนาด :)

คำตอบ:


59

ปัญหาคือสิ่งที่แสดงถึงการวัดระยะทางที่ดีระหว่างกรณี

หากคุณมีคุณสมบัติสองอย่างสิ่งหนึ่งที่ความแตกต่างระหว่างเคสมีขนาดใหญ่และอีกขนาดเล็กคุณพร้อมที่จะให้อดีตเป็นไดรเวอร์ระยะทางไกลหรือไม่?

ตัวอย่างเช่นถ้าคุณรวมกลุ่มคนที่มีน้ำหนักเป็นกิโลกรัมและสูงเป็นเมตรความแตกต่าง 1 กิโลกรัมมีความสำคัญเท่ากับความสูง 1 เมตรหรือไม่ เป็นเรื่องสำคัญหรือไม่ที่คุณจะได้รับการจัดกลุ่มที่แตกต่างกันเกี่ยวกับน้ำหนักเป็นกิโลกรัมและความสูงเป็นเซนติเมตร หากคำตอบของคุณคือ "ไม่" และ "ใช่" ตามลำดับคุณควรปรับขนาด

ในทางกลับกันหากคุณทำการรวมกลุ่มเมืองในแคนาดาตามระยะทางตะวันออก / ตะวันตกและระยะทางเหนือ / ใต้จากนั้นแม้ว่าโดยทั่วไปจะมีความแตกต่างที่ใหญ่กว่าตะวันออก / ตะวันตกคุณอาจมีความสุขเพียงแค่ใช้ระยะทางที่ไม่ปรับสัดส่วนทั้งกิโลเมตรหรือไมล์ (แม้ว่าคุณอาจต้องการปรับองศาของลองจิจูดและละติจูดสำหรับความโค้งของโลก)


33

คำตอบอื่น ๆ นั้นถูกต้อง แต่อาจช่วยให้เข้าใจปัญหาได้ง่ายขึ้นโดยดูตัวอย่าง ด้านล่างฉันสร้างชุดข้อมูลที่มีสองกลุ่มชัดเจน แต่ส่วนข้อมูลที่ไม่ได้ทำคลัสเตอร์นั้นมีขนาดใหญ่กว่ามิติข้อมูลกลุ่ม (สังเกตขนาดที่แตกต่างกันในแกน) การจัดกลุ่มข้อมูลที่ไม่ได้ทำให้เป็นมาตรฐานล้มเหลว การทำคลัสเตอร์บนข้อมูลที่ได้มาตรฐานทำได้ดีมาก

เช่นเดียวกับที่ใช้กับกลุ่มข้อมูลในทั้งสองมิติ แต่การทำให้เป็นมาตรฐานจะช่วยได้น้อยลง ในกรณีดังกล่าวอาจช่วยทำ PCA จากนั้นทำให้เป็นมาตรฐาน แต่จะช่วยได้ก็ต่อเมื่อกลุ่มแยกกันเป็นเส้นตรงและไม่ทับซ้อนในมิติ PCA (ตัวอย่างนี้ใช้งานได้อย่างชัดเจนเท่านั้นเนื่องจากจำนวนคลัสเตอร์ต่ำ)

ข้อมูลคลัสเตอร์สังเคราะห์ที่มี k-หมายถึงการจัดกลุ่มทั้งในรุ่นปกติและไม่ปกติ

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')

17

มันขึ้นอยู่กับข้อมูลของคุณ

หากคุณมีคุณสมบัติที่มีความหมายที่ชัดเจน บอกว่าละติจูดและลองจิจูดแล้วคุณไม่ควรปรับขนาดข้อมูลของคุณเพราะจะทำให้เกิดการบิดเบือน (K-หมายความว่าอาจเป็นทางเลือกที่ไม่ดีเช่นกัน - คุณต้องการบางสิ่งที่สามารถจัดการ lat / lon ได้ตามธรรมชาติ)

หากคุณมีข้อมูลตัวเลขแบบผสมที่แต่ละแอตทริบิวต์มีความแตกต่างอย่างสิ้นเชิง (เช่นขนาดรองเท้าและน้ำหนัก) จะมีหน่วยต่างกัน (lb, ตัน, เมตร, กก. ... ) ดังนั้นค่าเหล่านี้จะไม่สามารถเทียบเคียงได้ การกำหนดมาตรฐานให้กับพวกมันคือวิธีปฏิบัติที่ดีที่สุดในการให้น้ำหนักที่เท่ากัน

หากคุณมีค่าไบนารี่แอททริบิวต์ที่ไม่ต่อเนื่องหรือแอ็ตทริบิวต์ categorial อยู่ห่างจาก k-mean K- Mean ต้องคำนวณค่าเฉลี่ยและค่าเฉลี่ยนั้นไม่มีความหมายกับข้อมูลประเภทนี้


5

ดังที่อธิบายไว้ในบทความนี้k-mean ลดฟังก์ชันข้อผิดพลาดให้น้อยที่สุดโดยใช้อัลกอริทึมของ Newton เช่นอัลกอริทึมการเพิ่มประสิทธิภาพแบบไล่ระดับสี การทำให้ข้อมูลกลับมาเป็นปกติปรับปรุงการรวมกันของอัลกอริธึม ดูที่นี่สำหรับรายละเอียดบางอย่างเกี่ยวกับมัน

แนวคิดก็คือว่าถ้าส่วนประกอบของข้อมูล (คุณสมบัติ) ต่างกันมีสเกลที่แตกต่างกันดังนั้นอนุพันธ์มีแนวโน้มที่จะจัดเรียงตามทิศทางที่มีความแปรปรวนสูงกว่าซึ่งนำไปสู่การบรรจบกันที่แย่ลง / ช้าลง


4

การกำหนดมาตรฐานเป็นขั้นตอนที่สำคัญของการประมวลผลข้อมูลล่วงหน้า

มันควบคุมความแปรปรวนของชุดข้อมูลมันแปลงข้อมูลในช่วงที่กำหนดโดยใช้การแปลงเชิงเส้นซึ่งสร้างกลุ่มคุณภาพที่ดีและปรับปรุงความแม่นยำของอัลกอริทึมการจัดกลุ่มตรวจสอบลิงค์ด้านล่างเพื่อดูผลกระทบต่อการวิเคราะห์ k- หมายถึง

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

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.