首页 > 其他分享 >主成分分析-PCA

主成分分析-PCA

时间:2024-09-05 20:55:29浏览次数:12  
标签:分析 pred test 成分 print PCA 数据

文章目录

一、简介

1.意义

PCA(主成分分析,Principal Component Analysis)是一种常用的数据降维技术。它的主要目的是通过线性变换将原始数据转换到新的坐标系统中,这个新坐标系统的各个坐标轴(即主成分)是原始数据的主要特征方向,这些方向上的数据方差最大,且各坐标轴之间相互正交。通过这种方式,PCA可以在保留数据重要特征的同时,减少数据的维度,简化数据,便于后续的数据处理和分析。

2.PCA的应用

PCA在数据分析和机器学习领域有广泛的应用,包括:

  • 数据压缩:通过减少数据的维度,可以显著减少数据存储和传输的成本。
  • 特征提取:PCA可以帮助识别数据中的关键特征,这对于后续的数据分析和建模非常有用。
  • 数据可视化:在将高维数据降维到2维或3维后,可以使用散点图、热力图等方式进行可视化分析。
  • 噪声去除:PCA可以通过去除较小的特征值对应的特征向量来降低噪声的干扰。

3.PCA参数解释

PCA(n_components=None, copy=True, whiten=False, svd_solver=’auto’, tol=0.0, iterated_power=’auto’, random_state=None)

  1. n_components
    功能:决定PCA算法应该保留的主成分数量。
    取值:
    整数k:表示保留前k个主成分。
    小数(0,1]之间的数:表示保留的主成分的方差百分比,例如0.9表示保留90%的方差。
    如果设置为None(默认值),则保留所有主成分。
  2. copy
    功能:是否在运行算法时,将原始训练数据复制一份。
    取值:
    True(默认值):复制数据,以免修改原始数据。
    False:直接在原始数据上进行计算。
  3. whiten
    功能:决定是否对数据进行白化处理。
    取值:
    True:对数据进行白化,即对每个特征进行归一化,使得每个特征的方差都为1。在某些应用中,白化可以提高数据的可解释性。
    False(默认值):不进行白化。
  4. svd_solver
    功能:决定使用的SVD(奇异值分解)求解器的类型。
    取值:
    ‘auto’(默认值):根据输入数据的大小和特征数量自动选择最合适的求解器。
    ‘full’:使用传统的SVD方法,适用于较小的数据集。
    ‘arpack’:使用scipy库中的稀疏SVD实现,适用于大型数据集。
    ‘randomized’:使用一种随机算法来加快SVD的计算速度,适用于大型数据集且主成分数目较少的情况。
  5. tol
    功能:决定奇异值分解的收敛容差。
    取值:默认为0.0,表示使用默认的收敛容差。较小的值会产生更精确的结果,但也会增加计算时间。
  6. iterated_power
    功能:决定幂迭代方法的迭代次数。
    取值:默认为’auto’,表示使用一种启发式方法选择迭代次数。通常不需要手动调整这个参数。
  7. random_state
    功能:决定随机数生成器的种子,用于在使用’randomized’求解器时控制随机性。
    取值:
    如果设置为None(默认值),则随机数生成器使用当前系统时间作为种子。
    设置为整数时,将使用该整数作为随机数生成器的种子,以确保结果的可重复性。

二、代码实现

1. 数据预处理

from sklearn.decomposition import PCA
import pandas as pd

data = pd.read_excel('.\hua.xlsx')

# 数据划分
X = data.iloc[:, :-1]
y = data.iloc[:, -1]
  • 使用pandas库的read_excel函数从指定的Excel文件(.\hua.xlsx)中加载数据,并将其存储在DataFrame对象data中。
  • X被设置为data中除最后一列外的所有列,包含特征(自变量)。y被设置为data的最后一列,包含目标变量(因变量)。

2. 主成分分析(PCA)

pca = PCA(n_components=0.90) # 实列化PCA对象
pca.fit(X) #进行训练,不需要传入y

print('特征所占百分比:{}'.format(sum(pca.explained_variance_ratio_)))
print(pca.explained_variance_ratio_)

print('PCA降维后数据:')
new_x = pca.transform(X)
print(new_x) # 数据X在主成分空间中的表示,具体来说,这个方法将数据X从原始特征空间转换到主成分空间

  • 实例化PCA类,其中n_components=0.90表示希望保留原始数据90%的方差。fit方法用于计算数据X的主成分。
  • 打印出通过PCA保留的方差百分比总和以及每个主成分解释的方差百分比。
  • 将原始数据X转换到由PCA找到的主成分构成的新空间中。

3. 数据划分

