python实现主成分估计

2023-11-17

什么是PCA

主成分分析的主要目的是希望用较少的变量去解释原来资料中的大部分变异,将我们手中许多相关性很高的变量转化成彼此相互独立或不相关的变量。通常是选出比原始变量个数少,能解释大部分资料中的变异的几个新变量,即所谓主成分,并用以解释资料的综合性指标。由此可见,主成分分析实际上是一种降维方法。

数据

在这里插入图片描述

代码

import statsmodels.api as sm
from sklearn.decomposition import PCA
import pandas as pd
import numpy as np

查看相关系数阵

data = pd.read_excel("数据地址")
x = data.iloc[:,1:5]
cor = x.corr()
print(cor)

请添加图片描述

cor = np.array(cor)
w,v = np.linalg.eig(cor)
print(w)  ###  相关系数阵的特征值
print(v)  ###  对应的特征向量

在这里插入图片描述
可以看出最后一个特征值接近于零,前三个特征值之和所占比例(累积贡献率)达到0.999594。

对数据直接作线性回归得经验回归方程

X = sm.add_constant(x)
y = data.iloc[:,5]
est = sm.OLS(y,X).fit()
print(est.summary())

在这里插入图片描述

相关参数解析在前面看查看前面博客
https://blog.csdn.net/chenlei456/article/details/123508900
所以我们得出来得回归方程为:
在这里插入图片描述

est.predict(X)

用所得方程对数据进行预测

对数据使用PCA

x = data.iloc[:,1:5]
pca = PCA(n_components=4) ### 依然保留4个成分,不降维
pca.fit(x) ### pca训练
x_train = pca.transform(x) ### 对预测数据转换

用转换的数据得出主成分回归方程

X_train = sm.add_constant(x_train)
y = data.iloc[:,5]
est2 = sm.OLS(y,X_train).fit()
print(est2.summary())

在这里插入图片描述
所以我们得出来得回归方程为:
在这里插入图片描述

est2.predict(X)

用所得方程对数据进行预测

差异

两个方程的区别在于后者具有更小的均方误差,因而更稳定。通过P值可发现前者所有系数都无法通过显著性检验。

完整代码

import statsmodels.api as sm
from sklearn.decomposition import PCA
import pandas as pd
import numpy as np

data = pd.read_excel("数据地址")
x = data.iloc[:,1:5]
y = data.iloc[:,5]

cor = x.corr()
cor = np.array(cor)
w,v = np.linalg.eig(cor)

X = sm.add_constant(x)
est = sm.OLS(y,X).fit()


pca = PCA(n_components=4)
pca.fit(x)
x_train = pca.transform(x)
X_train = sm.add_constant(x_train)
est2 = sm.OLS(y,X_train).fit()

print(w)  ###  相关系数阵的特征值
print(v)  ###  对应的特征向量
print(est.summary())
print(est2.summary())
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

