R語言主成分分析

一、主成分分析概述

主成分分析(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-tw/n/369106.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
ZQZGI的頭像ZQZGI
上一篇 2025-04-12 13:00
下一篇 2025-04-12 13:00

相關推薦

  • AES加密解密演算法的C語言實現

    AES(Advanced Encryption Standard)是一種對稱加密演算法,可用於對數據進行加密和解密。在本篇文章中,我們將介紹C語言中如何實現AES演算法,並對實現過程進…

    編程 2025-04-29
  • 學習Python對學習C語言有幫助嗎?

    Python和C語言是兩種非常受歡迎的編程語言,在程序開發中都扮演著非常重要的角色。那麼,學習Python對學習C語言有幫助嗎?答案是肯定的。在本文中,我們將從多個角度探討Pyth…

    編程 2025-04-29
  • Python被稱為膠水語言

    Python作為一種跨平台的解釋性高級語言,最大的特點是被稱為”膠水語言”。 一、簡單易學 Python的語法簡單易學,更加人性化,這使得它成為了初學者的入…

    編程 2025-04-29
  • OpenJudge答案1.6的C語言實現

    本文將從多個方面詳細闡述OpenJudge答案1.6在C語言中的實現方法,幫助初學者更好地學習和理解。 一、需求概述 OpenJudge答案1.6的要求是,輸入兩個整數a和b,輸出…

    編程 2025-04-29
  • Python按位運算符和C語言

    本文將從多個方面詳細闡述Python按位運算符和C語言的相關內容,並給出相應的代碼示例。 一、概述 Python是一種動態的、面向對象的編程語言,其按位運算符是用於按位操作的運算符…

    編程 2025-04-29
  • Python語言由荷蘭人為中心的全能編程開發工程師

    Python語言是一種高級語言,很多編程開發工程師都喜歡使用Python語言進行開發。Python語言的創始人是荷蘭人Guido van Rossum,他在1989年聖誕節期間開始…

    編程 2025-04-28
  • Python語言設計基礎第2版PDF

    Python語言設計基礎第2版PDF是一本介紹Python編程語言的經典教材。本篇文章將從多個方面對該教材進行詳細的闡述和介紹。 一、基礎知識 本教材中介紹了Python編程語言的…

    編程 2025-04-28
  • Python語言實現人名最多數統計

    本文將從幾個方面詳細介紹Python語言實現人名最多數統計的方法和應用。 一、Python實現人名最多數統計的基礎 1、首先,我們需要了解Python語言的一些基礎知識,如列表、字…

    編程 2025-04-28
  • Python作為中心語言,在編程中取代C語言的優勢和挑戰

    Python一直以其簡單易懂的語法和高效的編碼環境而著名。然而,它最近的發展趨勢表明Python的使用範圍已經從腳本語言擴展到了從Web應用到機器學習等廣泛的開發領域。與此同時,C…

    編程 2025-04-28
  • Python基礎語言

    Python作為一種高級編程語言擁有簡潔優雅的語法。在本文中,我們將從多個方面探究Python基礎語言的特點以及使用技巧。 一、數據類型 Python基礎數據類型包括整數、浮點數、…

    編程 2025-04-28

發表回復

登錄後才能評論