You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

技术问询:威斯康星癌症数据集上PCA与LDA后逻辑回归的准确率对比

比较PCA与LDA处理后威斯康星癌症数据集上逻辑回归的准确率

嘿,很高兴你已经在PCA降维+逻辑回归的组合上取得了不错的结果!咱们一步步来实现LDA流程,然后直接和你的PCA方案做准确率对比。先明确下:LDA和PCA虽然都是降维方法,但LDA是有监督的——它会利用样本的类别标签信息,专门找能最大化类别分离度的特征方向,特别适配你这种二分类的癌症数据集。

LDA的核心步骤(对应你提到的均值向量、散度矩阵)

  • 计算每个类别(恶性/良性)中所有特征的均值向量
  • 计算类内散度矩阵(Sw):把每个类别内样本的散度矩阵相加,衡量同一类别样本的离散程度
  • 计算类间散度矩阵(Sb):基于类别均值和全局均值的差异,衡量不同类别之间的分离程度
  • 求解矩阵 Sw⁻¹Sb 的特征值和特征向量,挑选前k个最大特征值对应的特征向量(划重点:二分类问题中,LDA最多只能降到1维,因为Sb的秩最多是「类别数-1」,这里就是2-1=1,没法像PCA那样选10维)
  • 用特征向量矩阵对原始数据做投影,得到降维后的数据集
  • 在降维数据上训练逻辑回归,评估准确率

代码实现与对比

下面用Python+sklearn来完整实现,直接和你用的PCA方案做对比:

1. 导入依赖库

import numpy as np
from sklearn.datasets import load_breast_cancer
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.discriminant_analysis import LinearDiscriminantAnalysis as LDA
from sklearn.decomposition import PCA
from sklearn.linear_model import LogisticRegression
from sklearn.metrics import accuracy_score, classification_report

2. 数据预处理(标准化+划分数据集)

# 加载威斯康星癌症数据集
data = load_breast_cancer()
X, y = data.data, data.target

# 标准化:LDA和PCA都对特征尺度敏感,必须先做标准化
scaler = StandardScaler()
X_scaled = scaler.fit_transform(X)

# 划分训练集/测试集(固定random_state保证对比公平)
X_train, X_test, y_train, y_test = train_test_split(X_scaled, y, test_size=0.2, random_state=42)

3. LDA+逻辑回归

# 初始化LDA,二分类问题n_components只能设为1
lda = LDA(n_components=1)
X_train_lda = lda.fit_transform(X_train, y_train)  # LDA需要传入标签y做监督学习
X_test_lda = lda.transform(X_test)

# 训练逻辑回归
lr_lda = LogisticRegression()
lr_lda.fit(X_train_lda, y_train)

# 评估结果
y_pred_lda = lr_lda.predict(X_test_lda)
print("=== LDA+逻辑回归 结果 ===")
print(f"准确率: {accuracy_score(y_test, y_pred_lda):.4f}")
print("\n分类报告:\n", classification_report(y_test, y_pred_lda))

4. PCA(10主成分)+逻辑回归(你的原有方案)

# 初始化PCA,用你提到的10个主成分
pca = PCA(n_components=10)
X_train_pca = pca.fit_transform(X_train)  # PCA是无监督,不需要传y
X_test_pca = pca.transform(X_test)

# 训练逻辑回归
lr_pca = LogisticRegression()
lr_pca.fit(X_train_pca, y_train)

# 评估结果
y_pred_pca = lr_pca.predict(X_test_pca)
print("\n=== PCA(10主成分)+逻辑回归 结果 ===")
print(f"准确率: {accuracy_score(y_test, y_pred_pca):.4f}")
print("\n分类报告:\n", classification_report(y_test, y_pred_pca))

关键注意点

  • 二分类任务中LDA最多只能降到1维,这是数学限制——因为类间散度矩阵的秩等于类别数减一,所以没法像PCA那样保留多个主成分
  • LDA利用了类别标签,理论上在分类任务中降维效率更高,往往用更少的维度就能达到和PCA相近甚至更好的准确率
  • 两者都必须先做标准化,否则特征尺度差异会严重影响散度矩阵/主成分的计算结果

运行上面的代码后,你就能直接对比两种方案的准确率、精确率和召回率了。一般来说,在这个癌症数据集上,LDA+逻辑回归的表现会和PCA持平甚至略优,毕竟它是为分类任务量身设计的降维方法。

内容的提问来源于stack exchange,提问作者odemane

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 07:08:53