ฉันพบบทช่วยสอนนี้ซึ่งแนะนำว่าคุณควรเรียกใช้ฟังก์ชันมาตราส่วนบนฟีเจอร์ก่อนการจัดกลุ่ม (ฉันเชื่อว่ามันแปลงข้อมูลเป็นคะแนน z)
ฉันสงสัยว่าจำเป็นหรือไม่ ฉันถามเป็นส่วนใหญ่เพราะมีจุดศอกที่ดีเมื่อฉันไม่ได้ปรับขนาดข้อมูล แต่มันจะหายไปเมื่อมันถูกลดขนาด :)
ฉันพบบทช่วยสอนนี้ซึ่งแนะนำว่าคุณควรเรียกใช้ฟังก์ชันมาตราส่วนบนฟีเจอร์ก่อนการจัดกลุ่ม (ฉันเชื่อว่ามันแปลงข้อมูลเป็นคะแนน z)
ฉันสงสัยว่าจำเป็นหรือไม่ ฉันถามเป็นส่วนใหญ่เพราะมีจุดศอกที่ดีเมื่อฉันไม่ได้ปรับขนาดข้อมูล แต่มันจะหายไปเมื่อมันถูกลดขนาด :)
คำตอบ:
ปัญหาคือสิ่งที่แสดงถึงการวัดระยะทางที่ดีระหว่างกรณี
หากคุณมีคุณสมบัติสองอย่างสิ่งหนึ่งที่ความแตกต่างระหว่างเคสมีขนาดใหญ่และอีกขนาดเล็กคุณพร้อมที่จะให้อดีตเป็นไดรเวอร์ระยะทางไกลหรือไม่?
ตัวอย่างเช่นถ้าคุณรวมกลุ่มคนที่มีน้ำหนักเป็นกิโลกรัมและสูงเป็นเมตรความแตกต่าง 1 กิโลกรัมมีความสำคัญเท่ากับความสูง 1 เมตรหรือไม่ เป็นเรื่องสำคัญหรือไม่ที่คุณจะได้รับการจัดกลุ่มที่แตกต่างกันเกี่ยวกับน้ำหนักเป็นกิโลกรัมและความสูงเป็นเซนติเมตร หากคำตอบของคุณคือ "ไม่" และ "ใช่" ตามลำดับคุณควรปรับขนาด
ในทางกลับกันหากคุณทำการรวมกลุ่มเมืองในแคนาดาตามระยะทางตะวันออก / ตะวันตกและระยะทางเหนือ / ใต้จากนั้นแม้ว่าโดยทั่วไปจะมีความแตกต่างที่ใหญ่กว่าตะวันออก / ตะวันตกคุณอาจมีความสุขเพียงแค่ใช้ระยะทางที่ไม่ปรับสัดส่วนทั้งกิโลเมตรหรือไมล์ (แม้ว่าคุณอาจต้องการปรับองศาของลองจิจูดและละติจูดสำหรับความโค้งของโลก)
คำตอบอื่น ๆ นั้นถูกต้อง แต่อาจช่วยให้เข้าใจปัญหาได้ง่ายขึ้นโดยดูตัวอย่าง ด้านล่างฉันสร้างชุดข้อมูลที่มีสองกลุ่มชัดเจน แต่ส่วนข้อมูลที่ไม่ได้ทำคลัสเตอร์นั้นมีขนาดใหญ่กว่ามิติข้อมูลกลุ่ม (สังเกตขนาดที่แตกต่างกันในแกน) การจัดกลุ่มข้อมูลที่ไม่ได้ทำให้เป็นมาตรฐานล้มเหลว การทำคลัสเตอร์บนข้อมูลที่ได้มาตรฐานทำได้ดีมาก
เช่นเดียวกับที่ใช้กับกลุ่มข้อมูลในทั้งสองมิติ แต่การทำให้เป็นมาตรฐานจะช่วยได้น้อยลง ในกรณีดังกล่าวอาจช่วยทำ PCA จากนั้นทำให้เป็นมาตรฐาน แต่จะช่วยได้ก็ต่อเมื่อกลุ่มแยกกันเป็นเส้นตรงและไม่ทับซ้อนในมิติ PCA (ตัวอย่างนี้ใช้งานได้อย่างชัดเจนเท่านั้นเนื่องจากจำนวนคลัสเตอร์ต่ำ)
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')
มันขึ้นอยู่กับข้อมูลของคุณ
หากคุณมีคุณสมบัติที่มีความหมายที่ชัดเจน บอกว่าละติจูดและลองจิจูดแล้วคุณไม่ควรปรับขนาดข้อมูลของคุณเพราะจะทำให้เกิดการบิดเบือน (K-หมายความว่าอาจเป็นทางเลือกที่ไม่ดีเช่นกัน - คุณต้องการบางสิ่งที่สามารถจัดการ lat / lon ได้ตามธรรมชาติ)
หากคุณมีข้อมูลตัวเลขแบบผสมที่แต่ละแอตทริบิวต์มีความแตกต่างอย่างสิ้นเชิง (เช่นขนาดรองเท้าและน้ำหนัก) จะมีหน่วยต่างกัน (lb, ตัน, เมตร, กก. ... ) ดังนั้นค่าเหล่านี้จะไม่สามารถเทียบเคียงได้ การกำหนดมาตรฐานให้กับพวกมันคือวิธีปฏิบัติที่ดีที่สุดในการให้น้ำหนักที่เท่ากัน
หากคุณมีค่าไบนารี่แอททริบิวต์ที่ไม่ต่อเนื่องหรือแอ็ตทริบิวต์ categorial อยู่ห่างจาก k-mean K- Mean ต้องคำนวณค่าเฉลี่ยและค่าเฉลี่ยนั้นไม่มีความหมายกับข้อมูลประเภทนี้
ดังที่อธิบายไว้ในบทความนี้k-mean ลดฟังก์ชันข้อผิดพลาดให้น้อยที่สุดโดยใช้อัลกอริทึมของ Newton เช่นอัลกอริทึมการเพิ่มประสิทธิภาพแบบไล่ระดับสี การทำให้ข้อมูลกลับมาเป็นปกติปรับปรุงการรวมกันของอัลกอริธึม ดูที่นี่สำหรับรายละเอียดบางอย่างเกี่ยวกับมัน
แนวคิดก็คือว่าถ้าส่วนประกอบของข้อมูล (คุณสมบัติ) ต่างกันมีสเกลที่แตกต่างกันดังนั้นอนุพันธ์มีแนวโน้มที่จะจัดเรียงตามทิศทางที่มีความแปรปรวนสูงกว่าซึ่งนำไปสู่การบรรจบกันที่แย่ลง / ช้าลง
การกำหนดมาตรฐานเป็นขั้นตอนที่สำคัญของการประมวลผลข้อมูลล่วงหน้า
มันควบคุมความแปรปรวนของชุดข้อมูลมันแปลงข้อมูลในช่วงที่กำหนดโดยใช้การแปลงเชิงเส้นซึ่งสร้างกลุ่มคุณภาพที่ดีและปรับปรุงความแม่นยำของอัลกอริทึมการจัดกลุ่มตรวจสอบลิงค์ด้านล่างเพื่อดูผลกระทบต่อการวิเคราะห์ k- หมายถึง
https://pdfs.semanticscholar.org/1d35/2dd5f030589ecfe8910ab1cc0dd320bf600d.pdf