การวิเคราะห์จำแนกกำลังสองใน r (ทีละขั้นตอน)
การวิเคราะห์จำแนกกำลังสอง เป็นวิธีการที่คุณสามารถใช้เมื่อคุณมีชุดตัวแปรทำนาย และคุณต้องการจัด ประเภทตัวแปรตอบสนองออก เป็นสองคลาสขึ้นไป ถือว่าเทียบเท่าแบบไม่เชิงเส้นของ การวิเคราะห์จำแนกเชิงเส้น
บทช่วยสอนนี้ให้ตัวอย่างทีละขั้นตอนของวิธีดำเนินการวิเคราะห์จำแนกกำลังสองใน R
ขั้นตอนที่ 1: โหลดไลบรารีที่จำเป็น
ขั้นแรก เราจะโหลดไลบรารีที่จำเป็นสำหรับตัวอย่างนี้:
library (MASS)
library (ggplot2)
ขั้นตอนที่ 2: โหลดข้อมูล
สำหรับตัวอย่างนี้ เราจะใช้ชุดข้อมูล ม่านตา ที่สร้างไว้ใน R โค้ดต่อไปนี้จะแสดงวิธีการโหลดและแสดงชุดข้อมูลนี้:
#attach iris dataset to make it easy to work with attach(iris) #view structure of dataset str(iris) 'data.frame': 150 obs. of 5 variables: $ Sepal.Length: num 5.1 4.9 4.7 4.6 5 5.4 4.6 5 4.4 4.9 ... $ Sepal.Width: num 3.5 3 3.2 3.1 3.6 3.9 3.4 3.4 2.9 3.1 ... $Petal.Length: num 1.4 1.4 1.3 1.5 1.4 1.7 1.4 1.5 1.4 1.5 ... $Petal.Width: num 0.2 0.2 0.2 0.2 0.2 0.4 0.3 0.2 0.2 0.1 ... $ Species: Factor w/ 3 levels "setosa","versicolor",..: 1 1 1 1 1 1 1 ...
เราจะเห็นว่าชุดข้อมูลประกอบด้วยตัวแปร 5 ตัว และข้อสังเกตทั้งหมด 150 รายการ
สำหรับตัวอย่างนี้ เราจะสร้างแบบจำลองการวิเคราะห์จำแนกกำลังสองเพื่อจำแนกชนิดพันธุ์ของดอกไม้ที่กำหนด
เราจะใช้ตัวแปรทำนายต่อไปนี้ในแบบจำลอง:
- กลีบเลี้ยงความยาว
- กลีบเลี้ยงกว้าง
- กลีบดอกไม้.ความยาว
- กลีบดอกไม้กว้าง
และเราจะใช้พวกมันเพื่อทำนายตัวแปรการตอบสนอง ของสปีชีส์ ซึ่งรองรับคลาสที่เป็นไปได้สามคลาสต่อไปนี้:
- เซโตซ่า
- เวอร์ซิคัลเลอร์
- เวอร์จิเนีย
ขั้นตอนที่ 3: สร้างตัวอย่างการฝึกอบรมและการทดสอบ
ต่อไป เราจะแบ่งชุดข้อมูลออกเป็นชุดการฝึกเพื่อฝึกโมเดลและชุดทดสอบเพื่อทดสอบโมเดล:
#make this example reproducible set.seed(1) #Use 70% of dataset as training set and remaining 30% as testing set sample <- sample(c( TRUE , FALSE ), nrow (iris), replace = TRUE , prob =c(0.7,0.3)) train <- iris[sample, ] test <- iris[!sample, ]
ขั้นตอนที่ 4: ปรับโมเดล QDA
ต่อไป เราจะใช้ ฟังก์ชัน qda() จากแพ็คเกจ MASS เพื่อปรับโมเดล QDA ให้เข้ากับข้อมูลของเรา:
#fit QDA model model <- qda(Species~., data=train) #view model output model Call: qda(Species ~ ., data = train) Prior probabilities of groups: setosa versicolor virginica 0.3207547 0.3207547 0.3584906 Group means: Sepal.Length Sepal.Width Petal.Length Petal.Width setosa 4.982353 3.411765 1.482353 0.2411765 versicolor 5.994118 2.794118 4.358824 1.3676471 virginica 6.636842 2.973684 5.592105 2.0552632
ต่อไปนี้เป็นวิธีการตีความผลลัพธ์ของโมเดล:
ความน่าจะเป็นก่อนหน้าของกลุ่ม: สิ่งเหล่านี้แสดงถึงสัดส่วนของแต่ละสายพันธุ์ในชุดการฝึก ตัวอย่างเช่น 35.8% ของการสังเกตทั้งหมดในชุดการฝึกเป็นของสายพันธุ์ เวอร์จิเนีย
ค่าเฉลี่ยกลุ่ม: แสดงค่าเฉลี่ยของตัวแปรทำนายแต่ละตัวสำหรับแต่ละชนิด
ขั้นตอนที่ 5: ใช้แบบจำลองเพื่อคาดการณ์
เมื่อเราติดตั้งโมเดลโดยใช้ข้อมูลการฝึกของเราแล้ว เราสามารถใช้มันเพื่อคาดการณ์ข้อมูลการทดสอบของเราได้:
#use QDA model to make predictions on test data predicted <- predict (model, test) names(predicted) [1] "class" "posterior" "x"
ซึ่งจะส่งคืนรายการที่มีตัวแปรสองตัว:
- คลาส: คลาสที่คาดการณ์
- หลัง: ความน่าจะเป็นหลัง ที่การสังเกตเป็นของแต่ละชั้นเรียน
เราสามารถมองเห็นแต่ละผลลัพธ์เหล่านี้ได้อย่างรวดเร็วสำหรับการสังเกตหกครั้งแรกในชุดข้อมูลทดสอบของเรา:
#view predicted class for first six observations in test set head(predicted$class) [1] setosa setosa setosa setosa setosa setosa Levels: setosa versicolor virginica #view posterior probabilities for first six observations in test set head(predicted$posterior) setosa versicolor virginica 4 1 7.224770e-20 1.642236e-29 6 1 6.209196e-26 8.550911e-38 7 1 1.248337e-21 8.132700e-32 15 1 2.319705e-35 5.094803e-50 17 1 1.396840e-29 9.586504e-43 18 1 7.581165e-25 8.611321e-37
ขั้นตอนที่ 6: ประเมินแบบจำลอง
เราสามารถใช้โค้ดต่อไปนี้เพื่อดูว่าแบบจำลอง QDA ทำนายชนิดพันธุ์ได้อย่างถูกต้องกี่เปอร์เซ็นต์:
#find accuracy of model
mean(predicted$class==test$Species)
[1] 1
ปรากฎว่าแบบจำลองทำนายสปีชีส์ได้อย่างถูกต้อง 100% ของการสังเกตในชุดข้อมูลทดสอบของเรา
ในโลกแห่งความเป็นจริง โมเดล QDA แทบจะทำนายผลลัพธ์ของแต่ละคลาสได้อย่างถูกต้อง แต่ชุดข้อมูลม่านตานี้ถูกสร้างขึ้นในลักษณะที่อัลกอริธึมการเรียนรู้ของเครื่องมีแนวโน้มที่จะทำงานได้ดีมาก
คุณสามารถค้นหารหัส R แบบเต็มที่ใช้ในบทช่วยสอนนี้ ได้ที่นี่