R和Python主成分分析(PCA)线性判别分析(LDA)及其K-最近邻分类器和病理预测

本文介绍了如何在R语言中运用主成分分析(PCA)和线性判别分析(LDA)进行数据降维。首先展示了PCA如何通过提取主要特征来揭示数据的内在结构,以及如何通过绘制累积方差图选择合适的主成分数量。接着,通过LDA用于分类任务,展示如何利用LDA降低维度并准备数据以应用于分类模型。代码示例包括数据加载、预处理、模型训练以及数据可视化,以帮助理解PCA和LDA在实际问题中的应用。
摘要由CSDN通过智能技术生成

R主成分分析(PCA)和线性判别分析(LDA)

R主成分分析(PCA)

在此,我们将使用此机器学习存储库中的数据集作为我们的数据。如下,加载:

wdbc <- read.csv("wdbc.csv", header = F)
features <- c("radius", "texture", "perimeter", "area", "smoothness", "compactness", "concavity", "concave_points", "symmetry", "fractal_dimension")
names(wdbc) <- c("id", "diagnosis", paste0(features,"_mean"), paste0(features,"_se"), paste0(features,"_worst"))

上面的代码将简单地加载数据并命名所有 32 个变量。 ID、诊断和十个不同 (30) 特征。

现在我们已经加载了我们的数据并发现自己有 30 个变量(不包括我们的响应“诊断”和不相关的 ID 变量)。

当我们尝试使用 PCA 的线性组合来描述数据中的差异时,我们发现“良性”和“恶性”病理之间存在一些非常明显的聚类和分离! 这为基于我们的特征开发分类模型提供了一个很好的案例!PCA 的另一个主要“功能”,是它实际上可以直接提高模型的性能。

PCA工作原理

PCA 的主要目的不是删除! 事实上,它可以降低维度,但不会减少数据中的特征/变量的数量。 这意味着您可能会发现仅使用 3 个主成分就可以解释 1000 个特征数据集中 99% 的方差,但您仍然需要这 1000 个特征来构建这 3 个主成分,这也意味着对于未来的数据的预测,您仍然需要在新观察中使用相同的 1000 个特征来构建相应的主成分。

简而言之,其特点是:

  • 标准化数据(中心和比例)
  • 从协方差矩阵或相关矩阵计算特征向量和特征值(也可以使用奇异向量分解)。
  • 按降序对特征值进行排序,并选择 K 个最大的特征向量(其中 K 是新特征子空间 k ≤ d 的所需维数)。
  • 从选定的 K 个特征向量构造投影矩阵 W。
  • 通过W对原始数据集X进行变换,得到一个K维特征子空间Y。

R编程PCA

wdbc.pr <- prcomp(wdbc[c(3:32)], center = TRUE, scale = TRUE)
summary(wdbc.pr)

绘图

screeplot(wdbc.pr, type = "l", npcs = 15, main = "Screeplot of the first 10 PCs")
abline(h = 1, col="red", lty=5)
legend("topright", legend=c("Eigenvalue = 1"),
       col=c("red"), lty=5, cex=0.6)
cumpro <- cumsum(wdbc.pr$sdev^2 / sum(wdbc.pr$sdev^2))
plot(cumpro[0:15], xlab = "PC #", ylab = "Amount of explained variance", main = "Cumulative variance plot")
abline(v = 6, col="blue", lty=5)
abline(h = 0.88759, col="blue", lty=5)
legend("topleft", legend=c("Cut-off @ PC6"),
       col=c("blue"), lty=5, cex=0.6)

R线性判别分析(LDA)

项目:病理预测

源代码

Python主成分分析(PCA)和线性判别分析(LDA)

主成分分析(PCA)

线性判别分析(LDA)

使用 LDA 进行降维:

# input and output variables
X = dataset.data
y = dataset.target
target_names = dataset.target_names

# importing the requried module
from sklearn.discriminant_analysis import LinearDiscriminantAnalysis

# initializing the model with 2 components
lda = LinearDiscriminantAnalysis(n_components=2)

# fitting the dataset
X_r2 = lda.fit(X, y).transform(X)

绘制数据集:

# importing the required module
import matplotlib.pyplot as plt

# plot size
plt.figure(figsize=(15, 8))

# plotting the graph
plt.scatter(X_r2[:,0],X_r2[:,1],  c=dataset.target)
plt.show()

项目:K-最邻近分类器

源代码

详情参阅 - 亚图跨际

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值