K หมายถึงการจัดกลุ่มใน R: การสอนทีละขั้นตอนพร้อมตัวอย่าง
เผยแพร่แล้ว: 2020-02-17ในฐานะนักวิทยาศาสตร์ข้อมูล คุณจะต้องทำคลัสเตอร์เป็นจำนวนมาก มีอัลกอริธึมการจัดกลุ่มหลายประเภทให้เลือก และคุณควรมีความรอบรู้ในการใช้งานทั้งหมด ในบทความนี้ เราจะพูดถึงอัลกอริธึมการจัดกลุ่มยอดนิยม ค่าเฉลี่ย K และดูว่ามันใช้ใน R
คุณจะพบกับทฤษฎีพื้นฐานเบื้องหลังการจัดกลุ่ม K-mean ใน R และวิธีการใช้ เราได้กล่าวถึงตัวอย่างที่นำไปใช้ได้จริงในบทความต่อไป อย่าลืมบุ๊กมาร์กบทความนี้เพื่อใช้อ้างอิงในอนาคต อ่านเพิ่มเติมเกี่ยวกับการวิเคราะห์คลัสเตอร์ใน Data Mining
ก่อนที่เราจะเริ่มพูดถึง K หมายถึงการทำคลัสเตอร์ใน R เราควรดูที่ประเภทของอัลกอริธึมการจัดกลุ่มที่มีอยู่ เพื่อให้คุณเข้าใจได้ดีขึ้นว่าอัลกอริทึมนี้เกี่ยวข้องกับพวกเขาอย่างไร
อ่าน: ห้องสมุด R อันดับต้น ๆ ในวิทยาศาสตร์ข้อมูล
สารบัญ
ประเภทของคลัสเตอร์
เมื่อคุณจัดกลุ่มอ็อบเจ็กต์หลายๆ อันในลักษณะที่อ็อบเจ็กต์ที่ใกล้เคียงกันมากที่สุดจะอยู่ในคลัสเตอร์ที่ใกล้เคียงกัน เรียกว่าคลัสเตอร์ ระยะห่างระหว่างวัตถุอาจเกี่ยวข้องกับความคล้ายคลึงกัน ความคล้ายคลึงกันแสดงให้เห็นถึงความแข็งแกร่งของความสัมพันธ์ระหว่างวัตถุสองชิ้นที่แตกต่างกันในวิทยาศาสตร์ข้อมูล การทำคลัสเตอร์เป็นเทคนิคการทำเหมืองข้อมูลที่เป็นที่นิยม การทำคลัสเตอร์พบแอปพลิเคชันในอุตสาหกรรมและพื้นที่ต่างๆ มากมาย รวมถึงการวิเคราะห์ภาพ การเรียนรู้ของเครื่อง การบีบอัดข้อมูล การจดจำรูปแบบ และอื่นๆ อีกมากมาย
การจัดกลุ่มมีสองประเภท - แบบแข็งและแบบอ่อน มาพูดคุยกันสั้น ๆ กัน
- ในฮาร์ดคลัสเตอร์ จุดข้อมูลจะเป็นของคลัสเตอร์ทั้งหมด หรือไม่เป็นของมันเลย ไม่มีในระหว่าง
- ในซอฟต์คลัสเตอร์ ออบเจ็กต์ข้อมูลอาจเกี่ยวข้องกับคลัสเตอร์มากกว่าหนึ่งคลัสเตอร์ในคราวเดียว เนื่องจากมีโอกาสหรือความน่าจะเป็นบางอย่าง
เรียนรู้ หลักสูตรวิทยาศาสตร์ข้อมูลออนไลน์ จากมหาวิทยาลัยชั้นนำของโลก รับโปรแกรม PG สำหรับผู้บริหาร โปรแกรมประกาศนียบัตรขั้นสูง หรือโปรแกรมปริญญาโท เพื่อติดตามอาชีพของคุณอย่างรวดเร็ว
ประเภทของอัลกอริธึมคลัสเตอร์
เช่นเดียวกับมีคลัสเตอร์ประเภทต่างๆ มีอัลกอริธึมการทำคลัสเตอร์ประเภทต่างๆ ด้วย คุณสามารถแยกความแตกต่างของอัลกอริทึมตามโมเดลคลัสเตอร์ได้ ซึ่งหมายความว่าคุณสามารถแยกความแตกต่างได้ตามรูปแบบคลัสเตอร์ หากเราจะเริ่มพูดถึงอัลกอริธึมการจัดกลุ่มทุกประเภท คู่มือนี้จะยาวเกินไปและห่างไกลจากประเด็นหลัก ดังนั้น เราจะพูดถึงอัลกอริธึมการจัดกลุ่มที่โดดเด่นบางประเภทเท่านั้น มีอัลกอริธึมการจัดกลุ่มแบบอิงตามการเชื่อมต่อ แบบเซนทรอยด์ แบบอิงความหนาแน่น และแบบกระจาย
แนวคิดพื้นฐานของ K-Means
แนวคิดพื้นฐานของ K-mean นั้นค่อนข้างง่าย K-mean เกี่ยวข้องกับการกำหนดคลัสเตอร์เพื่อให้ความผันแปรทั้งหมดภายในคลัสเตอร์มีค่าน้อยที่สุด มีอัลกอริธึม k-mean ที่หลากหลาย อัลกอริธึม k-mean ที่พบบ่อยที่สุดคืออัลกอริทึม Hartigan-Wong ซึ่งระบุว่าความแปรผันภายในคลัสเตอร์ทั้งหมดเท่ากับผลรวมของระยะทางกำลังสอง ระยะห่างแบบยุคลิดระหว่างเซนทรอยด์กับรายการของพวกมัน:
W( C k )= x i C k ( x i – k ) 2
ใน ที่นี้ x i หมายถึงจุดข้อมูลที่เป็นของคลัสเตอร์ C k และ k หมายถึงค่าเฉลี่ยของจุดข้อมูลที่มีอยู่ในคลัสเตอร์ Ck
ค่าของ x i ควรเท่ากับผลรวมของระยะห่างกำลังสองระหว่าง x i และ k เป็นค่าต่ำสุด
อัลกอริทึม K-mean คืออะไร?
ในการใช้อัลกอริทึม ก่อนอื่นเราต้องระบุจำนวนคลัสเตอร์ K ซึ่งจะปรากฏในผลลัพธ์ของเรา ขั้นแรก อัลกอริธึมจะเลือกวัตถุ K แบบสุ่มเพื่อทำหน้าที่เป็นศูนย์กลางคลัสเตอร์เริ่มต้น เราเรียกวัตถุเหล่านั้นว่า centroids หรือหมายถึง จากนั้นเรากำหนดวัตถุที่เหลือให้กับเซนทรอยด์ที่ใกล้ที่สุด ระยะห่างแบบยุคลิดระหว่างเซนทรอยด์ของกระจุกดาวกับวัตถุเป็นตัวกำหนดว่าพวกมันอยู่ใกล้แค่ไหน
หลังจากที่เรากำหนดออบเจ็กต์ให้กับเซนทรอยด์ตามลำดับแล้ว อัลกอริธึมจะคำนวณค่าเฉลี่ยของคลัสเตอร์ หลังจากการคำนวณใหม่นี้ เราจะตรวจสอบการสังเกตอีกครั้งเพื่อดูว่าอาจอยู่ใกล้กับคลัสเตอร์อื่นหรือไม่ จากนั้นเรากำหนดวัตถุใหม่ให้กับเซนทรอยด์ตามลำดับ เราทำซ้ำขั้นตอนเหล่านี้ไปเรื่อยๆ จนกว่าการกำหนดคลัสเตอร์จะหยุดลง ซึ่งหมายความว่าเราหยุดทำซ้ำเมื่อคลัสเตอร์ที่เกิดขึ้นในการวนซ้ำนั้นเหมือนกับการวนซ้ำครั้งก่อน
การใช้ K-Means Clustering (ตัวอย่าง)
ตอนนี้คุณรู้แล้วว่าอัลกอริธึม K-mean ใน R คืออะไรและทำงานอย่างไร มาดูตัวอย่างกันเพื่อความกระจ่างกันดีกว่า ในตัวอย่างนี้ เราจะจัดกลุ่มลูกค้าขององค์กรโดยใช้ฐานข้อมูลของลูกค้าขายส่ง ข้อมูลสำหรับปัญหานี้มีอยู่ในที่เก็บการเรียนรู้ของเครื่องของ Berkley UCI คุณสามารถตรวจสอบได้ ที่ นี่
อันดับแรก เราจะอ่านข้อมูล แล้วก็ได้บทสรุปของมัน หลังจากอ่านข้อมูลและเห็นสรุปแล้ว คุณจะเห็นว่าผู้บริโภคอันดับต้นๆ ในหมวดหมู่ต่างๆ มีความแตกต่างกันอย่างสิ้นเชิง คุณจะพบค่าผิดปกติบางอย่าง ซึ่งคุณไม่สามารถลบออกได้อย่างง่ายดายด้วยการทำให้เป็นมาตรฐาน (หรือการปรับมาตราส่วน) ด้วยข้อมูลนี้ ธุรกิจต้องการดูว่าลูกค้าระดับกลางของพวกเขาซื้ออะไรเป็นส่วนใหญ่ นั่นเป็นเพราะว่าบริษัทจะมีความคิดที่ดีว่าลูกค้าอันดับต้นๆ ของพวกเขาซื้ออะไร
ในการสร้างคลัสเตอร์ของลูกค้าระดับกลาง อันดับแรก เราควรกำจัดลูกค้าชั้นบนสุดออกจากแต่ละหมวดหมู่ ดังนั้นเราจะลบ 5 อันดับแรกและสร้างชุดใหม่ เราจะดำเนินการดังนี้:
top.n.custs <- ฟังก์ชั่น (data,cols,n=5) { #Requires บาง data frame และด้านบน N เพื่อลบ
idx.to.remove <-integer(0) #Initialize vector เพื่อทำให้ลูกค้าถูกลบ
for (c in cols){ # สำหรับทุกคอลัมน์ในข้อมูลที่เราส่งผ่านไปยังฟังก์ชันนี้
col.order <-order(data[,c],decreasing=T) #Sort คอลัมน์ “c” เรียงลำดับจากมากไปน้อย (ใหญ่กว่าด้านบน)
#Order ส่งคืนดัชนีที่จัดเรียง (เช่น แถว 15, 3, 7, 1, …) แทนที่จะเป็นค่าจริงที่จัดเรียง
idx <-head(col.order, n) #นำ n ตัวแรกของคอลัมน์ที่จัดเรียง C ถึง
idx.to.remove <-union(idx.to.remove,idx) #รวมและขจัดรหัสแถวที่ซ้ำกันที่จำเป็นต้องลบ
}
return(idx.to.remove) #ส่งคืนดัชนีลูกค้าที่จะถูกลบ
}
top.custs <-top.n.custs(data,cols=3:8,n=5)
length(top.custs) #ต้องลบลูกค้ากี่คน?