from  sklearn.model_selection import train_test_split
xtrain,xtest,ytrain,ytest = train_test_split(new_x, y, test_size=0.2, random_state=0)
xtrain1,xtest1,ytrain1,ytest1 = train_test_split(X, y, test_size=0.2, random_state=0)
  • 使用train_test_split函数将数据集分为训练集和测试集。对于降维后的数据new_x和原始数据X,都进行了这样的划分,并使用了相同的随机种子(random_state=0)以确保可重复性。

4. 模型训练与评估

from sklearn.linear_model import LogisticRegression

classifier = LogisticRegression()
classifier1 = LogisticRegression()
classifier.fit(xtrain,ytrain)
classifier1.fit(xtrain1,ytrain1)
# 训练测试集
from sklearn import metrics
train_pred = classifier.predict(xtrain)
print(metrics.classification_report(ytrain, train_pred))

test_pred = classifier.predict(xtest)
print(metrics.classification_report(ytest, test_pred))
print(classifier.score(xtest, ytest))

train1_pred = classifier1.predict(xtrain1)
print(metrics.classification_report(ytrain1, train1_pred))
test1_pred = classifier1.predict(xtest1)
print(metrics.classification_report(ytest1, test1_pred))
print(classifier1.score(xtest1, ytest1))
  • 创建了两个逻辑回归分类器实例,并使用不同的训练数据(降维后的和未降维的)来训练它们。
  • 对于每个模型,都使用训练集进行预测,并计算了训练集上的分类报告和准确率。然后,使用测试集进行预测,并计算了测试集上的分类报告和准确率。

5.全部代码

from sklearn.decomposition import PCA
import pandas as pd

data = pd.read_excel('.\hua.xlsx')

# 数据划分
X = data.iloc[:, :-1]
y = data.iloc[:, -1]

pca = PCA(n_components=0.90) # 实列化PCA对象
pca.fit(X) #进行训练,不需要传入y

print('特征所占百分比:{}'.format(sum(pca.explained_variance_ratio_)))
print(pca.explained_variance_ratio_)

print('PCA降维后数据:')
new_x = pca.transform(X)
print(new_x) # 数据X在主成分空间中的表示,具体来说,这个方法将数据X从原始特征空间转换到主成分空间

from  sklearn.model_selection import train_test_split
xtrain,xtest,ytrain,ytest = train_test_split(new_x, y, test_size=0.2, random_state=0)
xtrain1,xtest1,ytrain1,ytest1 = train_test_split(X, y, test_size=0.2, random_state=0)

# 导入逻辑回归分类器
from sklearn.linear_model import LogisticRegression

classifier = LogisticRegression()
classifier1 = LogisticRegression()
classifier.fit(xtrain,ytrain)
classifier1.fit(xtrain1,ytrain1)

# 训练测试集
from sklearn import metrics
train_pred = classifier.predict(xtrain)
print(metrics.classification_report(ytrain, train_pred))

test_pred = classifier.predict(xtest)
print(metrics.classification_report(ytest, test_pred))
print(classifier.score(xtest, ytest))

train1_pred = classifier1.predict(xtrain1)
print(metrics.classification_report(ytrain1, train1_pred))
test1_pred = classifier1.predict(xtest1)
print(metrics.classification_report(ytest1, test1_pred))
print(classifier1.score(xtest1, ytest1))

代码展示了如何使用PCA进行特征降维,并使用逻辑回归分类器在降维后的数据和原始数据上训练模型。通过比较两个模型在训练集和测试集上的性能,可以评估PCA对模型性能的影响。

三、总结

PCA(Principal Component Analysis,主成分分析)作为一种常用的数据分析技术,在数据降维、特征提取等方面具有显著的优势,但同时也存在一些局限性。以下是PCA的优缺点分析:

1.PCA的优点

  • 数据降维:PCA通过线性变换将原始数据转换为一组新的互相独立的变量,即主成分。这些主成分保留了原始数据中的最大方差,从而在降低数据维度的同时保留了关键信息,有助于数据的可视化、理解和进一步分析。
  • 去除冗余特征:在高维数据中,往往存在高度相关的特征,这些特征不仅增加了计算复杂度,还可能引入噪音。PCA可以自动识别和去除这些冗余特征,简化数据模型,提高分析效率。
  • 去除噪音:PCA在降维的同时,可以通过选择保留高方差的主成分来抑制低方差特征(通常对应噪音或不重要信息)的影响,从而提高数据的信噪比。
  • 数据解释性:PCA生成的主成分虽然是原始特征的线性组合,但它们通常具有更好的解释性,可以揭示数据中的隐藏模式和结构。
  • 计算简便:PCA算法相对简单,计算效率高,适合处理大规模数据集。

2.PCA的缺点

  • 数据信息损失:PCA在降维过程中会丢失一部分原始数据信息,特别是那些方差较小的次要成分。
  • 对异常值敏感:PCA对异常值非常敏感,异常值的存在可能会影响主成分的准确性。
  • 依赖数据的线性关系:PCA基于数据的线性关系进行降维,对于非线性关系的数据,PCA的效果可能不理想。
  • 可解释性差:虽然PCA生成的主成分具有一定的解释性,但它们是原始特征的线性组合,可能不如原始特征直观易懂。

