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

news2024/9/24 23:21:08

目录


一、前言

二、正文

Ⅰ.主成分分析

Ⅱ.核主成分分析

三、结语


一、前言

 

前面介绍的特征选择方法获得的特征,是从原始数据中抽取出来的,并没有对数据进行变换。而特征提取和降维,则是对原始数据的特征进行相应的数据变换,并且通常会选择比原始特征数量少的特征,同时达到数据降维的目的。常用的数据特征提取和降维的方法有主成分分析,核成分分析,流行学习,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.coloradmin.cn/o/1439241.html

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

相关文章

leetcode707. 设计链表

leetcode707. 设计链表 题目 思路 1.使用虚头节点,模拟class的初始化 2.class中添加一个链表长度的属性,便于后续操作 代码 class ListNode:def __init__(self, val0, nextNone):self.val valself.next nextclass MyLinkedList:def __init__(self)…

优化梯度下降算法

文章目录 Optimization problemNormalizing inputsvanishing/exploding gradientsweight initializegradient checkNumerical approximationgrad check Optimize algorithmmini-bach gradientmini-batch size exponential weighted averagesBias correctionMomentum RMSpropAda…

Q-Tester:适用于开发、生产和售后的诊断测试软件

Q-Tester.Expert是一款基于ODX(ASAM MCD-2D / ISO 22901-1)国际标准的工程诊断仪。通过此诊断仪可实现与ECU控制器之间的数据交互。这一基于ODX国际标准的解决方案,其优势在于:ODX数据库不仅可在开发部门交互,而且可在…

【RT-DETR有效改进】计算训练好权重文件对应的FPS、推理每张图片的平均时间(科研必备)

👑欢迎大家订阅本专栏,一起学习RT-DETR👑 一、本文介绍 本文给大家带来的改进机制是利用我们训练好的权重文件计算FPS,同时打印每张图片所利用的平均时间,模型大小(以MB为单位),同时支持batch_size功能的选择,对于轻量化模型的读者来说,本文的内容对你一定有…

使用influxdb+Grafana+nmon2influxdb+nmon实时监控vps性能

Grafana可以用来实时查看linux系统的各种性能数据。 1、安装环境: centos 7influxdb1.7.6grafana-4.6.3-1nmon2influxdb-2.1.7nmon-16m 2、安装influxdb: 下载rpm包: influxdb官网:https://docs.influxdata.com/influxdb/v2.0…

本地安全策略 | 服务器管理 | 配置项

本地安全策略 Windows 本地安全策略是一组在本地计算机上配置的安全设置,用于管理计算机的安全性和访问控制。这些策略是针对单个计算机的,与域策略不同,本地安全策略不通过域控制器进行集中管理。本地安全策略通过本地组策略编辑器进行配置…

实现远程开机(电脑)的各种方法总结

一.为什么要远程开机 因为工作需要,总是需要打开某台不在身边的电脑,相信很多值友也遇到过相同的问题,出门在外,或者在公司,突然需要的一个文件存在家里的电脑上,如果家里有人可以打个电话回家&#xff0c…

Stable Diffusion 模型下载:Samaritan 3d Cartoon(撒玛利亚人 3d 卡通)

文章目录 模型介绍生成案例案例一案例二案例三案例四案例五案例六案例七案例八案例九案例十 下载地址 模型介绍 由“PromptSharingSamaritan”创作的撒玛利亚人 3d 卡通类型的大模型,该模型的基础模型为 SD 1.5。 条目内容类型大模型基础模型SD 1.5来源CIVITAI作者…

OpenCV-32 膨胀操作

膨胀是与腐蚀相反的操作,基本原理是只要保证卷积核的锚点是非0值,周边无论是0还是非0值,都变为0。 使用API---dilate(img, kernel, iterationms 1) 示例代码如下: import cv2 imp…

音视频色彩:RGB/YUV

