K หมายถึง Clusterไอเอ็นจีใน R พร้อมตัวอย่าง
ความหมายของ Cluster การวิเคราะห์?
Cluster การวิเคราะห์เป็นส่วนหนึ่งของ การเรียนรู้โดยไม่ได้รับการดูแลคลัสเตอร์คือกลุ่มข้อมูลที่มีคุณลักษณะคล้ายคลึงกัน เราสามารถพูดได้ว่าการวิเคราะห์คลัสเตอร์เป็นเรื่องเกี่ยวกับการค้นพบมากกว่าการคาดการณ์ เครื่องจะค้นหาความคล้ายคลึงในข้อมูล ตัวอย่างเช่น คุณสามารถใช้การวิเคราะห์คลัสเตอร์สำหรับแอปพลิเคชันต่อไปนี้:
- การแบ่งส่วนลูกค้า: ค้นหาความคล้ายคลึงกันระหว่างกลุ่มลูกค้า
- การรวมกลุ่มตลาดหุ้น: จัดกลุ่มหุ้นตามผลงาน
- ลดมิติของชุดข้อมูลโดยการจัดกลุ่มการสังเกตด้วยค่าที่คล้ายกัน
Clusterการวิเคราะห์ไม่ใช่เรื่องยากเกินไปที่จะนำไปใช้และมีความหมายและนำไปใช้ได้จริงสำหรับธุรกิจด้วย
ความแตกต่างที่ชัดเจนที่สุดระหว่างการเรียนรู้แบบมีผู้สอนและแบบไม่มีผู้ดูแลอยู่ที่ผลลัพธ์ การเรียนรู้แบบมีผู้สอนจะสร้างตัวแปรใหม่ที่เรียกว่าฉลาก ในขณะที่การเรียนรู้แบบมีผู้สอนจะทำนายผลลัพธ์ เครื่องจักรช่วยให้ผู้ปฏิบัติงานสามารถติดป้ายกำกับข้อมูลตามความสัมพันธ์ที่ใกล้ชิดได้ ขึ้นอยู่กับนักวิเคราะห์ว่าจะใช้ประโยชน์จากกลุ่มและตั้งชื่อกลุ่มเหล่านั้นอย่างไร
มาดูตัวอย่างเพื่อทำความเข้าใจแนวคิดของการจัดกลุ่มข้อมูล เพื่อความเรียบง่าย เราทำงานแบบสองมิติ คุณมีข้อมูลเกี่ยวกับค่าใช้จ่ายทั้งหมดของลูกค้าและอายุของพวกเขา เพื่อปรับปรุงการโฆษณา ทีมการตลาดต้องการส่งอีเมลที่ตรงเป้าหมายมากขึ้นถึงลูกค้าของพวกเขา
ในกราฟต่อไปนี้ คุณจะแสดงค่าใช้จ่ายทั้งหมดและอายุของลูกค้า
library(ggplot2) df <- data.frame(age = c(18, 21, 22, 24, 26, 26, 27, 30, 31, 35, 39, 40, 41, 42, 44, 46, 47, 48, 49, 54), spend = c(10, 11, 22, 15, 12, 13, 14, 33, 39, 37, 44, 27, 29, 20, 28, 21, 30, 31, 23, 24) ) ggplot(df, aes(x = age, y = spend)) + geom_point()
จุดนี้มองเห็นลวดลายได้
- ด้านซ้ายล่างจะมองเห็นกลุ่มวัยรุ่นที่มีกำลังซื้อต่ำกว่า
- ระดับกลางตอนบนสะท้อนถึงคนที่มีงานที่สามารถใช้จ่ายได้มากขึ้น
- สุดท้ายคือผู้สูงอายุที่มีงบประมาณต่ำกว่า
ในรูปด้านบน คุณจัดกลุ่มการสังเกตด้วยมือและกำหนดแต่ละกลุ่มทั้งสามกลุ่ม ตัวอย่างนี้ค่อนข้างตรงไปตรงมาและมองเห็นได้ชัดเจน หากมีการผนวกการสังเกตใหม่เข้ากับชุดข้อมูล คุณสามารถติดป้ายกำกับการสังเกตเหล่านั้นภายในวงกลมได้ คุณสามารถกำหนดวงกลมตามการตัดสินของเรา แทนที่จะทำเช่นนั้น คุณสามารถใช้ เครื่องเรียนรู้ เพื่อจัดกลุ่มข้อมูลอย่างเป็นกลาง
ในบทช่วยสอนนี้ คุณจะได้เรียนรู้วิธีการใช้งาน k- หมายถึง ขั้นตอนวิธี
อัลกอริทึม K-mean
K-mean เป็นวิธีการจัดกลุ่มที่ได้รับความนิยมมากที่สุดอย่างไม่ต้องสงสัย นักวิจัยเผยแพร่อัลกอริทึมนี้เมื่อหลายทศวรรษก่อน และมีการปรับปรุง k-means มากมาย
อัลกอริทึมพยายามค้นหากลุ่มโดยการลดระยะห่างระหว่างการสังเกตที่เรียกว่า ท้องถิ่นที่เหมาะสมที่สุด โซลูชั่น ระยะทางวัดตามพิกัดของการสังเกต ตัวอย่างเช่น ในปริภูมิสองมิติ พิกัดจะเป็นแบบง่ายและ
อัลกอริทึมทำงานดังนี้:
- ขั้นตอนที่ 1: เลือกกลุ่มในแผนฟีเจอร์แบบสุ่ม
- ขั้นตอนที่ 2: ลดระยะห่างระหว่างศูนย์กลางคลัสเตอร์และการสังเกตที่แตกต่างกันให้น้อยที่สุด (เซนทรอยด์- ส่งผลให้เกิดกลุ่มที่มีการสังเกต
- ขั้นตอนที่ 3: Shift เซนทรอยด์เริ่มต้นถึงค่าเฉลี่ยของพิกัดภายในกลุ่ม
- ขั้นตอนที่ 4: ลดระยะห่างให้เหลือน้อยที่สุดตามเซนทรอยด์ใหม่ มีการสร้างขอบเขตใหม่ ดังนั้นการสังเกตจะย้ายจากกลุ่มหนึ่งไปอีกกลุ่มหนึ่ง
- ทำซ้ำจนกว่าจะไม่มีการเปลี่ยนแปลงกลุ่มการสังเกต
K-means มักจะใช้ระยะห่างแบบยุคลิดระหว่างคุณลักษณะและคุณลักษณะ :
มีการวัดค่าต่างๆ ให้เลือก เช่น ระยะทางแมนฮัตตันหรือระยะทางมินลอฟสกี้ โปรดทราบว่า K-mean จะส่งคืนกลุ่มที่แตกต่างกันทุกครั้งที่คุณเรียกใช้อัลกอริทึม จำไว้ว่าการคาดเดาครั้งแรกเป็นแบบสุ่ม และคำนวณระยะทางจนกว่าอัลกอริทึมจะบรรลุความสม่ำเสมอภายในกลุ่ม นั่นคือ k-mean จะไวต่อตัวเลือกแรกมาก และเว้นแต่จำนวนการสังเกตและกลุ่มจะน้อย การจัดกลุ่มแบบเดียวกันแทบจะเป็นไปไม่ได้เลย
เลือกจำนวนคลัสเตอร์
ความยากลำบากอีกประการหนึ่งที่พบใน k-mean คือการเลือกจำนวนคลัสเตอร์ คุณสามารถตั้งค่าค่าสูงเป็น , หรือจำนวนกลุ่มที่มาก เพื่อปรับปรุงเสถียรภาพ แต่ผลลัพธ์ที่ได้อาจจะออกมาเป็น เกินพอดี ของข้อมูล การโอเวอร์ฟิตติ้งหมายถึงประสิทธิภาพของแบบจำลองลดลงอย่างมากสำหรับข้อมูลใหม่ที่เข้ามา เครื่องจักรเรียนรู้รายละเอียดเล็กๆ น้อยๆ ของชุดข้อมูลและมีปัญหาในการสรุปรูปแบบโดยรวม
จำนวนคลัสเตอร์ขึ้นอยู่กับลักษณะของชุดข้อมูล อุตสาหกรรม ธุรกิจ และอื่นๆ อย่างไรก็ตาม มีกฎเกณฑ์ง่ายๆ ในการเลือกจำนวนคลัสเตอร์ที่เหมาะสม:
โดยเท่ากับจำนวนการสังเกตในชุดข้อมูล
โดยทั่วไปแล้ว เป็นเรื่องที่น่าสนใจที่จะใช้เวลาเพื่อค้นหาคุณค่าที่ดีที่สุดเพื่อให้เหมาะสมกับความต้องการทางธุรกิจ
เราจะใช้ชุดข้อมูลราคาเครื่องคอมพิวเตอร์ส่วนบุคคลเพื่อทำการวิเคราะห์การจัดกลุ่ม ชุดข้อมูลนี้ประกอบด้วยข้อมูลสังเกต 6259 รายการและคุณลักษณะ 10 ประการ ชุดข้อมูลนี้สังเกตราคาตั้งแต่ปี 1993 ถึง 1995 ของคอมพิวเตอร์ส่วนบุคคล 486 เครื่องในสหรัฐอเมริกา ตัวแปรได้แก่ ราคา ความเร็ว แรม หน้าจอ ซีดี เป็นต้น
คุณจะดำเนินการดังต่อไปนี้:
- นำเข้าข้อมูล
- ฝึกโมเดล
- ประเมินแบบจำลอง
นำเข้าข้อมูล
ค่าเฉลี่ย K ไม่เหมาะกับตัวแปรตัวประกอบเนื่องจากจะขึ้นอยู่กับระยะทาง และค่าที่แยกกันจะไม่ส่งกลับค่าที่มีความหมาย คุณสามารถลบตัวแปรหมวดหมู่ทั้งสามในชุดข้อมูลของเราได้ นอกจากนี้ยังไม่มีค่าที่ขาดหายไปในชุดข้อมูลนี้
library(dplyr) PATH <-"https://raw.githubusercontent.com/guru99-edu/R-Programming/master/computers.csv" df <- read.csv(PATH) %>% select(-c(X, cd, multi, premium)) glimpse(df)
เอาท์พุต
## Observations: 6, 259 ## Variables: 7 ## $ price < int > 1499, 1795, 1595, 1849, 3295, 3695, 1720, 1995, 2225, 2... ##$ speed < int > 25, 33, 25, 25, 33, 66, 25, 50, 50, 50, 33, 66, 50, 25, ... ##$ hd < int > 80, 85, 170, 170, 340, 340, 170, 85, 210, 210, 170, 210... ##$ ram < int > 4, 2, 4, 8, 16, 16, 4, 2, 8, 4, 8, 8, 4, 8, 8, 4, 2, 4, ... ##$ screen < int > 14, 14, 15, 14, 14, 14, 14, 14, 14, 15, 15, 14, 14, 14, ... ##$ ads < int > 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, ... ## $ trend <int> 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1...
จากสถิติสรุปจะเห็นว่าข้อมูลมีค่ามาก แนวทางปฏิบัติที่ดีในการคำนวณค่าเฉลี่ย k และระยะทางคือ ปรับขนาดข้อมูลใหม่เพื่อให้ค่าเฉลี่ยเท่ากับ 1 และค่าเบี่ยงเบนมาตรฐานเท่ากับศูนย์
summary(df)
Output:
## price speed hd ram ## Min. : 949 Min. : 25.00 Min. : 80.0 Min. : 2.000 ## 1st Qu.:1794 1st Qu.: 33.00 1st Qu.: 214.0 1st Qu.: 4.000 ` ## Median :2144 Median : 50.00 Median : 340.0 Median : 8.000 ## Mean :2220 Mean : 52.01 Mean : 416.6 Mean : 8.287 ## 3rd Qu.:2595 3rd Qu.: 66.00 3rd Qu.: 528.0 3rd Qu.: 8.000 ## Max. :5399 Max. :100.00 Max. :2100.0 Max. :32.000 ## screen ads trend ## Min. :14.00 Min. : 39.0 Min. : 1.00 ## 1st Qu.:14.00 1st Qu.:162.5 1st Qu.:10.00 ## Median :14.00 Median :246.0 Median :16.00 ## Mean :14.61 Mean :221.3 Mean :15.93 ## 3rd Qu.:15.00 3rd Qu.:275.0 3rd Qu.:21.50 ## Max. :17.00 Max. :339.0 Max. :35.00
คุณรีสเกลตัวแปรด้วยฟังก์ชัน scale() ของไลบรารี dplyr การเปลี่ยนแปลงจะช่วยลดผลกระทบของค่าผิดปกติและช่วยให้สามารถเปรียบเทียบการสังเกตเพียงอย่างเดียวกับค่าเฉลี่ยได้ หากเป็นค่ามาตรฐาน (หรือ คะแนน z) อยู่ในระดับสูง คุณสามารถมั่นใจได้ว่าการสังเกตนี้อยู่เหนือค่าเฉลี่ยจริงๆ (คะแนน z ขนาดใหญ่แสดงว่าจุดนี้อยู่ห่างจากค่าเฉลี่ยในรูปของส่วนเบี่ยงเบนมาตรฐาน คะแนน z เท่ากับ 2 แสดงว่าค่าเป็น XNUMX มาตรฐาน การเบี่ยงเบนไปจากค่าเฉลี่ย หมายเหตุ คะแนน z เป็นไปตามการแจกแจงแบบเกาส์เซียนและมีความสมมาตรรอบๆ ค่าเฉลี่ย
rescale_df <- df % > % mutate(price_scal = scale(price), hd_scal = scale(hd), ram_scal = scale(ram), screen_scal = scale(screen), ads_scal = scale(ads), trend_scal = scale(trend)) % > % select(-c(price, speed, hd, ram, screen, ads, trend))
ฐาน R มีฟังก์ชันเรียกใช้อัลกอริทึมค่าเฉลี่ย k ฟังก์ชันพื้นฐานของค่าเฉลี่ย k คือ:
kmeans(df, k) arguments: -df: dataset used to run the algorithm -k: Number of clusters
ฝึกโมเดล
ในรูปที่ 3 คุณแสดงรายละเอียดวิธีการทำงานของอัลกอริทึม คุณสามารถดูแต่ละขั้นตอนแบบกราฟิกด้วยแพ็คเกจที่ยอดเยี่ยมที่สร้างโดย Yi Hui (เช่นผู้สร้าง Knit สำหรับ Rmarkdown) ภาพเคลื่อนไหวของแพ็คเกจไม่พร้อมใช้งานในไลบรารี conda คุณสามารถใช้วิธีอื่นในการติดตั้งแพ็คเกจด้วย install.packages("animation") คุณสามารถตรวจสอบว่ามีการติดตั้งแพ็คเกจในโฟลเดอร์ Anaconda ของเราหรือไม่
install.packages("animation")
หลังจากที่คุณโหลดไลบรารี่แล้ว ให้เพิ่ม .ani หลัง kmeans และ R จะวางแผนขั้นตอนทั้งหมด เพื่อเป็นการแสดงตัวอย่าง คุณจะรันอัลกอริทึมด้วยตัวแปรที่ปรับขนาดใหม่ hd และ ram ด้วยคลัสเตอร์สามคลัสเตอร์เท่านั้น
set.seed(2345) library(animation) kmeans.ani(rescale_df[2:3], 3)
คำอธิบายรหัส
- kmeans.ani(rescale_df[2:3], 3): เลือกคอลัมน์ 2 และ 3 ของชุดข้อมูล rescale_df และรันอัลกอริทึมโดยตั้งค่า k เป็น 3 พล็อตแอนิเมชั่น
คุณสามารถตีความภาพเคลื่อนไหวได้ดังนี้:
- ขั้นตอนที่ 1: R สุ่มเลือกสามคะแนน
- ขั้นตอนที่ 2: คำนวณระยะทางแบบยุคลิดและวาดกลุ่มสี คุณมีกลุ่มสีหนึ่งเป็นสีเขียวที่ด้านล่างซ้าย กลุ่มสีหนึ่งเป็นสีดำที่ด้านขวา และกลุ่มสีหนึ่งเป็นสีแดงระหว่างกลุ่มสีทั้งสอง
- ขั้นตอนที่ 3: คำนวณจุดศูนย์กลางหรือค่าเฉลี่ยของกลุ่ม
- ทำซ้ำจนกว่าจะไม่มีการเปลี่ยนแปลงข้อมูลคลัสเตอร์
อัลกอริทึมจะบรรจบกันหลังจากทำซ้ำ 7 ครั้ง คุณสามารถเรียกใช้อัลกอริทึม k-mean ในชุดข้อมูลของเราด้วยคลัสเตอร์ 5 คลัสเตอร์และเรียกมันว่า pc_cluster
pc_cluster <-kmeans(rescale_df, 5)
- รายการ pc_cluster มีองค์ประกอบที่น่าสนใจ 7 ประการ:
- pc_cluster$cluster: ระบุคลัสเตอร์ของการสังเกตแต่ละครั้ง
- pc_cluster$centers: ศูนย์กลางคลัสเตอร์
- pc_cluster$totss: ผลรวมของกำลังสองทั้งหมด
- pc_cluster$withinss: ภายในผลรวมของกำลังสอง จำนวนส่วนประกอบที่ส่งคืนจะเท่ากับ `k`
- pc_cluster$tot.withinss: ผลรวมของ withinss
- pc_clusterbetweenss: ผลรวมของกำลังสองทั้งหมดลบด้วยผลรวมของกำลังสอง
- pc_cluster$size: จำนวนการสังเกตภายในแต่ละคลัสเตอร์
คุณจะใช้ผลรวมของผลรวมของกำลังสองภายใน (เช่น tot.withinss) เพื่อคำนวณจำนวนคลัสเตอร์ k ที่เหมาะสม การหาค่า k นั้นเป็นงานที่สำคัญมาก
เคที่เหมาะสมที่สุด
เทคนิคหนึ่งในการเลือก k ที่ดีที่สุดเรียกว่า วิธีข้อศอกวิธีนี้ใช้ความเป็นเนื้อเดียวกันภายในกลุ่มหรือความไม่เป็นเนื้อเดียวกันภายในกลุ่มเพื่อประเมินความแปรปรวน กล่าวอีกนัยหนึ่ง คุณสนใจเปอร์เซ็นต์ของความแปรปรวนที่อธิบายโดยแต่ละคลัสเตอร์ คุณสามารถคาดหวังว่าความแปรปรวนจะเพิ่มขึ้นตามจำนวนคลัสเตอร์ หรืออีกทางหนึ่ง ความไม่เป็นเนื้อเดียวกันจะลดลง ความท้าทายของเราคือการค้นหาค่า k ที่อยู่เหนือผลตอบแทนที่ลดลง การเพิ่มคลัสเตอร์ใหม่ไม่ได้ปรับปรุงความแปรปรวนในข้อมูล เนื่องจากมีข้อมูลเหลือให้อธิบายน้อยมาก
ในบทช่วยสอนนี้ เราจะค้นหาจุดนี้โดยใช้การวัดความไม่เป็นเนื้อเดียวกัน ผลรวมภายในคลัสเตอร์ของผลรวมกำลังสองคือค่า tot.withinss ในรายการส่งคืนโดย kmean()
คุณสามารถสร้างกราฟข้อศอกและหาค่า k ที่เหมาะสมได้ดังนี้:
- ขั้นตอนที่ 1: สร้างฟังก์ชันเพื่อคำนวณผลรวมของกำลังสองภายในคลัสเตอร์
- ขั้นตอนที่ 2: เรียกใช้อัลกอริทึมครั้ง
- ขั้นตอนที่ 3: สร้างกรอบข้อมูลพร้อมผลลัพธ์ของอัลกอริทึม
- ขั้นตอนที่ 4: พล็อตผลลัพธ์
ขั้นตอน 1) สร้างฟังก์ชันเพื่อคำนวณผลรวมภายในกลุ่มของผลรวมกำลังสอง
คุณสร้างฟังก์ชันที่รันอัลกอริทึม k-mean และจัดเก็บผลรวมภายในคลัสเตอร์ผลรวมของกำลังสอง
kmean_withinss <- function(k) { cluster <- kmeans(rescale_df, k) return (cluster$tot.withinss) }
คำอธิบายรหัส
- ฟังก์ชั่น (k): กำหนดจำนวนข้อโต้แย้งในฟังก์ชั่น
- kmeans(rescale_df, k): รันอัลกอริทึม k ครั้ง
- return(cluster$tot.withinss): จัดเก็บผลรวมภายในกลุ่มผลรวมของกำลังสอง
คุณสามารถทดสอบฟังก์ชันโดยมีค่าเท่ากับ 2
Output:
## Try with 2 cluster
kmean_withinss(2)
Output:
## [1] 27087.07
ขั้นตอน 2) รันอัลกอริทึม n ครั้ง
คุณจะใช้ฟังก์ชัน sapply() เพื่อรันอัลกอริทึมในช่วง k เทคนิคนี้เร็วกว่าการสร้างลูปและเก็บค่า
# Set maximum cluster max_k <-20 # Run algorithm over a range of k wss <- sapply(2:max_k, kmean_withinss)
คำอธิบายรหัส
- max_k <-20: ตั้งค่าจำนวนสูงสุดเป็น 20
- sapply(2:max_k, kmean_withinss): เรียกใช้ฟังก์ชัน kmean_withinss() ในช่วง 2:max_k เช่น 2 ถึง 20
ขั้นตอน 3) สร้างกรอบข้อมูลพร้อมผลลัพธ์ของอัลกอริทึม
หลังจากสร้างและทดสอบฟังก์ชันของเรา คุณสามารถรันอัลกอริทึม k-mean ได้ในช่วงตั้งแต่ 2 ถึง 20 และเก็บค่า tot.withinss
# Create a data frame to plot the graph elbow <-data.frame(2:max_k, wss)
คำอธิบายรหัส
- data.frame(2:max_k, wss): สร้าง data frame พร้อมเอาต์พุตของอัลกอริทึมที่จัดเก็บใน wss
ขั้นตอน 4) พล็อตผลลัพธ์
คุณวาดกราฟเพื่อให้เห็นภาพว่าจุดศอกอยู่ที่ไหน
# Plot the graph with gglop ggplot(elbow, aes(x = X2.max_k, y = wss)) + geom_point() + geom_line() + scale_x_continuous(breaks = seq(1, 20, by = 1))
จากกราฟ คุณจะเห็นว่าค่า k ที่เหมาะสมที่สุดคือ 7 โดยที่เส้นโค้งเริ่มมีผลตอบแทนลดลง
เมื่อคุณมีค่า k ที่เหมาะสมที่สุดแล้ว คุณจะรันอัลกอริทึมอีกครั้งโดยให้ k เท่ากับ 7 และประเมินคลัสเตอร์
การตรวจสอบคลัสเตอร์
pc_cluster_2 <-kmeans(rescale_df, 7)
ดังที่ได้กล่าวไปแล้ว คุณสามารถเข้าถึงข้อมูลที่น่าสนใจที่เหลืออยู่ในรายการที่ส่งคืนโดย kmean()
pc_cluster_2$cluster pc_cluster_2$centers pc_cluster_2$size
ส่วนการประเมินนั้นขึ้นอยู่กับการใช้อัลกอริทึม เป้าหมายของเราคือการรวบรวมคอมพิวเตอร์ที่มีคุณลักษณะคล้ายคลึงกัน ช่างคอมพิวเตอร์สามารถทำงานด้วยตนเองและจัดกลุ่มคอมพิวเตอร์ตามความเชี่ยวชาญของเขา อย่างไรก็ตาม กระบวนการนี้จะใช้เวลานานและอาจเกิดข้อผิดพลาดได้ อัลกอริทึม K-mean สามารถเตรียมสาขาสำหรับเขา/เธอได้โดยการแนะนำคลัสเตอร์
ในการประเมินเบื้องต้น คุณสามารถตรวจสอบขนาดของคลัสเตอร์ได้
pc_cluster_2$size
Output:
## [1] 608 1596 1231 580 1003 699 542
คลัสเตอร์แรกประกอบด้วยข้อมูลสังเกต 608 รายการ ในขณะที่คลัสเตอร์ที่เล็กที่สุด หมายเลข 4 มีคอมพิวเตอร์เพียง 580 เครื่อง อาจเป็นการดีหากคลัสเตอร์ต่างๆ มีความเป็นเนื้อเดียวกัน หากไม่เป็นเช่นนั้น อาจต้องเตรียมข้อมูลให้ละเอียดขึ้น
คุณสามารถดูข้อมูลได้อย่างละเอียดยิ่งขึ้นด้วยส่วนประกอบตรงกลาง แถวหมายถึงการนับเลขของคลัสเตอร์ และคอลัมน์หมายถึงตัวแปรที่ใช้โดยอัลกอริทึม ค่าคือคะแนนเฉลี่ยของแต่ละคลัสเตอร์สำหรับคอลัมน์ที่สนใจ การทำให้เป็นมาตรฐานทำให้ตีความได้ง่ายขึ้น ค่าบวกบ่งชี้ว่าคะแนน z สำหรับคลัสเตอร์ที่กำหนดนั้นสูงกว่าค่าเฉลี่ยโดยรวม ตัวอย่างเช่น คลัสเตอร์ 2 มีราคาเฉลี่ยสูงสุดในบรรดาคลัสเตอร์ทั้งหมด
center <-pc_cluster_2$centers center
Output:
## price_scal hd_scal ram_scal screen_scal ads_scal trend_scal ## 1 -0.6372457 -0.7097995 -0.691520682 -0.4401632 0.6780366 -0.3379751 ## 2 -0.1323863 0.6299541 0.004786730 2.6419582 -0.8894946 1.2673184 ## 3 0.8745816 0.2574164 0.513105797 -0.2003237 0.6734261 -0.3300536 ## 4 1.0912296 -0.2401936 0.006526723 2.6419582 0.4704301 -0.4132057 ## 5 -0.8155183 0.2814882 -0.307621003 -0.3205176 -0.9052979 1.2177279 ## 6 0.8830191 2.1019454 2.168706085 0.4492922 -0.9035248 1.2069855 ## 7 0.2215678 -0.7132577 -0.318050275 -0.3878782 -1.3206229 -1.5490909
คุณสามารถสร้างแผนที่ความร้อนด้วย ggplot เพื่อช่วยเราเน้นความแตกต่างระหว่างหมวดหมู่ต่างๆ
จำเป็นต้องเปลี่ยนสีเริ่มต้นของ ggplot ด้วยไลบรารี RColorBrewer คุณสามารถใช้คอนด้าได้ ห้องสมุด และโค้ดที่จะเปิดในเทอร์มินัล:
conda ติดตั้ง -cr r-rcolorbrewer
หากต้องการสร้างแผนที่ความร้อน คุณต้องดำเนินการในสามขั้นตอน:
- สร้างกรอบข้อมูลด้วยค่าของศูนย์กลางและสร้างตัวแปรด้วยหมายเลขของคลัสเตอร์
- ปรับรูปร่างข้อมูลใหม่ด้วยฟังก์ชันรวบรวม() ของไลบรารีที่เป็นระเบียบเรียบร้อย คุณต้องการแปลงข้อมูลจากกว้างไปเป็นยาว
- สร้างจานสีด้วยสีRampฟังก์ชันจานสี()
ขั้นตอน 1) สร้างกรอบข้อมูล
มาสร้างชุดข้อมูลการปรับรูปร่างกันเถอะ
library(tidyr) # create dataset with the cluster number cluster <- c(1: 7) center_df <- data.frame(cluster, center) # Reshape the data center_reshape <- gather(center_df, features, values, price_scal: trend_scal) head(center_reshape)
Output:
## cluster features values ## 1 1 price_scal -0.6372457 ## 2 2 price_scal -0.1323863 ## 3 3 price_scal 0.8745816 ## 4 4 price_scal 1.0912296 ## 5 5 price_scal -0.8155183 ## 6 6 price_scal 0.8830191
ขั้นตอน 2) ปรับรูปร่างข้อมูลใหม่
โค้ดด้านล่างสร้างจานสีที่คุณจะใช้ในการพล็อตแผนที่ความร้อน
library(RColorBrewer) # Create the palette hm.palette <-colorRampPalette(rev(brewer.pal(10, 'RdYlGn')),space='Lab')
ขั้นตอนที่ 3) เห็นภาพ
คุณสามารถพล็อตกราฟและดูว่ากลุ่มต่างๆ มีลักษณะอย่างไรได้
# Plot the heat map ggplot(data = center_reshape, aes(x = features, y = cluster, fill = values)) + scale_y_continuous(breaks = seq(1, 7, by = 1)) + geom_tile() + coord_equal() + scale_fill_gradientn(colours = hm.palette(90)) + theme_classic()
สรุป
เราสามารถสรุปอัลกอริทึม k-mean ได้จากตารางด้านล่างนี้
แพ็คเกจ | วัตถุประสงค์ | ฟังก์ชัน | ข้อโต้แย้ง |
---|---|---|---|
ฐาน | ฝึกเคมีน | กม.() | df เค |
การเข้าถึงคลัสเตอร์ | kmeans()$คลัสเตอร์ | ||
Cluster ศูนย์ | kmeans()$centers | ||
ขนาดคลัสเตอร์ | kmeans()$size |