python实现主成分估计 的相关文章

  • 如何计算 pandas datetime 对象的均值和方差?

    如何计算 YYYY MM DD 形式的 python 日期时间对象的汇总统计数据 均值和标准差 我想对具有不同 ID 的不同日期时间对象组执行此操作 数据如下 import datetime as dt df pd DataFrame Da
  • Pandas set_levels,如何避免标签排序?

    我使用时遇到问题set levels多索引 from io import StringIO txt Name Height Age Metres A 1 25 B 95 1 df pd read csv StringIO txt heade
  • Python 类型提示 Dict 语法错误 可变默认值是不允许的。使用“默认工厂”

    我不知道为什么解释器会抱怨这个类型的字典 对于这两个实例 我得到一个 不允许可变默认值 使用默认工厂 语法错误 我使用的是 python 3 7 3 from dataclasses import dataclass from typing
  • Gunicorn 工作人员无论如何都会超时

    我正在尝试通过gunicorn运行一个简单的烧瓶应用程序 但是无论我做什么 我的工作人员都会超时 无论是否有针对应用程序的活动 工作人员在我设置任何内容后总是会超时timeout值到 是什么导致它们超时 当我发出请求时 请求成功通过 但工作
  • 为什么 dataclasses.astuple 返回类属性的深层副本?

    在下面的代码中astuple函数正在执行数据类的类属性的深层复制 为什么它不能产生与函数相同的结果my tuple import copy import dataclasses dataclasses dataclass class Dem
  • 多输出堆叠回归器

    一次性问题 我正在尝试构建一个多输入堆叠回归器 添加到 sklearn 0 22 据我了解 我必须结合StackingRegressor and MultiOutputRegressor 经过多次尝试 这似乎是正确的顺序 import nu
  • NLTK 2.0分类器批量分类器方法

    当我运行此代码时 它会抛出一个错误 我认为这是由于 NLTK 3 0 中不存在batch classify 方法 我很好奇如何解决旧版本中的某些内容在新版本中消失的此类问题 def accuracy classifier gold resu
  • VSCode Settings.json 丢失

    我正在遵循教程 并尝试将 vscode 指向我为 Scrapy 设置的虚拟工作区 但是当我在 VSCode 中打开设置时 工作区设置 选项卡不在 用户设置 选项卡旁边 我还尝试通过以下方式手动转到文件 APPDATA Code User s
  • 使用主题交换运行多个 Celery 任务

    我正在用 Celery 替换一些自制代码 但很难复制当前的行为 我期望的行为如下 创建新用户时 应向tasks与交换user created路由键 该消息应该触发两个 Celery 任务 即send user activate email
  • Pycharm 在 os.path 连接上出现“未解析的引用”

    将pycharm升级到2018 1 并将python升级到3 6 5后 pycharm报告 未解析的引用 join 最新版本的 pycharm 不会显示以下行的任何警告 from os path import join expanduser
  • 矩形函数的数值傅里叶变换

    本文的目的是通过一个众所周知的分析傅里叶变换示例来正确理解 Python 或 Matlab 上的数值傅里叶变换 为此 我选择矩形函数 这里报告了它的解析表达式及其傅立叶变换https en wikipedia org wiki Rectan
  • 为什么一旦我离开内置的运行服务器,Django 就无法找到我的管理媒体文件?

    当我使用内置的简单服务器时 一切正常 管理界面很漂亮 python manage py runserver 但是 当我尝试使用 wsgi 服务器为我的应用程序提供服务时django core handlers wsgi WSGIHandle
  • Django 视图中的“请求”是什么

    在 Django 第一个应用程序的 Django 教程中 我们有 from django http import HttpResponse def index request return HttpResponse Hello world
  • 尽管我已在 python ctypes 中设置了信号处理程序,但并未调用它

    我尝试过使用 sigaction 和 ctypes 设置信号处理程序 我知道它可以与python中的信号模块一起使用 但我想尝试学习 当我向该进程发送 SIGTERM 时 但它没有调用我设置的处理程序 只打印 终止 为什么它不调用处理程序
  • Pandas 组合不同索引的数据帧

    我有两个数据框df 1 and df 2具有不同的索引和列 但是 有一些索引和列重叠 我创建了一个数据框df索引和列的并集 因此不存在重复的索引或列 我想填写数据框df通过以下方式 for x in df index for y in df
  • 将 Matlab 的 datenum 格式转换为 Python

    我刚刚开始从 Matlab 迁移到 Python 2 7 在读取 mat 文件时遇到一些问题 时间信息以 Matlab 的日期数字格式存储 对于那些不熟悉它的人 日期序列号将日历日期表示为自固定基准日期以来已经过去的天数 在 MATLAB
  • Firebase Firestore:获取文档的生成 ID (Python)

    我可以创建一个新文档 带有自动生成的 ID 并存储对其的引用 如下所示 my data key value doc ref db collection u campaigns add my data 我可以像这样访问数据本身 print d
  • 如何使用 Boto3 启动具有 IAM 角色的 EC2 实例?

    我无法弄清楚如何使用指定的 IAM 角色在 Boto3 中启动 EC2 实例 以下是迄今为止我如何成功创建实例的一些示例代码 import boto3 ec2 boto3 resource ec2 region name us west 2
  • 根据 Pandas 中的列表选择数据框行的子集

    我有一个数据框df1并列出x In 22 import pandas as pd In 23 df1 pd DataFrame C range 5 B range 10 20 2 A list abcde In 24 df1 Out 24
  • 如何将Python3设置为Mac上的默认Python版本?

    有没有办法将 Python 3 8 3 设置为 macOS Catalina 版本 10 15 2 上的默认 Python 版本 我已经完成的步骤 看看它安装在哪里 ls l usr local bin python 我得到的输出是这样的

