ค่าเอกลักษณ์และเวกเตอร์เอกลักษณ์
คำนวณการแยกเมทริกซ์ด้วยค่าเอกลักษณ์โดยใช้ eigen() และตีความผลลัพธ์
ค่าเอกลักษณ์และเวกเตอร์เอกลักษณ์ เป็นบทเรียน R Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 3 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน R Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส R Academy มีบทเรียนทั้งหมด 4 บทเรียน
ค่าไอเกนคืออะไร
เวกเตอร์ไอเกน v ของเมทริกซ์ A คือเวกเตอร์ที่ไม่เป็นศูนย์และเมื่อคูณด้วย A จะเปลี่ยนเพียงขนาด (ไม่หมุน) ดังนี้ Av = λv สเกลาร์ λ เรียกว่าค่าไอเกน ค่าเหล่านี้แสดงทิศทางการยืดที่เป็นลักษณะเฉพาะของเมทริกซ์
# Intuition: A simple scaling matrix
A <- matrix(c(3, 0,
0, 2), nrow = 2, byrow = TRUE)
# The eigenvectors are the standard basis vectors
# A * c(1,0) = 3 * c(1,0) -> eigenvalue 3
# A * c(0,1) = 2 * c(0,1) -> eigenvalue 2
v1 <- c(1, 0)
A %*% v1 # c(3, 0) = 3 * v1
v2 <- c(0, 1)
A %*% v2 # c(0, 2) = 2 * v2
cat('Eigenvalues of a diagonal matrix are its diagonal entries')eigen(): การคำนวณค่าไอเกน
eigen(A) คืนค่ารายการที่มี $values (ค่าไอเกนที่เรียงตามขนาดจากมากไปน้อย) และ $vectors (เมทริกซ์ที่เก็บเวกเตอร์ไอเกนเป็นคอลัมน์) เวกเตอร์ไอเกนจะถูกปรับให้มีความยาวเป็นหนึ่ง
A <- matrix(c(4, 1,
2, 3), nrow = 2, byrow = TRUE)
# Compute eigendecomposition
eig <- eigen(A)
# Eigenvalues
eig$values
# [1] 5 2 (descending order)
# Eigenvectors (columns)
eig$vectors
# [,1] [,2]
# [1,] 0.7071068 -0.4472136
# [2,] 0.7071068 0.8944272
cat('Each column is one eigenvector (unit length)')การตรวจสอบ Av = lambda * v
ในการตรวจสอบ ให้ดูว่า A %*% v - lambda * v มีค่าใกล้ศูนย์มาก เนื่องจากการคำนวณแบบจุดลอยตัว ให้ใช้ max(abs(...)) และตรวจสอบว่าค่าใกล้เอปไซลอนของเครื่อง แทนการทดสอบความเท่ากันแบบตรงตัว
A <- matrix(c(4, 1,
2, 3), nrow = 2, byrow = TRUE)
eig <- eigen(A)
lambda1 <- eig$values[1] # 5
v1 <- eig$vectors[, 1]
# Verify: Av - lambda*v should be ~0
residual <- A %*% v1 - lambda1 * v1
max(abs(residual)) # ~ 1e-16
# Check all eigenpairs at once
# A V = V diag(lambda) where V = eigenvectors matrix
V <- eig$vectors
Lambda <- diag(eig$values)
err <- A %*% V - V %*% Lambda
max(abs(err)) # near zeroเมทริกซ์สมมาตร: ค่าไอเกนเป็นจำนวนจริง
เมทริกซ์สมมาตร (A = t(A)) จะมีค่าไอเกนที่เป็นจำนวนจริงและเวกเตอร์ไอเกนตั้งฉากกันเสมอ นี่คือทฤษฎีบทเชิงสเปกตรัม ซึ่งสำคัญในสถิติ (เมทริกซ์ความแปรปรวนร่วมเป็นเมทริกซ์สมมาตรกึ่งกำหนดบวก)
# Symmetric matrix
S <- matrix(c(4, 2, 2,
2, 3, 1,
2, 1, 5), nrow = 3, byrow = TRUE)
# All symmetric: A = t(A)
all.equal(S, t(S)) # TRUE
# Eigenvalues are real
eig <- eigen(S)
eig$values # All real numbers
Im(eig$values) # All zero
# Eigenvectors are orthogonal: V'V = I
V <- eig$vectors
round(t(V) %*% V, 10) # Identity matrix
cat('Symmetric -> real eigenvalues, orthogonal eigenvectors')เมทริกซ์ไม่สมมาตร: ค่าไอเกนเชิงซ้อน
เมทริกซ์ที่ไม่สมมาตรอาจมีค่าไอเกนเชิงซ้อน (เป็นคู่สังยุคเชิงซ้อน) โดย R จะคืนค่าเป็นจำนวนเชิงซ้อน ส่วนจริงควบคุมการเติบโตหรือการลดลง ส่วนจินตภาพควบคุมการหมุนหรือการสั่น
# Rotation-like matrix -> complex eigenvalues
A <- matrix(c(0, -1,
1, 0), nrow = 2, byrow = TRUE)
# This is a 90-degree rotation matrix
eig <- eigen(A)
eig$values
# [1] 0+1i 0-1i (pure imaginary!)
# Real part: zero -> neither grows nor decays
Re(eig$values) # 0 0
# Imaginary part: indicates rotation
Im(eig$values) # 1 -1
# Another example: stable spiral
B <- matrix(c(-1, -2,
2, -1), nrow = 2, byrow = TRUE)
eigen(B)$values # -1 +/- 2iการแยกค่าไอเกน A = VLV^-1
เมทริกซ์ A ที่สามารถทำให้เป็นแนวทแยงได้ สามารถเขียนเป็น A = V Λ V⁻¹ โดย V คือเมทริกซ์เวกเตอร์ไอเกน และ Λ = diag(ค่าไอเกน) การแยกนี้ช่วยให้คำนวณเลขยกกำลังของเมทริกซ์ได้: A^n = V Λ^n V⁻¹
A <- matrix(c(4, 1,
2, 3), nrow = 2, byrow = TRUE)
eig <- eigen(A)
V <- eig$vectors
Lambda <- diag(eig$values)
# Reconstruct A = V %*% Lambda %*% solve(V)
A_reconstructed <- V %*% Lambda %*% solve(V)
all.equal(A, A_reconstructed) # TRUE
# Matrix power A^3 using eigendecomposition
A_cubed_eig <- V %*% diag(eig$values^3) %*% solve(V)
A_cubed_direct <- A %*% A %*% A
all.equal(Re(A_cubed_eig), A_cubed_direct) # TRUEแนวคิด PCA ผ่านค่าไอเกนของความแปรปรวนร่วม
การวิเคราะห์องค์ประกอบหลัก (PCA) ใช้การแยกค่าไอเกนของเมทริกซ์ความแปรปรวนร่วม เวกเตอร์ไอเกนให้ทิศทางที่มีความแปรปรวนสูงสุด (องค์ประกอบหลัก) ส่วนค่าไอเกนให้ความแปรปรวนตามแต่ละทิศทาง
set.seed(42)
# Correlated 2D data
x1 <- rnorm(100)
x2 <- 0.8 * x1 + 0.6 * rnorm(100)
X <- cbind(x1, x2)
# Covariance matrix
C <- cov(X)
print(round(C, 3))
# Eigendecomposition of covariance matrix
eig <- eigen(C)
cat('Eigenvalues (variance explained):\n')
print(eig$values)
cat('PC1 direction:\n')
print(eig$vectors[, 1])
# Variance explained by PC1
prop_var <- eig$values[1] / sum(eig$values)
cat('PC1 explains:', round(100 * prop_var, 1), '%')รัศมีเชิงสเปกตรัม
รัศมีเชิงสเปกตรัม ρ(A) = max|λᵢ| คือค่าไอเกนที่มีค่าสัมบูรณ์สูงสุด ค่านี้กำหนดเสถียรภาพของขั้นตอนวิธีแบบวนซ้ำ: ถ้า ρ < 1 การวนซ้ำจะลู่เข้า และถ้า ρ > 1 จะไม่ลู่เข้า
spectral_radius <- function(A) {
max(Mod(eigen(A)$values))
}
# Convergent matrix: spectral radius < 1
A_conv <- matrix(c(0.5, 0.2,
0.1, 0.3), nrow = 2, byrow = TRUE)
spectral_radius(A_conv) # < 1 -> iterations converge
# Divergent matrix: spectral radius > 1
A_div <- matrix(c(2, 0.5,
0.3, 1.5), nrow = 2, byrow = TRUE)
spectral_radius(A_div) # > 1 -> iterations diverge
# For positive definite A, spectral radius = max eigenvalue
cat('Spectral radius determines iterative stability')ดีเทอร์มิแนนต์และเทรซผ่านค่าไอเกน
ดีเทอร์มิแนนต์เท่ากับผลคูณของค่าไอเกน ส่วนเทรซเท่ากับผลรวมของค่าไอเกน ความสัมพันธ์เหล่านี้เชื่อมโยงคุณสมบัติทางพีชคณิตกับค่าไอเกน และใช้ตรวจสอบความสมเหตุสมผลของผลลัพธ์จาก eigen()
A <- matrix(c(5, 2,
1, 4), nrow = 2, byrow = TRUE)
eig_vals <- eigen(A)$values
# det(A) = product of eigenvalues
det(A)
prod(eig_vals) # Same!
# trace = sum of eigenvalues
sum(diag(A))
sum(eig_vals) # Same!
# For numeric precision, use Re() on complex
A2 <- matrix(c(3, -1, 2, 5), nrow = 2, byrow = TRUE)
ev <- eigen(A2)$values
all.equal(det(A2), prod(Re(ev)), tolerance = 1e-10)
all.equal(sum(diag(A2)), sum(Re(ev)), tolerance = 1e-10)เมทริกซ์กำหนดบวก
เมทริกซ์สมมาตรเป็นเมทริกซ์กำหนดบวก (PD) หากค่าไอเกนทั้งหมดเป็นบวก เมทริกซ์ความแปรปรวนร่วมเป็นเมทริกซ์กึ่งกำหนดบวก (ค่าไอเกน ≥ 0) เมทริกซ์กำหนดบวกสามารถหาเมทริกซ์ผกผันได้และมีการแยกแบบโชเลสกี
# Check positive definiteness
is_positive_definite <- function(A) {
# Symmetric check
if (!isTRUE(all.equal(A, t(A)))) return(FALSE)
all(eigen(A)$values > 0)
}
# Positive definite covariance matrix
S <- matrix(c(4, 2,
2, 3), nrow = 2, byrow = TRUE)
is_positive_definite(S) # TRUE
eigen(S)$values # Both positive
# Not PD (one negative eigenvalue)
Q <- matrix(c(1, 3,
3, 2), nrow = 2, byrow = TRUE)
is_positive_definite(Q) # FALSE
eigen(Q)$values # One negativeการวนซ้ำกำลังเพื่อหาค่าไอเกนเด่น
สำหรับเมทริกซ์ขนาดใหญ่ การคำนวณค่าไอเกนทั้งหมดมีค่าใช้จ่ายสูง การวนซ้ำกำลังใช้ค้นหาค่าไอเกนที่ใหญ่ที่สุดแบบวนซ้ำ และเป็นพื้นฐานของขั้นตอนวิธี PageRank ของ Google ให้คูณด้วย A ซ้ำ ๆ แล้วปรับขนาดให้เป็นมาตรฐาน
# Power iteration: finds dominant eigenvalue
power_iteration <- function(A, tol = 1e-10, max_iter = 1000) {
n <- nrow(A)
v <- rnorm(n); v <- v / sqrt(sum(v^2)) # random unit vector
lambda_old <- 0
for (i in seq_len(max_iter)) {
w <- A %*% v
lambda <- max(abs(w))
v <- w / lambda
if (abs(lambda - lambda_old) < tol) break
lambda_old <- lambda
}
list(value = lambda, vector = v)
}
A <- matrix(c(4, 1, 2, 3), nrow = 2, byrow = TRUE)
result <- power_iteration(A)
result$value # Should be ~5 (dominant eigenvalue)
eigen(A)$values[1] # Compareตรวจสอบอย่างรวดเร็ว
ทดสอบความเข้าใจเกี่ยวกับค่าไอเกนและเวกเตอร์ไอเกนใน R
สรุป: ค่าไอเกนและเวกเตอร์ไอเกน
ประเด็นสำคัญ: eigen(A) คืนค่า $values และ $vectors ตรวจสอบด้วย A %*% v - lambda*v ≈ 0 เมทริกซ์สมมาตรมีค่าไอเกนเป็นจำนวนจริงและมีเวกเตอร์ไอเกนตั้งฉากกัน เมทริกซ์ไม่สมมาตรอาจมีค่าไอเกนเชิงซ้อน det(A) = ผลคูณของค่าไอเกน; เทรซ = ผลรวม PCA แยกเมทริกซ์ความแปรปรวนร่วม เมทริกซ์กำหนดบวก ↔ ค่าไอเกนทั้งหมด > 0
A <- matrix(c(6, 2, 2, 3), nrow = 2)
eig <- eigen(A)
# Key eigen operations:
eig$values # eigenvalues
eig$vectors # eigenvectors (columns)
# Verify Av = lambda*v
v1 <- eig$vectors[, 1]
max(abs(A %*% v1 - eig$values[1] * v1)) # ~0
# Properties
all.equal(det(A), prod(eig$values)) # TRUE
all.equal(sum(diag(A)), sum(eig$values)) # TRUE
# Reconstruct A = V Lambda V^{-1}
V <- eig$vectors
all.equal(A, Re(V %*% diag(eig$values) %*% solve(V)))คำถามที่พบบ่อย
บทเรียน “ค่าเอกลักษณ์และเวกเตอร์เอกลักษณ์” ฟรีหรือไม่
ใช่ — ข้อความเต็มของ “ค่าเอกลักษณ์และเวกเตอร์เอกลักษณ์” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส R Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส R Academy มีบทเรียนทั้งหมด 4 บทเรียน
คุณจะเรียนรู้อะไรในบทเรียน “ค่าเอกลักษณ์และเวกเตอร์เอกลักษณ์”
คำนวณการแยกเมทริกซ์ด้วยค่าเอกลักษณ์โดยใช้ eigen() และตีความผลลัพธ์ คุณปฏิบัติ R Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน
คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน R Academy หรือไม่
ไม่จำเป็นต้องมีประสบการณ์มาก่อน R Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 3 จากทั้งหมด 4 บทเรียน
บทเรียน “ค่าเอกลักษณ์และเวกเตอร์เอกลักษณ์” ใช้เวลานานแค่ไหน
บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย
ฉันเขียนและรันโค้ดในบทเรียน R Academy นี้ได้ไหม
ได้ บทเรียน R Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- การคูณเมทริกซ์และดีเทอร์มิแนนต์
- การแก้ระบบสมการเชิงเส้นด้วย solve()
- ค่าเอกลักษณ์และเวกเตอร์เอกลักษณ์
- การแยกเมทริกซ์ SVD, QR และ Cholesky