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

Cluster การวิเคราะห์

จุดนี้มองเห็นลวดลายได้

  1. ด้านซ้ายล่างจะมองเห็นกลุ่มวัยรุ่นที่มีกำลังซื้อต่ำกว่า
  2. ระดับกลางตอนบนสะท้อนถึงคนที่มีงานที่สามารถใช้จ่ายได้มากขึ้น
  3. สุดท้ายคือผู้สูงอายุที่มีงบประมาณต่ำกว่า

Cluster การวิเคราะห์

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

ในบทช่วยสอนนี้ คุณจะได้เรียนรู้วิธีการใช้งาน k- หมายถึง ขั้นตอนวิธี

อัลกอริทึม K-mean

K-mean เป็นวิธีการจัดกลุ่มที่ได้รับความนิยมมากที่สุดอย่างไม่ต้องสงสัย นักวิจัยเผยแพร่อัลกอริทึมนี้เมื่อหลายทศวรรษก่อน และมีการปรับปรุง k-means มากมาย

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

อัลกอริทึม K-mean

อัลกอริทึมทำงานดังนี้:

  • ขั้นตอนที่ 1: เลือกกลุ่มในแผนฟีเจอร์แบบสุ่ม
  • ขั้นตอนที่ 2: ลดระยะห่างระหว่างศูนย์กลางคลัสเตอร์และการสังเกตที่แตกต่างกันให้น้อยที่สุด (เซนทรอยด์- ส่งผลให้เกิดกลุ่มที่มีการสังเกต
  • ขั้นตอนที่ 3: Shift เซนทรอยด์เริ่มต้นถึงค่าเฉลี่ยของพิกัดภายในกลุ่ม
  • ขั้นตอนที่ 4: ลดระยะห่างให้เหลือน้อยที่สุดตามเซนทรอยด์ใหม่ มีการสร้างขอบเขตใหม่ ดังนั้นการสังเกตจะย้ายจากกลุ่มหนึ่งไปอีกกลุ่มหนึ่ง
  • ทำซ้ำจนกว่าจะไม่มีการเปลี่ยนแปลงกลุ่มการสังเกต

K-means มักจะใช้ระยะห่างแบบยุคลิดระหว่างคุณลักษณะและคุณลักษณะ :

อัลกอริทึม K-mean

มีการวัดค่าต่างๆ ให้เลือก เช่น ระยะทางแมนฮัตตันหรือระยะทางมินลอฟสกี้ โปรดทราบว่า K-mean จะส่งคืนกลุ่มที่แตกต่างกันทุกครั้งที่คุณเรียกใช้อัลกอริทึม จำไว้ว่าการคาดเดาครั้งแรกเป็นแบบสุ่ม และคำนวณระยะทางจนกว่าอัลกอริทึมจะบรรลุความสม่ำเสมอภายในกลุ่ม นั่นคือ k-mean จะไวต่อตัวเลือกแรกมาก และเว้นแต่จำนวนการสังเกตและกลุ่มจะน้อย การจัดกลุ่มแบบเดียวกันแทบจะเป็นไปไม่ได้เลย

เลือกจำนวนคลัสเตอร์

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

จำนวนคลัสเตอร์ขึ้นอยู่กับลักษณะของชุดข้อมูล อุตสาหกรรม ธุรกิจ และอื่นๆ อย่างไรก็ตาม มีกฎเกณฑ์ง่ายๆ ในการเลือกจำนวนคลัสเตอร์ที่เหมาะสม:

เลือกจำนวน Clusters

โดยเท่ากับจำนวนการสังเกตในชุดข้อมูล

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

เราจะใช้ชุดข้อมูลราคาเครื่องคอมพิวเตอร์ส่วนบุคคลเพื่อทำการวิเคราะห์การจัดกลุ่ม ชุดข้อมูลนี้ประกอบด้วยข้อมูลสังเกต 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()

การตรวจสอบ Cluster

สรุป

เราสามารถสรุปอัลกอริทึม k-mean ได้จากตารางด้านล่างนี้

แพ็คเกจ วัตถุประสงค์ ฟังก์ชัน ข้อโต้แย้ง
ฐาน ฝึกเคมีน กม.() df เค
การเข้าถึงคลัสเตอร์ kmeans()$คลัสเตอร์
Cluster ศูนย์ kmeans()$centers
ขนาดคลัสเตอร์ kmeans()$size