随机推荐

  • java多线程中synchronized同步代码块执行问题

    在高洪岩老师的 java多线程编程核心技术 一书的用同步代码块解决同步方法的弊端一节中 p76页 有这样一句话 当一个线程访问object的一个synchronized同步代码块时 另一个线程依然可以访问该object对象中的非synchr
  • Flash存储芯片:NOR Flash、NAND Flash、UFS和eMMC的比较与解析

    前言 在数字化时代的今天 数据的存储和管理变得越来越重要 各种各样的存储技术应运而生 以满足不同的使用场景和需求 其中 Flash存储芯片以其非易失性 可擦写性和可编程性等优势 占据了重要地位 本博客将详细介绍Flash存储芯片中的NOR
  • js屏蔽鼠标右键菜单&键盘ctrl+c,ctrl+v等

    文章目录 前言 一 效果展示 二 源代码 总结 前言 js屏蔽鼠标右键菜单以及屏蔽键盘ctrl c ctrl v ctrl a ctrl s ctrl p 一 效果展示 二 源代码
  • 数仓知识07:数据增量更新的几种方式

    1 增量更新的几种方式 增量更新的本质 其实是获取源表中数据变化的情况 增 删 改 然后将源表中发生的变化同步至目标表中 不同的方式 获取源表中数据变化的情况不一样 受技术的限制 表结构的限制 某些方式可能无法获取到完整的数据变化情况 因此
  • 后端返回分页数据过滤不需要的字段,先将不需要的属性置为null

    IPage
  • 腾讯mini项目-【指标监控服务重构】2023-07-23

    今日已办 组会记录 进度以及问题 otelzap 上报 Log 附属在 span 的 event 中 可以去查看具体的日志信息 如 trace id span id 日志级别等 还可以自定义属性 详细可见 https sztubdi cod
  • 微软云计算操作系统Windows Azure 平台——云+端全面攻略

    微软云计算操作系统Windows Azure 平台 云 端全面攻略 Windows Azure Platform 开发入门 在云计算时代 有三个平台非常重要 即开发平台 部署平台和运营平台 Windows Azure Platform是微软
  • I2S与pcm的区别

    I2S仅仅是PCM的一个分支 接口定义都是一样的 I2S的采样频率一般为44 1KHZ和48KHZ做 PCM采样频率一般为8K 16K 有四组信号 位时钟信号 同步信号 数据输入 数据输出 I2S总线标准 I2S Inter IC Soun
  • python 调用C DLL库 传参(传递数字、字符串、数组(一维、二维)、结构体)

    usr bin env python conding utf 8 from itertools import filterfalse import PySimpleGUI as sg from ctypes import cdll from
  • 如何将tomcat的http访问,改为https方式访问

    在执行以下操作的时候 需要先了解一个证书生成工具 keytool 他是jdk自带的证书管理工具 在jdk bin目录下 可以用来生成自签名证书 导入导出证书 打印证书信息等 整个过程分为两部分 第一部分是证书的生成 第二部分是修改tomca
  • C语言 五子棋游戏(也可n子棋)

    目录 1 创造棋盘 2 玩家下棋 3 电脑下棋 4 判断输赢 赢的判断 也是最难的 行的判断 列的判断 主副对角线的判断 花费时间最长 平局或者继续 最后判断的全部代码 三个文件的代码 头文件的引用及函数的声明 测试部分 函数的实现 一个文
  • 系统架构师—软件架构设计(一)概述、构建、视图、基本架构风格

    1 软件架构概述 从需求分析到软件设计之间的过渡过程称为软件架构 只要软件架构设计好了 整个软件就不会出现坍塌性的错误 即不会崩溃 架构设计就是需求分配 将满足需求的职责分配到组件上 软件架构为软件系统提供了一个结构 行为和属性的高级抽象
  • 【机器学习】python使用支持向量机SVM

    机器学习 python使用支持向量机SVM 准备 数据集 导入SVM模块 步骤 1 读取数据集 2 划分训练样本与测试样本 3 训练SVM分类器 4 计算分类准确率 5 绘制图像 关于SVM的原理知识 在 机器学习 支持向量机中讲过 欲知详
  • 最近火出圈的GPT-4 技术Report出来了,快进来看看逐文对照翻译!

    近期OpenAI发布的GPT 4的效果好得让人惊艳 碾压了之前火到出圈的ChatGPT 通过同步发布的GPT 4 Technical Report一同看看到底发生了什么 No 0 摘要 We report the development o
  • 微服务网关 —— SpringCloud Gateway

    Gateway 简介 Spring Cloud Gateway 基于 Spring 5 Spring Boot 2 和 Project Reactor 等技术 是在 Spring 生态系统之上构建的 API 网关服务 Gateway 旨在提
  • 剑指offer 06 从尾到头打印链表

    题目 从尾到头打印链表 输入一个链表的头节点 从尾到头反过来返回每个节点的值 用数组返回 示例 输入 head 1 3 2 输出 2 3 1 题解一 栈 解法 遍历链表 将所有遍历到的值压入栈中 再利用栈 后进先出 的特性 从尾到头打印链表
  • STM32 进阶教程 1 - micropython 移植

    前言 Python是一种解释型 面向对象 动态数据类型的高级程序设计语言 Python 是一个高层次的结合了解释性 编译性 互动性和面向对象的脚本语言 具有如下特点 1 易于学习 Python有相对较少的关键字 结构简单 和一个明确定义的语
  • ChatGPT Prompting开发实战(五)

    一 如何编写有效的prompt 对于大语言模型来说 编写出有效的prompt能够帮助模型更好地理解用户的意图 intents 生成针对用户提问来说是有效的答案 避免用户与模型之间来来回回对话多次但是用户不能从LLM那里得到有意义的反馈 本文
  • outbound和inbound关系

    Inbound PCI域訪问存储器域 Outbound 存储器域訪问PCI域 RC訪问EP RC存储器域 gt outbound gt RC PCI域 gt EP PCI域 gt inbound gt EP存储器域 EP訪问RC EP存储器
  • python实现主成分估计

    什么是PCA 主成分分析的主要目的是希望用较少的变量去解释原来资料中的大部分变异 将我们手中许多相关性很高的变量转化成彼此相互独立或不相关的变量 通常是选出比原始变量个数少 能解释大部分资料中的变异的几个新变量 即所谓主成分 并用以解释资料