特征工程:特征提取和降维-上

目录


一、前言

二、正文

Ⅰ.主成分分析

Ⅱ.核主成分分析

三、结语


一、前言

 

前面介绍的特征选择方法获得的特征,是从原始数据中抽取出来的,并没有对数据进行变换。而特征提取和降维,则是对原始数据的特征进行相应的数据变换,并且通常会选择比原始特征数量少的特征,同时达到数据降维的目的。常用的数据特征提取和降维的方法有主成分分析,核成分分析,流行学习,t-SNE,多维尺度分析等方法。

二、正文

 

from sklearn.decomposition import PCA,KernelPCA
from sklearn.manifold import Isomap,MDS,TSNE
from sklearn.preprocessing import StandardScaler
from sklearn.datasets import load_wine
wine_x,wine_y=load_wine(return_X_y=True)
wine_x=StandardScaler().fit_transform(wine_x)

在介绍特征提取和降维的方法之前,我们先导包读取相应的数据。 通过标准化进行数据特征变换的处理。

Ⅰ.主成分分析

 

pca=PCA(n_components=13,random_state=123)
pca.fit(wine_x)
exvar=pca.explained_variance_
plt.figure(figsize=(10,6))
plt.plot(exvar,'r-o')
plt.hlines(y=1,xmin=0,xmax=12)
plt.xlabel('number')
plt.ylabel('PCA')
plt.show()

 

主成分分析法(Principal Component Analysis,PCA)是采用一种数学降维的方法,在损失很少信息的前提下,找出几个综合变量为主成分,来代替原来众多的变量,使这些主成分尽可能地代表原始数据的信息,其中每个主成分都是原始变量的线性组合,而且各个主成分之间不相关(即线性无关)。通过主成分分析,我们可以从事物错综复杂的关系中找到一些主要成分(通常选择累积 贡献率≥85%的前m个主成分),从而能够有效利用大量统计信息进行定性分析,揭示变量之间的内在关系,得要一些事物特征及其发展规律的深层次信息和启发,推动研究进一步深入。通常使用主成分个数远小于原始特征个数,使用起到特征提取和降维的目的。 

 

 

 从结果分析,使用数据的前三个主成分即可对其进行良好的数据建模。

 

pca_wine_x=pca.transform(wine_x)[:,0:3]
print(pca_wine_x.shape)
#输出结果
(178,3)

 

如上我们可以知道,前三个主成分可对其数据建模,于是我们pca进行数据变换之后对其进行切片,前三列的数据。 

 

colors=['red','blue','green']
shape=['o','s','*']
fig=plt.figure(figsize=(10,6))
ax1=fig.add_subplot(111,projection='3d')
for ii,y in enumerate(wine_y):ax1.scatter(pca_wine_x[ii,0],pca_wine_x[ii,1],pca_wine_x[ii,2],s=40,c=colors[y],marker=shape[y])ax1.set_xlabel('pca1',rotation=20)
ax1.set_ylabel('pca2',rotation=20)
ax1.set_zlabel('pca3',rotation=20)
ax1.azim=225
ax1.set_title('pca')
plt.show()

 

先将三种成分分别的颜色和标记封装在列表当中,然后设置窗口, 111是设置位置即第一行第一列的第一个格子,则会也就意味着这里只有一个图,projection(映射)参数设置为3d,然后将前三个主成分通过循环在三维空间画出其数据分布。

 

 

 

这样我们就能区分出三个主成分的数据分布情况,即不同类别的分布情况。 

 

Ⅱ.核主成分分析

 

PCA是线性的数据降维技术,而核主成分分析则是针对非线性的数据表示,对其进行特征提取并数据降维。

 

kpca=KernelPCA(n_components=13,kernel='rbf',gamma=0.2,random_state=123)
kpca.fit(wine_x)
eigenvalues=kpca.eigenvalues_
plt.figure(figsize=(10,6))
plt.plot(eigenvalues,'r-o')
plt.hlines(y=4,xmin=0,xmax=12)
plt.xlabel('number')
plt.ylabel('KernelPCA')
plt.show()

 

方法与主成分分析大差不大,但是这里注意一个KernelPCA类中的一个属性:

eigenvalues_:Eigenvalues of the centered kernel matrix in decreasing order. If n_components and remove_zero_eig are not set, then all values are stored.

翻译过来就是:中心核向量的特征值按照降序排序,如果未设置n_components和remove_zero_eig,则存储所有值。

原本这个属性叫做lambdas_,但是被更改为eigenvalues_(特征值)。

 

 

同样针对前三个核主成分,可以在三维空间将数据分布进行可视化。

