หน้าบทที่ 13-20 ของบทช่วยสอนที่คุณโพสต์นั้นให้คำอธิบายทางเรขาคณิตที่เข้าใจง่ายมากเกี่ยวกับวิธีการใช้ PCA สำหรับการลดขนาด
เมทริกซ์ 13x13 ที่คุณพูดถึงน่าจะเป็นเมทริกซ์ "กำลังโหลด" หรือ "การหมุน" (ฉันเดาว่าข้อมูลดั้งเดิมของคุณมีตัวแปร 13 ตัว) ซึ่งสามารถตีความได้ด้วยวิธีใดวิธีหนึ่งในสองวิธี (เทียบเท่า):
คอลัมน์ (ค่าสัมบูรณ์ของ) คอลัมน์ของเมทริกซ์การโหลดของคุณอธิบายว่า "จัดสรร" แต่ละองค์ประกอบตามสัดส่วนเท่าใดสำหรับแต่ละองค์ประกอบ
เมทริกซ์การหมุนจะหมุนข้อมูลของคุณไปยังพื้นฐานที่กำหนดโดยเมทริกซ์การหมุนของคุณ ดังนั้นหากคุณมีข้อมูล 2 มิติและคูณข้อมูลด้วยเมทริกซ์การหมุนของคุณแกน X ใหม่ของคุณจะเป็นองค์ประกอบหลักตัวแรกและแกน Y ใหม่จะเป็นองค์ประกอบหลักตัวที่สอง
แก้ไข: คำถามนี้ถูกถามบ่อยมากดังนั้นฉันจะอธิบายรายละเอียดเกี่ยวกับสิ่งที่เกิดขึ้นเมื่อเราใช้ PCA เพื่อลดมิติข้อมูล
ลองพิจารณาตัวอย่าง 50 คะแนนจาก y = x + noise องค์ประกอบหลักแรกจะอยู่ตามเส้น y = x และองค์ประกอบที่สองจะอยู่ตามเส้น y = -x ดังที่แสดงด้านล่าง
อัตราส่วนกว้างยาวทำให้ยุ่งเล็กน้อย แต่ใช้คำพูดของฉันว่าองค์ประกอบเป็นมุมฉาก การใช้ PCA จะหมุนข้อมูลของเราเพื่อให้ส่วนประกอบกลายเป็นแกน x และ y:
ข้อมูลก่อนการแปลงคือวงกลมข้อมูลหลังจากข้าม ในตัวอย่างนี้ข้อมูลไม่ได้หมุนมากเท่าที่มันหมุนข้ามเส้น y = -2x แต่เราสามารถกลับหัวแกน y ได้อย่างง่ายดายเพื่อทำให้การหมุนเป็นไปอย่างแท้จริงโดยไม่สูญเสียความสามารถตามที่อธิบายไว้ที่นี่ .
ความแปรปรวนจำนวนมากเช่นข้อมูลในข้อมูลจะถูกกระจายไปตามองค์ประกอบหลักแรก (ซึ่งถูกแสดงโดยแกน x หลังจากเราแปลงข้อมูล) มีความแปรปรวนเล็กน้อยตามองค์ประกอบที่สอง (ตอนนี้แกน y) แต่เราสามารถวางองค์ประกอบนี้ทั้งหมดโดยไม่สูญเสียข้อมูลที่สำคัญ ดังนั้นการยุบจากสองมิติเป็น 1 เราให้การฉายข้อมูลลงบนส่วนประกอบหลักตัวแรกอธิบายข้อมูลของเราอย่างสมบูรณ์
เราสามารถกู้คืนข้อมูลต้นฉบับของเราได้บางส่วนด้วยการหมุน (ตกลงฉาย) กลับไปยังแกนเดิม
จุดสีน้ำเงินเข้มคือข้อมูล "กู้คืน" ในขณะที่จุดว่างเปล่าเป็นข้อมูลดั้งเดิม อย่างที่คุณเห็นเราได้สูญเสียข้อมูลบางส่วนจากข้อมูลดั้งเดิมโดยเฉพาะความแปรปรวนในทิศทางขององค์ประกอบหลักที่สอง แต่สำหรับหลาย ๆ วัตถุประสงค์คำอธิบายที่ถูกบีบอัดนี้ (การใช้การฉายภาพตามองค์ประกอบหลักแรก) อาจเหมาะสมกับความต้องการของเรา
นี่คือรหัสที่ฉันใช้ในการสร้างตัวอย่างนี้ในกรณีที่คุณต้องการทำซ้ำด้วยตัวคุณเอง หากคุณลดความแปรปรวนขององค์ประกอบเสียงในบรรทัดที่สองจำนวนข้อมูลที่สูญเสียจากการแปลง PCA จะลดลงเช่นกันเนื่องจากข้อมูลจะมาบรรจบกันในองค์ประกอบหลักตัวแรก:
set.seed(123)
y2 = x + rnorm(n,0,.2)
mydata = cbind(x,y2)
m2 = colMeans(mydata)
p2 = prcomp(mydata, center=F, scale=F)
reduced2= cbind(p2$x[,1], rep(0, nrow(p2$x)))
recovered = reduced2 %*% p2$rotation
plot(mydata, xlim=c(-1.5,1.5), ylim=c(-1.5,1.5), main='Data with principal component vectors')
arrows(x0=m2[1], y0=m2[2]
,x1=m2[1]+abs(p2$rotation[1,1])
,y1=m2[2]+abs(p2$rotation[2,1])
, col='red')
arrows(x0=m2[1], y0=m2[2]
,x1=m2[1]+p2$rotation[1,2]
,y1=m2[2]+p2$rotation[2,2]
, col='blue')
plot(mydata, xlim=c(-1.5,1.5), ylim=c(-1.5,1.5), main='Data after PCA transformation')
points(p2$x, col='black', pch=3)
arrows(x0=m2[1], y0=m2[2]
,x1=m2[1]+abs(p2$rotation[1,1])
,y1=m2[2]+abs(p2$rotation[2,1])
, col='red')
arrows(x0=m2[1], y0=m2[2]
,x1=m2[1]+p2$rotation[1,2]
,y1=m2[2]+p2$rotation[2,2]
, col='blue')
arrows(x0=mean(p2$x[,1])
,y0=0
,x1=mean(p2$x[,1])
,y1=1
,col='blue'
)
arrows(x0=mean(p2$x[,1])
,y0=0
,x1=-1.5
,y1=0
,col='red'
)
lines(x=c(-1,1), y=c(2,-2), lty=2)
plot(p2$x, xlim=c(-1.5,1.5), ylim=c(-1.5,1.5), main='PCA dimensionality reduction')
points(reduced2, pch=20, col="blue")
for(i in 1:n){
lines(rbind(reduced2[i,], p2$x[i,]), col='blue')
}
plot(mydata, xlim=c(-1.5,1.5), ylim=c(-1.5,1.5), main='Lossy data recovery after PCA transformation')
arrows(x0=m2[1], y0=m2[2]
,x1=m2[1]+abs(p2$rotation[1,1])
,y1=m2[2]+abs(p2$rotation[2,1])
, col='red')
arrows(x0=m2[1], y0=m2[2]
,x1=m2[1]+p2$rotation[1,2]
,y1=m2[2]+p2$rotation[2,2]
, col='blue')
for(i in 1:n){
lines(rbind(recovered[i,], mydata[i,]), col='blue')
}
points(recovered, col='blue', pch=20)