综上所述,PCA作为一种强大的数据分析工具,在数据降维、特征提取等方面具有显著优势,但在使用过程中也需要注意其局限性,并根据具体问题的要求和数据的特点来选择是否使用PCA以及如何使用PCA。

标签:分析,pred,test,成分,print,PCA,数据
From: https://blog.csdn.net/2301_77698138/article/details/141939272

相关文章

  • JSP警校射击训练成绩分析系统b1847--程序+源码+数据库+调试部署+开发环境
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表学生,年级信息,科目信息,训练成绩,通知公告,成绩分析,子弹统计,成绩排名开题报告内容一、选题背景射击训练作为警校教育的重要组成部分,对于提高警员的实战技能......
  • Vue3 中的状态管理:Vuex vs Pinia 深度分析
    Vue3中的状态管理:VuexvsPinia深度分析在现代前端开发中,状态管理是一个至关重要的方面。尤其是在大型应用中,如何高效、清晰地管理状态不仅影响着代码的可读性和可维护性,还对应用的性能有直接的影响。在Vue3中,Vuex和Pinia是两种主要的状态管理库,这两者各有不同的设......
  • 【电子商城系统如何进行需求分析?】
    文章目录前言一、用户需求分析二、功能性需求三、性能需求分析四、系统可维护性和扩展性需求五、用户体验和界面设计需求总结前言电子商城系统进行需求分析时,应当从多个维度全面考虑其功能、性能和用户需求等方面。在进行电子商城系统的需求分析时,需要确保每一步都......
  • 2024高教社杯数学建模国赛ABCDE题选题建议+初步分析
    提示:DSC君认为的难度:C<B<A,开放度:A<C<B。D、E题推荐选E题,后续会直接更新E论文和思路,不在这里进行选题分析,以下为A、B、C题选题建议及初步分析A题:“板凳龙”闹元宵A题是数模类赛事很常见的物理类赛题,需要学习不少相关知识。此题涉及对一个动态系统的建模,模拟一支舞龙队伍在......
  • 基于AI+多技术融合在流域生态系统服务评价、水文水生态分析、碳收支、气候变化影响、
    流域生态系统服务在环境保护与资源管理中具有不可替代的重要性。随着全球气候变化和人类活动对自然环境的压力日益增大,流域生态系统的稳定性和健康状况面临严峻挑战。水资源短缺、洪水频发、水质污染、生物多样性减少等问题,正在威胁流域内及其下游区域的人类社会福祉。因此,对流......
  • 使用 MySQL 创建直方图:数据分析与可视化技巧,mysql创建视图表
    在数据分析和可视化过程中,直方图是一种常见的工具,用来显示数据的分布情况。使用MySQL创建直方图,可以帮助我们快速理解数据的整体趋势和分布特征。本文将介绍如何使用MySQL来创建直方图,并结合数据分析与可视化的技巧,让数据分析更加直观易懂。什么是直方图?直方图是一种用于展......
  • 综合安防管理平台LntonAIServer视频分析平台:抖动检测算法
    在现代视频监控系统中,视频质量的好坏直接影响到监控效果和系统的可靠性。LntonAIServer通过新增的视频质量诊断功能,特别是抖动检测功能,进一步提升了视频监控系统的稳定性和用户体验。抖动检测旨在识别视频画面中是否存在不稳定或频繁晃动的情况。这种情况可能是由于摄像机安装不稳......
  • 烟雾报警器可以节能与守护并存吗?| 合宙功耗分析仪Air9000P实测
    有多少人跟我一样,每次抬头看到天花板上那个长年累月默默站岗的烟雾报警器,总会想:它真的在工作吗?电量到底能撑多久呢?不如,动手测一测功耗!烟雾报警器通过内置的传感器实时感知环境中的烟雾浓度。当烟雾浓度超过预设阈值时,报警器会立即触发警报,发出高分贝的声音和闪光,以吸引人们的注意力......
  • 利用数据分析提升SEO排名的7种方法
    我们都听过“大数据分析”这个词。科技让我们能够清晰地了解我们的活动和内容的表现——向我们提供了关于受众的宝贵信息,甚至可以精确到他们在Google和其他搜索引擎上使用的具体搜索词。你已经在你的业务中使用数据分析了吗?如果是,你有利用它来改进你的SEO策略以获得更好的排名......
  • 案例分析:池化对象的应用场景13
    在我们平常的编码中,通常会将一些对象保存起来,这主要考虑的是对象的创建成本。比如像线程资源、数据库连接资源或者TCP连接等,这类对象的初始化通常要花费比较长的时间,如果频繁地申请和销毁,就会耗费大量的系统资源,造成不必要的性能损失。并且这些对象都有一个显著的特征,就是通......