kpca_wine_x=kpca.transform(wine_x)[:,0:3]
print(kpca_wine_x.shape)
colors=['red','blue','green']
shape=['o','s','*']
fig=plt.figure(figsize=(10,6))
ax1=fig.add_subplot(111,projection='3d')
for ii,y in enumerate(wine_y):ax1.scatter(kpca_wine_x[ii,0],kpca_wine_x[ii,1],kpca_wine_x[ii,2],s=40,c=colors[y],marker=shape[y])ax1.set_xlabel('kpca1',rotation=20)
ax1.set_ylabel('kpca2',rotation=20)
ax1.set_zlabel('kpca3',rotation=20)
ax1.azim=225
ax1.set_title('kpca')
plt.show()

 

 做法跟主成分大差不差,利用散点在空间中的分布来发现其中的数据分布情况。

 

 

可以看出核主成分分析与主成分分析之间的主成分核成分之间的数据分布情况大有不同。

 

三、结语

 

 上篇我们先从线性与非线性入手,希望能对你提供帮助,点赞收藏以备不时之需,关注我,有关新的数据分析的文章第一时间告知于你

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/674377.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Rust开发WASM,WASM Runtime运行

安装wasm runtime curl https://wasmtime.dev/install.sh -sSf | bash 查看wasmtime的安装路径 安装target rustup target add wasm32-wasi 创建测试工程 cargo new wasm_wasi_demo 编译工程 cargo build --target wasm32-wasi 运行 wasmtime ./target/wasm32-wasi/d…

猫头虎分享已解决Bug ‍ || TypeError: Object of type ‘int64‘ is not JSON serializable

博主猫头虎的技术世界 🌟 欢迎来到猫头虎的博客 — 探索技术的无限可能! 专栏链接: 🔗 精选专栏: 《面试题大全》 — 面试准备的宝典!《IDEA开发秘籍》 — 提升你的IDEA技能!《100天精通鸿蒙》 …

Appium使用初体验之参数配置,简单能够运行起来

