首页 > 其他分享 >PCA 降维分析

PCA 降维分析

时间:2023-10-18 21:14:25浏览次数:47  
标签:分析 PCA features explained 降维 np variance pca data

数据来源:

这篇博客中借用下,百度云网页端居然可以直接下载文件了,稀奇

数据已经分享在百度云:客户年消费数据
密码:lehv
该份数据中包含客户id和客户6种商品的年消费额,共有440个样本

分析过程:

用python和R做个简单的PCA分析,顺便比较下结果是不是一致

numpy计算结果:
import numpy as np
import pandas as pd
data=pd.read_excel("客户年消费数据.xlsx")
data.head()

看一眼数据前几行:
image

#缺失检查
print(data.isnull().sum())

features = data[['Fresh', 'Milk', 'Grocery', 'Frozen', 'Detergents_Paper', 'Delicatessen']]
# 计算每一列的平均值及标准差
meandata = np.mean(features, axis=0) 
stddata = np.std(features, axis=0)
# 均值归一化
features = (features - meandata) / stddata    

# 求协方差矩阵
cov = np.cov(features.transpose()) # np.cov(features.T)

# 求解特征值和特征向量
eigVals, eigVectors = np.linalg.eig(cov) 
print('前两个主成分包含的信息百分比:{:.2%}'.format(np.sum(eigVals[:2])/np.sum(eigVals)))

# 选择前两个特征向量数据用于作图
pca_mat = eigVectors[:,:2]
pca_data = np.dot(features , pca_mat)
pca_data = pd.DataFrame(pca_data, columns=['pca1', 'pca2'])

结果:前两个主成分包含的信息百分比:72.46%

scikit-learn计算结果:
from sklearn.decomposition import PCA
from sklearn.preprocessing import StandardScaler
import pandas as pd

# 读取数据
data=pd.read_excel("客户年消费数据.xlsx")
features = data[['Fresh', 'Milk', 'Grocery', 'Frozen', 'Detergents_Paper', 'Delicatessen']]

# 数据标准化
scaler = StandardScaler()
features_std = scaler.fit_transform(features)
# PCA计算
pca = PCA()
pca.fit(features_std)

# 获取主成分
principal_components = pca.transform(features_std)

# 创建一个新的数据框来存储主成分
principal_df = pd.DataFrame(data=principal_components, columns=['PC1', 'PC2', 'PC3', 'PC4','PC5','PC6'])

# 输出主成分的方差解释比例
explained_variance_ratio = pca.explained_variance_ratio_
print("主成分的方差解释比例:", explained_variance_ratio)

# 输出特征向量的解释方差
explained_variance = pca.explained_variance_
print("特征向量的解释方差:", explained_variance)

# 输出特征向量的累计方差解释比例
cumulative_explained_variance_ratio = np.cumsum(explained_variance_ratio)
print("特征向量的累计方差解释比例:", cumulative_explained_variance_ratio)

结果:
可以看到和numpy计算结果一样的,前两个PC解释率都是72.46%
image

R语言计算结果:
library(openxlsx)
data<-read.xlsx("客户年消费数据.xlsx")

# 去掉ID列 
df<-data[,-1]

# 数据归一化
df_scale<-scale(df)
# 计算协方差矩阵
df_cov<-cov(df_scale)

# 计算特征值和特征向量
value<-eigen(cor(df_scale))$value
#vec<-value<-eigen(cor(df_scale))$vectors

# 主成分方差解释比例
ratio<-value/sum(value)

ratio结果: 0.44082893 0.28376400 0.12334413 0.09395504 0.04761272 0.01049519

# 累计解释率
cumsum(ratio)
累计解释率:0.4408289 0.7245929 0.8479371 0.9418921 0.9895048 1.0000000

输出结果和python结果一致

标签:分析,PCA,features,explained,降维,np,variance,pca,data
From: https://www.cnblogs.com/mmtinfo/p/17773249.html