data[top.custs,] #ตรวจสอบลูกค้าที่มีอยู่
data.rm.top<-data[-c(top.custs),] #ลบลูกค้าที่ต้องการ
ด้วยไฟล์ใหม่นี้ เราสามารถเริ่มทำงานกับการวิเคราะห์คลัสเตอร์ของเราได้ เพื่อทำการวิเคราะห์คลัสเตอร์ เราจะใช้รหัสต่อไปนี้:
set.seed(76964057) #ตั้งเมล็ดพันธุ์เพื่อการทำซ้ำ
k <-kmeans(data.rm.top[,-c(1,2)], centers=5) #สร้าง 5 คลัสเตอร์, ลบคอลัมน์ 1 และ 2
k$centers #แสดงศูนย์คลัสเตอร์
table(k$cluster) #ให้นับจุดข้อมูลในแต่ละคลัสเตอร์
เมื่อคุณรันโค้ดนี้บนฐานข้อมูลที่กำหนด คุณจะได้ผลลัพธ์เหล่านี้:
- กลุ่มแรกจะมีผงซักฟอกคุณภาพสูงแต่ผลิตภัณฑ์อาหารสดมีปริมาณน้อย
- คลัสเตอร์ที่สามจะมีผลิตภัณฑ์สดมากขึ้น
คุณจะต้องใช้ inners และ betweenss ในการตีความผลลัพธ์อย่างละเอียด k$withinss เท่ากับผลรวมของระยะห่างระหว่างวัตถุข้อมูลจากศูนย์กลางของคลัสเตอร์ ยิ่งช่วงต่ำเท่าไร ผลลัพธ์ก็จะยิ่งดีขึ้นเท่านั้น หากการวัดภายในมีข้อมูลสูง แสดงว่ามีสิ่งผิดปกติอยู่มากมาย และคุณจำเป็นต้องดำเนินการล้างข้อมูล k$betweenss คือผลรวมของกำลังสองของระยะทางระหว่างจุดศูนย์กลางต่างๆ ของกลุ่ม ระยะห่างระหว่างศูนย์กลางคลัสเตอร์ควรสูงที่สุด
อ่าน: 6 โครงสร้างข้อมูลที่ใช้กันทั่วไปใน R
คุณควรลองใช้การลองผิดลองถูกเพื่อให้ได้ผลลัพธ์ที่แม่นยำที่สุด ในการดำเนินการดังกล่าว คุณจะต้องลองใช้ค่าต่างๆ ของ K เมื่อกราฟของผลลัพธ์ไม่แสดงการเพิ่มขึ้นในส่วนลึกของคลัสเตอร์ จุดนั้นจะเป็นค่าที่เหมาะสมที่สุดสำหรับ K คุณสามารถหาค่าได้ ของ K ผ่านรหัสต่อไปนี้:
rng<-2:20 #K จาก 2 ถึง 20
พยายาม <-100 #เรียกใช้อัลกอริทึม K หมายถึง 100 ครั้ง
avg.totw.ss <-integer(length(rng)) #ตั้งค่าเวกเตอร์ว่างเพื่อเก็บจุดทั้งหมด
for(v ใน rng){ # สำหรับแต่ละค่าของตัวแปรช่วง
v.totw.ss <-integer(tries) #ตั้งค่าเวกเตอร์ว่างเพื่อเก็บค่าการลอง 100 ครั้ง
สำหรับ (ฉันใน 1: พยายาม){
k.temp <-kmeans(data.rm.top,centers=v) #เรียกใช้ kmeans
v.totw.ss[i] <-k.temp$tot.withinss#เก็บส่วนภายในทั้งหมด
}
avg.totw.ss[v-1] <-mean(v.totw.ss) #ค่าเฉลี่ยภายในทั้งหมด 100
}
plot(rng,avg.totw.ss,type=”b”, main=”Total within SS by Various K”,
ylab=”ผลรวมเฉลี่ยภายในผลรวมของกำลังสอง”,
xlab=”ค่า K”)
แค่นั้นแหละ. ตอนนี้คุณสามารถใช้กราฟที่คุณได้รับจากโค้ดนี้เพื่อรับค่า K ที่ดีที่สุด และใช้เพื่อให้ได้ผลลัพธ์ที่ต้องการ ใช้ตัวอย่างนี้เพื่อลองใช้ความรู้ของคุณเกี่ยวกับการจัดกลุ่ม K-mean ใน R นี่คือรหัสทั้งหมดที่เราใช้ในตัวอย่าง:
data <-read.csv("ลูกค้าขายส่ง data.csv",header=T)
สรุป(ข้อมูล)
top.n.custs <- ฟังก์ชั่น (data,cols,n=5) { #Requires บาง data frame และด้านบน N เพื่อลบ
idx.to.remove <-integer(0) #Initialize vector เพื่อทำให้ลูกค้าถูกลบ
for (c in cols){ # สำหรับทุกคอลัมน์ในข้อมูลที่เราส่งผ่านไปยังฟังก์ชันนี้
col.order <-order(data[,c],decreasing=T) #Sort คอลัมน์ “c” เรียงลำดับจากมากไปน้อย (ใหญ่กว่าด้านบน)
#Order ส่งคืนดัชนีที่จัดเรียง (เช่น แถว 15, 3, 7, 1, …) แทนที่จะเป็นค่าจริงที่จัดเรียง
idx <-head(col.order, n) #นำ n ตัวแรกของคอลัมน์ที่จัดเรียง C ถึง
idx.to.remove <-union(idx.to.remove,idx) #รวมและขจัดรหัสแถวที่ซ้ำกันที่จำเป็นต้องลบ
}
return(idx.to.remove) #ส่งคืนดัชนีลูกค้าที่จะถูกลบ
}
top.custs <-top.n.custs(data,cols=3:8,n=5)
length(top.custs) #ต้องลบลูกค้ากี่คน?
data[top.custs,] #ตรวจสอบลูกค้า
data.rm.top <-data[-c(top.custs),] #ลบลูกค้า
set.seed(76964057) #ตั้งเมล็ดพันธุ์เพื่อการทำซ้ำ
k <-kmeans(data.rm.top[,-c(1,2)], centers=5) #สร้าง 5 คลัสเตอร์, ลบคอลัมน์ 1 และ 2
k$centers #แสดงศูนย์คลัสเตอร์
table(k$cluster) #ให้นับจุดข้อมูลในแต่ละคลัสเตอร์
rng<-2:20 #K จาก 2 ถึง 20
พยายาม<-100 #เรียกใช้อัลกอริทึม K หมายถึง 100 ครั้ง
avg.totw.ss<-integer(length(rng)) #ตั้งค่าเวกเตอร์ว่างเพื่อเก็บจุดทั้งหมด
for(v ใน rng){ # สำหรับแต่ละค่าของตัวแปรช่วง
v.totw.ss<-integer(tries) #ตั้งค่าเวกเตอร์ว่างเพื่อเก็บค่าการลอง 100 ครั้ง
สำหรับ (ฉันใน 1: พยายาม){
k.temp<-kmeans(data.rm.top,centers=v) #เรียกใช้ kmeans
v.totw.ss[i]<-k.temp$tot.withinss#เก็บส่วนภายในทั้งหมด
}
avg.totw.ss[v-1]<-mean(v.totw.ss) #ค่าเฉลี่ยภายในทั้งหมด 100
}
plot(rng,avg.totw.ss,type=”b”, main=”Total within SS by Various K”,
ylab=”ผลรวมเฉลี่ยภายในผลรวมของกำลังสอง”,
xlab=”ค่า K”)
บทสรุป
เราหวังว่าคุณจะชอบคำแนะนำนี้ เราได้พยายามทำให้มันกระชับและครอบคลุม หากคุณมีคำถามใดๆ เกี่ยวกับอัลกอริทึม K-mean โปรดติดต่อเรา เรายินดีที่จะตอบคำถามของคุณ
หากคุณอยากเรียนรู้เกี่ยวกับวิทยาศาสตร์ข้อมูล ลองดูโปรแกรม Executive PG ของ IIIT-B & upGrad ใน Data Science ซึ่งสร้างขึ้นสำหรับมืออาชีพที่ทำงานและมีกรณีศึกษาและโครงการมากกว่า 10 รายการ เวิร์กช็อปภาคปฏิบัติจริง การให้คำปรึกษากับผู้เชี่ยวชาญในอุตสาหกรรม 1 -on-1 พร้อมที่ปรึกษาในอุตสาหกรรม การเรียนรู้มากกว่า 400 ชั่วโมงและความช่วยเหลือด้านงานกับบริษัทชั้นนำ
อะไรคือข้อเสียของการใช้ K-mean?
ค่าผิดปกติสามารถดึงเซนทรอยด์ หรือค่าผิดปกติอาจได้รับคลัสเตอร์ของตนเองแทนที่จะถูกละเลย เนื่องจาก K-mean เป็นแบบสุ่ม จึงไม่สามารถรับประกันว่าจะพบโซลูชันการจัดกลุ่มที่ดีที่สุดในโลก ในความเป็นจริง ค่าผิดปกติและข้อมูลรบกวนอาจทำให้อัลกอริทึมมีความไวสูง ก่อนจัดกลุ่ม ให้พิจารณากำจัดหรือตัดค่าผิดปกติออก เมื่อจัดกลุ่มข้อมูลที่มีขนาดและความหนาแน่นผันแปรได้ ค่าเฉลี่ย K จะมีปัญหา คุณต้องสรุป K-mean เพื่อจัดกลุ่มข้อมูลดังกล่าว แม้ว่าจะเป็นของคลัสเตอร์เดียวกันอย่างชัดเจน แต่อัลกอริทึม k-mean ไม่อนุญาตให้จุดข้อมูลที่อยู่ห่างกันเพื่อแชร์คลัสเตอร์เดียวกัน
วิธีข้อศอกใน K-mean คืออะไร?
วิธี k-means อาศัยการค้นหาจำนวนคลัสเตอร์ที่เหมาะสมเป็นอย่างมาก วิธีข้อศอกเป็นวิธีที่ใช้กันอย่างแพร่หลายในการกำหนดค่า K ที่ดีที่สุด เทคนิคข้อศอกทำการจัดกลุ่มค่าเฉลี่ย K ในชุดข้อมูลสำหรับช่วงค่า K บนกราฟ จากนั้นคำนวณคะแนนเฉลี่ยสำหรับคลัสเตอร์ทั้งหมดสำหรับแต่ละค่าของ K คะแนนความผิดเพี้ยน ซึ่งเป็นผลรวมของระยะทางเป็นตารางจากแต่ละจุด ไปยังศูนย์ที่ได้รับมอบหมาย จะถูกคำนวณโดยค่าเริ่มต้น โมเดลที่ขับเคลื่อนด้วยข้อมูลอื่นๆ เช่น จำนวนองค์ประกอบหลักในการอธิบายลักษณะชุดข้อมูล สามารถใช้เทคนิคเดียวกันนี้เพื่อกำหนดจำนวนพารามิเตอร์ได้
เราจะหาค่าผิดปกติใน K-mean ได้อย่างไร?
ค่าผิดปกติในการจัดกลุ่ม K-Means อาจถูกค้นพบโดยใช้ทั้งเทคนิคแบบอิงระยะทางและแบบคลัสเตอร์ ค่าผิดปกติถูกค้นพบโดยใช้ dendrograms ในกรณีของการจัดกลุ่มแบบลำดับชั้น วัตถุประสงค์ของโครงการคือการค้นหาและกำจัดค่าผิดปกติเพื่อทำให้การจัดกลุ่มมีความแม่นยำมากขึ้น ข้อมูลถูกแบ่งออกเป็นกลุ่ม K โดยจัดสรรให้กับศูนย์คลัสเตอร์ที่ใกล้ที่สุดด้วยวิธีการระบุค่าผิดปกติตามค่า K จากนั้นเราอาจคำนวณระยะทางหรือความแตกต่างระหว่างแต่ละรายการกับศูนย์กลางคลัสเตอร์ และเลือกค่าผิดปกติที่มีระยะทางมากที่สุด เนื่องจากค่าสุดขั้วอาจส่งผลกระทบอย่างรวดเร็วต่อค่าเฉลี่ย วิธีการจัดกลุ่ม K-mean จึงไวต่อค่าผิดปกติ