一、主成分分析概述
主成分分析(Principal Component Analysis, PCA)是一種常見的線性降維技術,用於發現數據中的主要關係。主成分分析可以將高維數據降維到較低維度,同時保留數據的主要特徵。
主成分分析的主要目的是通過對多維數據集進行旋轉和變換,找到解釋數據變異性的最大方向。這些方向被稱為主成分,其對應的特徵向量及其所佔的方差比例越大,說明這個主成分所解釋的數據變異越多。主成分的個數等於數據維度的數量或小於這個值。主成分分析後,可以基於主成分展開對原始數據的重新建模,以達到數據降維、可視化或初步探索結構的目的。
下面提供一個主成分分析的簡單例子,了解如何用R語言進行主成分分析。我們使用自帶的iris數據集,它描述了鳶尾花的不同屬性,分為三個品種。數據集中包含了150行和5列。
#導入iris數據集
data(iris)
dim(iris) #查看數據集的維度,150行5列
head(iris) #查看前六行數據
#選取鳶尾花的四個屬性作為主成分,這四個屬性是數值型的
iris_pca<-prcomp(iris[,1:4],scale = TRUE) #輸入剪枝過的數據集
summary(iris_pca) #查看主成分分析結果
二、主成分分析的應用
主成分分析可以優化模型和降低數據的大小。接下來,我們將介紹PCA在數據可視化、聚類分析和異常檢測方面的應用。
1. 數據可視化
主成分分析的一個最重要的應用就是數據的可視化。PCA是從原始數據中提取主要信息的一種方法,因此,對於高維數據,它可以將其轉化為二維或三維空間,從而顯著提高數據的可視化性。下面是一個二維PCA可視化的代碼示例。
library(ggbiplot) #導入ggplot2和ggbiplot包
#加載數據集
data(iris)
#執行PCA並將結果繪製在2D圖形中
iris.pca <- prcomp(iris[,1:4], center = TRUE, scale. = TRUE)
ggbiplot(iris.pca, obs.scale = 1, var.scale = 1, alpha = 0.5, groups = iris$Species, var.axes = TRUE) + scale_color_discrete(name = '')
2. 聚類分析
PCA被廣泛用於聚類分析,可以通過PCA降維來減少特徵向量數量,從而使數據更易於處理。一旦執行PCA並找到數據的主要變化方向,就可以將它們投影到新的低維空間中進行聚類分析。
下面是一個PCA和聚類分析的代碼示例:
#加載數據集
data(iris)
#執行PCA並將數據映射到二維平面
pca_result <- prcomp(iris[,1:4], center = TRUE, scale. = TRUE)
irispca <- data.frame(pca_result$x[,1:2], Species = iris$Species)
#kmeans算法的聚類分析
km <- kmeans(pca_result$x[,1:2], 3, nstart = 20)
cl <- km$cluster
plot(irispca[,1:2], col = cl, pch = 20,
main = "PCA and K-means clustering of Iris data",
xlab = "PC1", ylab = "PC2")
3. 異常檢測
主成分分析也可以用來識別異常值或異常簇。異常值是與一般數據點顯着不同的數據點,而異常簇則是與其他簇明顯不同的數據簇。PCA可以將數據投影到新的軸上,這些軸捕捉數據的主要變化方向。異常數據點或簇通常在主成分分析過程中由於保留的方差較小而被排除。
下面是一個用於識別異常值的PCA例子:
#加載數據集
data(mtcars)
X <- as.matrix(mtcars)
#執行PCA
pc <- prcomp(X, scale = TRUE)
#計算每個觀測值的模型適應度
outlierscores <- apply(pc$x, 1, function(x) sum(x^2))
#按照得分排序
outlierscores <- sort(outlierscores, decreasing = TRUE)
#標出最大值和最小值
par(mar=c(6,6,1,1))
plot(outlierscores, pch = 20, cex = 1.5, xlab = "Observations", ylab = "Outlier Scores", main = "Outlier Detection via PCA")
text(x = 1:length(outlierscores), y = outlierscores, labels = ifelse(outlierscores == max(outlierscores), round(outlierscores, 2), ""), pos = 1, col = "red")
text(x = 1:length(outlierscores), y = outlierscores, labels = ifelse(outlierscores == min(outlierscores), round(outlierscores, 2), ""), pos = 3, col = "blue")
三、主成分分析的參數和限制
主成分分析具有兩個重要的參數。第一個參數是要保留的主成分的數量,第二個參數是要使用的旋轉類型。為了保留大部分數據的變化,我們可以選擇保留前k個主成分,其中k小於或等於原始數據的維度。另一個參數是變量旋轉,它包括方差旋轉和直角旋轉。方差旋轉消除了特徵之間的相關性,使每個主成分的方差最大化。直角旋轉被認為是最優選擇,在很大程度上降低了數據的維度,同時仍然保留了各個主成分的可解釋性。
雖然主成分分析是一種強大的工具,但也存在一些限制。首先,在數據維度較高時,計算成本會變得非常昂貴。次要問題是數據稀疏性和解釋性。當數據集具有許多缺失值或不相關的特徵時,主成分分析可能無法提供良好的解釋或可視化。
四、結語
本文介紹了R語言主成分分析的相關知識。主成分分析可以用於數據可視化、聚類分析和異常檢測。然而,主成分分析有一些限制,當計算成本很高或數據無法解釋時,它的效果可能會受到影響。本文提供了用於執行主成分分析的基本代碼示例。隨着更多的研究人員和開發人員在各自的領域中使用主成分分析,這種技術的應用也會變得越來越廣泛。
原創文章,作者:ZQZGI,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/369106.html