相关文章

  • LLVM IR代码生成codegen分析
    LLVMIR代码生成codegen分析常用指令1.从源码生成.llclangmain.c-emit-llvm-S-c-omain.ll2.运行.llllimain.ll3.编译汇编llcmain.ll4.生成dot,得到可视化的DAGllc-view-dag-combine1-dagsmain.ll5.将源文件分别编译为LLVM二进制代码clang-emit-llvm-cmai......
  • R语言随机森林RandomForest、逻辑回归Logisitc预测心脏病数据和可视化分析|附代码数据
    全文链接:http://tecdat.cn/?p=22596最近我们被客户要求撰写关于预测心脏病的研究报告,包括一些图形和统计输出。本报告是对心脏研究的机器学习/数据科学调查分析。更具体地说,我们的目标是在心脏研究的数据集上建立一些预测模型,并建立探索性和建模方法。但什么是心脏研究?研究大纲......
  • Python自激励阈值自回归(SETAR)、ARMA、BDS检验、预测分析太阳黑子时间序列数据
    全文链接:https://tecdat.cn/?p=33896原文出处:拓端数据部落公众号这篇文章展示了自激励阈值自回归SETAR的使用,用于分析经常被客户研究的太阳黑子数据集。具体而言,研究SETAR模型的估计和预测。我们在这里考虑原始的太阳黑子序列以匹配ARMA示例,尽管文献中许多来源在建模之前对序......
  • R语言时变向量自回归(TV-VAR)模型分析时间序列和可视化|附代码数据
    全文链接:http://tecdat.cn/?p=22350 最近我们被客户要求撰写关于时变向量自回归(TV-VAR)模型的研究报告,包括一些图形和统计输出。在心理学研究中,个人主体的模型正变得越来越流行。原因之一是很难从人之间的数据推断出个人过程另一个原因是,由于移动设备无处不在,从个人获得的时间......
  • 最详细的 T Test 方差分析结果解读
    PValue:P值(Pvalue)是在假设检验中一个非常关键的概念。它提供了一个量化的方法来评估观察到的数据与零假设(nullhypothesis)下期望的数据之间的差异。具体来说,P值是在零假设为真的条件下,观察到当前统计量或更极端统计量的概率。以下是关于P值的更详细解释:定义:P值是给定零假设......
  • SqlServer的执行计划如何分析?
    sqlserver的执行计划执行计划是SQLServer中的一个重要工具,用于分析和优化查询的性能。它提供了关于查询的详细信息,包括查询的执行顺序、使用的索引、连接类型、过滤条件等。What(什么):执行计划显示了查询的执行计划,即查询的逻辑操作和物理操作。它告诉你查询是如何执行的,包......
  • 26-Vue脚手架-分析脚手架
    将 24-Vue组件化编程-单文件组件 放到使用Vue脚手架创建的vue_test项目中 脚手架文件结构├──node_modules├──public│├──favicon.ico:页签图标│└──index.html:主页面├──src│├──assets:存放静态资源......
  • wireshark分析https报文
    使用wireshark分析http报文是一件愉悦的事情,在wireshark不断滚动的窗口中,http服务的交互报文在我们面前一览无余,简单的过滤及追踪命令即可获取到特定请求的完整收发流程,然而,到https这里,事情就变得复杂起来。协议复杂http简单报文下图是一个wireshark抓获的http报文:这时一个......
  • 【玩转Python系列】【小白必看】使用Python爬取双色球历史数据并可视化分析
    前言本文介绍了如何使用Python编程语言获取双色球历史数据,并使用数据可视化工具Matplotlib绘制了红球数量的折线图。通过对双色球历史数据的分析,我们可以更好地了解双色球的开奖规律和趋势。导入库importrequestsfromlxmlimportetreeimportcsvimportmatplotlib.pypl......
  • 山西汾酒分析
    山西汾酒交易记录及分析买入时间点:2023-09-28清仓时间点:2023-10-161.2023-09-28买入分析1.1基于五浪分析2023-09-28感觉走到了4浪底部,感觉会即将走五浪1.2基于boll通道来看,到轨道下沿了boll口收紧,会有大概率向中轨反弹,当做震荡行情来做2.2023-10-16清仓分析2.1基......