一、服务器配置 Appium Server配置与Appium Server GUI(可视化客户端)中的配置对应,尤其是二者如果不在同一台机器上,那么就需要配置Appium Server GUI所在机器的IP(Appium Server GUI的HOST也需要配置本机IP&#xf…

spring boot和spring cloud项目中配置文件application和bootstrap加载顺序

在前面的文章基础上 https://blog.csdn.net/zlpzlpzyd/article/details/136060312 日志配置 logback-spring.xml <?xml version"1.0" encoding"UTF-8"?> <configuration scan"true" scanPeriod"10000000 seconds" debug…

搭建kafka测试环境

搭建kafka测试环境 启动zookeeper docker pull bitnami/zookeeperdocker run -d --name zookeeper \-e ALLOW_ANONYMOUS_LOGINyes \bitnami/zookeeper:latest启动kafka 创建网络与连接 docker network create kafka-network docker network connect kafka-network zookeepe…

【小程序】基础API之系统API接口汇总

ty.env 环境变量 属性 USER_DATA_PATH string 文件系统中的用户目录路径 (本地路径)&#xff0c;当操作文件时需使用此目录。 // 写入一个文件 const fileManager await ty.getFileSystemManager(); const fileRoot ty.env.USER_DATA_PATH; const filePath ${fileRoot}…

探索C语言中的联合体与枚举:数据多面手的完美组合!

​ ✨✨ 欢迎大家来到贝蒂大讲堂✨✨ &#x1f388;&#x1f388;养成好习惯&#xff0c;先赞后看哦~&#x1f388;&#x1f388; 所属专栏&#xff1a;C语言学习 贝蒂的主页&#xff1a;Betty‘s blog 1. 联合体的定义 联合体又叫共用体&#xff0c;它是一种特殊的数据类型&…

2024智慧城市新纪元:引领未来,重塑都市生活

随着科技的飞速发展和数字化转型的不断深入&#xff0c;2024年智慧城市领域迎来了全新的发展格局。 这一年&#xff0c;智慧城市的建设更加注重人性化、可持续性和创新性&#xff0c;为城市居民带来了前所未有的便捷与舒适。以下将重点关注智慧城市的几个核心内容&#xff0c;…

《幻兽帕鲁》攻略:0基础入门及游戏基础操作 幻兽帕鲁基础设施 幻兽帕鲁基础攻击力 Mac苹果电脑玩幻兽帕鲁 幻兽帕鲁加班加点

今天就跟大家聊聊《幻兽帕鲁》攻略&#xff1a;0基础入门及游戏基础操作。 如果想在苹果电脑玩《幻兽帕鲁》记得安装CrossOver哦。 以下纯干货&#xff1a; CrossOver正版安装包&#xff08;免费试用&#xff09;&#xff1a;https://souurl.cn/Y1gDao 一、基础操作 二、界面…

Logback - 日志框架

引言 在当今的企业级应用开发中&#xff0c;日志管理是一个不可或缺的部分。它不仅帮助我们进行错误跟踪&#xff0c;还能有效监控应用程序的运行状态&#xff0c;为性能优化提供数据支撑。Spring Boot作为一个简化Spring应用开发的框架&#xff0c;自带了强大的日志管理功能。…

雾计算:去中心化计算的未来之旅

雾计算是去中心化计算的基石&#xff0c;它将重塑我们的数字格局。通过使计算和存储更接近数据源&#xff0c;它改变了我们处理物联网生成数据的方式。通过雾计算探索未来&#xff0c;揭示了减少延迟、增强隐私和高效网络利用等好处。 随着传感器和可穿戴设备等物联网设备的数…

【jQuery——详细讲解】

jQuery讲解 jQuery介绍 jQuery介绍 jQuery是一个快速、小巧且功能丰富的JavaScript库&#xff0c;它使得HTML文档遍历和操作、事件处理、动画和Ajax操作变得更简单&#xff0c;都是通过一个简洁的API来实现的&#xff0c;这个API在多种浏览器上都能正常工作。它的口号是“writ…

Unity UGUI实现点击事件穿透

代码很简单如下 将此代码挂载到上层节点上即可 using System.Collections.Generic; using UnityEngine; using UnityEngine.EventSystems;public class ClickEventPenetration : MonoBehaviour, IPointerClickHandler {public void OnPointerClick(PointerEventData eventData…

PCIe学习笔记(1)Hot-Plug机制

文章目录 Hot-Plug InitHot Add FlowSurprise Remove FlowNPEM Flow Hot-Plug Init PCIe hot-plug是一种支持在不关机情况下从支持的插槽添加或删除设备的功能&#xff0c;PCIe架构定义了一些寄存器以支持原生热插拔。相关寄存器主要分布在Device Capabilities, Slot Capabili…

网站被攻击有什么办法呢?

最近&#xff0c;德迅云安全遇到不少网站用户遇到攻击问题&#xff0c;来咨询安全解决方案。目前在所有的网络攻击方式中&#xff0c;DDoS是最常见&#xff0c;也是最高频的攻击方式之一。不少用户网站上线后&#xff0c;经常会遭受到攻击的困扰。有些攻击持续时间比较短影响较…

MCU+SFU视频会议一体化,视频监控,指挥调度(AR远程协助)媒体中心解决方案。

视频互动应用已经是政务和协同办公必备系统&#xff0c;早期的分模块&#xff0c;分散的视频应该不能满足业务需要&#xff0c;需要把视频监控&#xff0c;会议&#xff0c;录存一体把视频资源整合起来&#xff0c;根据客户需求&#xff0c;需要能够多方视频互动&#xff0c;直…

cmake安装LAMMPS增加MOLECULE等package

使用cmake可以较make更加快捷的安装LAMMPS,关于官网上已有Cmake安装的详细教程&#xff1a; https://docs.lammps.org/Build_cmake.html 可是经过使用&#xff0c;发现默认的安装方式里只有最基础的包&#xff0c;甚至没有MOLECULE包 因此为了使用cmake来增加想要安装的包&a…

代码随想录算法训练营第29天|491.递增子序列 * * 46.全排列 * 47.全排列 II

文章目录 491.递增子序列思路&#xff1a;代码 思路&#xff1a;优化代码&#xff1a; 46.全排列思路代码一&#xff1a;使用used数组代码二&#xff1a;使用path判断元素 47.全排列 II思路一&#xff1a;层节点和路径都是用used数组做记录思路二&#xff1a;层通过排序后是否重…

学习Vue3的第一天

目录 简介 什么是 Vue&#xff1f; 创建Vue3工程 前提条件 基于 vue-cli 创建&#xff08;不推荐&#xff09; 基于 vite 创建&#xff08;推荐&#xff09; 通过 CDN 使用 Vue 代码示例 简介 什么是 Vue&#xff1f; Vue.js 是一个流行的前端 JavaScript 框架&#…

c# DataTable 帮助类

public class DataTableHelper { #region DataTable转IList /// <summary> /// DataTable转IList集合 /// </summary> /// <typeparam name"T"></typeparam> /// <param name"dataTabl…