目录 1.RGB 1.1介绍 1.2分类 1.2.1RGB16 1)RGB565 2)RGB555 1.2.2RGB24 1.2.3RGB222 2.YUV 2.1介绍 2.2分类 2.2.1 YUV444 2.2.2 YUV 422 2.2.3 YUV 420 2.3存储格式 2.3.1 YUYV 2.3.2 UYVY 2.3.3 YUV 422P 2.3.4 YUV420P/YUV420SP 2.3.5 YU12 和…

Java学习15-- 面向对象学习3. 对象的创建分析【★】

(本章看不懂多读几遍,弄懂后再往下章看) 面向对象学习3. 对象的创建分析 Java Memory Structure: 如上图所示: 主要分为Stack和Heap Memory 其中Stack主要放method包括main 程序从main开始所以main最先进入Stack,等…

e5 服务器具备哪些性能特点?

随着云计算和大数据技术的不断发展,服务器作为数据中心的核心设备,其性能特点也日益受到关注。其中,E5服务器作为当前主流的服务器类型之一,具备许多优秀的性能特点。本文将详细介绍E5服务器的性能特点,帮助读者更好地…

深度学习的新进展:解析技术演进与应用前景

深度学习的新进展:解析技术演进与应用前景 深度学习,作为人工智能领域的一颗璀璨明珠,一直以来都在不断刷新我们对技术和未来的认知。随着时间的推移,深度学习不断迎来新的进展,这不仅推动了技术的演进,也…

Vagrant 虚拟机工具基本操作指南

Vagrant 虚拟机工具基本操作指南 ​#虚拟机 #​ ​#vargant#​ ​#ubuntu#​ ‍ 虚拟机virtualbox ,VMWare及WSL等大家都很了解了,那Vagrant是什么东西? 它是一组命令行工具,可以象Docker管理容器一样管理虚拟机,这样快速创…

Flink Format系列(2)-CSV

Flink的csv格式支持读和写csv格式的数据,只需要指定 format csv,下面以kafka为例。 CREATE TABLE user_behavior (user_id BIGINT,item_id BIGINT,category_id BIGINT,behavior STRING,ts TIMESTAMP(3) ) WITH (connector kafka,topic user_behavior…

NLP_“预训练+微调大模型”模式和Prompt/Instruct模式的异同

文章目录 “预训练微调大模型”的模式以提示/指令模式直接使用大模型“预训练微调大模型”模式和Prompt/Instruct模式的异同小结 “预训练微调大模型”的模式 经过预训练的大模型所习得的语义信息和所蕴含的语言知识,很容易向下游任务迁移。NLP应用人员可以根据自己…

阅读《极客时间 | Kafka核心技术与实战》(一)【Kafka入门】

阅读《极客时间 | Kafka核心技术与实战》 为什么要学习Kafka消息引擎系统ABC一篇文章带你快速搞定Kafka术语我应该选择哪种Kafka?聊聊Kafka的版本号 为什么要学习Kafka 如果你是一名软件开发工程师的话,掌握 Kafka 的第一步就是要根据你掌握的编程语言去…

c++阶梯之类与对象(中)< 续集 >

前文: c阶梯之类与对象(上)-CSDN博客 c阶梯之类与对象(中)-CSDN博客 前言: 在上文中,我们学习了类的六个默认成员函数之构造,析构与拷贝构造函数,接下来我们来看看剩下…

探讨CSDN等级制度:博客等级、原力等级、创作者等级

个人名片: 🦁作者简介:学生 🐯个人主页:妄北y 🐧个人QQ:2061314755 🐻个人邮箱:2061314755qq.com 🦉个人WeChat:Vir2021GKBS 🐼本文由…

HarmonyOS 鸿蒙应用开发(九、还是蓝海,如何贡献第三方库)

快来共享第三方库吧,不但可以通过分享自己的成果,可以获得来自全球开发者的技术反馈和建议,提升自身技术能力,还有助于提高个人或团队在开源社区中的知名度和影响力。在流量时代和粉丝经济时代,获得曝光度和流量密码。…