人工智能学习5(特征抽取)

编译环境:PyCharm

文章目录

      • 编译环境:PyCharm
  • 特征抽取
    • 无监督特征抽取(之PCA)
      • 代码实现鸢尾花数据集无监督特征抽取
    • 有监督特征抽取(之LDA)
      • 代码实现,生成自己的数据集并进行有监督特征抽取(LDA)
        • 生成自己的数据集
        • PCA降维和LDA降维对比
      • 代码实现LDA降维对鸢尾花数据进行特征抽取

特征抽取

特征选择和特征抽取都减少了数据的维度(降维),但是特征选择是得到原有特征的子集,特征抽取是将原有特征结果函数映射转化为新的特征。
特征抽取分为无监督特征抽取和有监督特征抽取。

无监督特征抽取(之PCA)

无监督没有标签
PCA降维(主成分分析)基本思想:构造一系列原始特征的线性组合形成的线性无关低维特征,以去除数据的相关性,并使降维后的数据最大程度保持原始高维数据的方差信息
去中心化处理:x-x的平均值
去中心化后,样本均值在0
均值:描述样本集合的中心点
标准差:各个样本到均值处的平均距离
标准差可以用来描述数据的散布程度
方差:标准差的平方
标准差和方差只能描述一维数据
协方差是两个变量之间的线性相关程度的度量(协方差为0表示两个变量没有相关性,为正数则正相关)
协方差矩阵可以用来描述多维数据的线性相关性。

在这里插入图片描述
在这里插入图片描述
cov(x,y)=cov(y,x)
var(x)=cov(x,x)
在这里插入图片描述
可以看出协方差矩阵是对称的,对角线为方差。
在这里插入图片描述
同一个向量在不同基底的变换,选择不同的及可以对同样一组数据给出不同的表示。
在这里插入图片描述

要尽可能保留原有信息,要求投影后的值尽可能分散,不重合。

代码实现鸢尾花数据集无监督特征抽取

在sklearn中的datasets中,已经内置了鸢尾花的数据集,直接使用即可

from sklearn import datasets
iris = datasets.load_iris()
print(type(iris))
# 查看属性有哪些
print(dir(iris))
# 打印标签
print(iris.target)
# 获取样本和标签
X=iris.data
print(X.shape)
# 打印前四行
print(X[:4])

对应的打印结果:
在这里插入图片描述

可以看到返回的是一个类。Bunch,用于描述数据集。其属性DESCR是数据描述,target_names是标签名,可自定义默认为文件夹名字,filenames文件夹名,target文件分类可以看成y值,data是数据数组可以看成X。
对数据进行主成分分析

print("------主成分分析PCA-------")
from sklearn.decomposition import PCA
# 实例化
pca=PCA()
X_pca = pca.fit_transform(X)
# 查看X_pca的前四行数据,只看小数点后两位
print(np.round(X_pca[:4], 2))
# 由于没有设置维度,上面只会处理的数据但是没有实现降维
# 通过 explained_variance_ 可以查看各个维度的贡献值
print("explained_variance_查看各个维度的贡献值")
print(pca.explained_variance_)
# 通过 explained_variance_ratio_ 查看各个维度的方差贡献值
print("explained_variance_ratio_查看各个维度的方差贡献值")
print(pca.explained_variance_ratio_)
# 从上面的结果,可以看到保留两个维度,前两个维度较为合理,前两个维度的重要性远高于另外两个
pca = PCA(n_components=2)
X_pca = pca.fit_transform(X)
print("选择维度后")
print(X_pca[:4])
print("降维后所保留的两个特征的可解释方法比例高达0.98")
print(pca.explained_variance_ratio_.sum())

在这里插入图片描述

有监督特征抽取(之LDA)

LDA(线性判别分析法)
LDA思想:投影后类内方差最小类间方差最大
和PCA一样通过投影的方法达到去除数据间冗余的一种算法。既可以作为降维的方法,也可以作为分类的方法。
PCA会忽略给出的标签,LDA会利用到这些标签。
LDA降维最多可以降到类别数的k-1的维度,PCA没有这个限制
LDA不适合非高斯分布的样本进行降维
LDA有时会产生过拟合的问题

在人脸识别等图像识别领域广泛应用。

线性分类器(速度快):“超平面”将两个样本隔离开
常见线性分类器:LR逻辑回归、贝叶斯分类、线性回归、SVM(线性核)
非线性分类(拟合能力更强):曲面或者多个“超平面”
常见非线性分类器:决策树、GBDT、多层感知机、SVM(高斯核)

代码实现,生成自己的数据集并进行有监督特征抽取(LDA)

生成自己的数据集
# 生成自己的数据集
from sklearn.datasets import make_classification
X,y=make_classification(n_samples=1000, # 产生1000个样本n_features=4,   # 每个样本有4个列n_repeated=0,n_classes=3,    # 一共三个标签(3个类别)n_clusters_per_class=1,class_sep=0.5,random_state=10 # 随机值设置为10
)
print(X.shape,y.shape)

在这里插入图片描述

PCA降维和LDA降维对比
# PCA降维
from sklearn.decomposition import PCA
import matplotlib.pyplot as plt
pca = PCA(n_components=2) # 设置目标维度为2
X_pca = pca.fit_transform(X)
# 绘制图
plt.scatter(X_pca[:,0],X_pca[:,1],c=y)
plt.show()# 使用LDA降维
from sklearn.discriminant_analysis import LinearDiscriminantAnalysis
# 实例化
lda = LinearDiscriminantAnalysis(n_components=2)
X_lda = lda.fit_transform(X,y)  # LDA是需要数据以及标签的
plt.scatter(X_lda[:,0],X_lda[:,1],c=y)
plt.show()

代码实现LDA降维对鸢尾花数据进行特征抽取

# 使用LDA对鸢尾花数据进行降维
from sklearn import datasets
from sklearn.discriminant_analysis import LinearDiscriminantAnalysis
iris = datasets.load_iris()
X_iris,y_iris = iris.data,iris.target
# 实例化LDA
lda = LinearDiscriminantAnalysis(n_components=2)
X_iris_lda = lda.fit_transform(X_iris,y_iris)
print(X_iris_lda[:4])
print(X_iris_lda.shape)
plt.scatter(X_iris_lda[:,0],X_iris_lda[:,1],c=y_iris)
plt.show()

在这里插入图片描述

在这里插入图片描述

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

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

相关文章

shareMouse 使用中遇到的问题

一、shareMouse 使用中遇到的问题 1、鼠标不能移动到另一个显示器 明明是两个显示器,但是 只显示一个,鼠标也不能移到另一个显示器上 后来, 设置了 wrap mouse pointer around display就好了,虽然还是显示一个显示器&#xff0c…

SmartSoftHelp8,API专业测试工具

API专业测试工具 post get put 专业接口测试工具 提交数据接口集成 返回数据接口集成 方便快捷 中文显示 下载地址: https://pan.baidu.com/s/1zBgeYsqWnSlNgiKPR2lUYg?pwd8888

vue3使用vue-router路由(路由懒加载、路由传参)

vue-router 是 vue的一个插件库 1. 专门用来实现一个SPA单页面应用 2 .基于vue的项目基本都会用到此库 SPA的理解 1) 单页Web应用(single page web application,SPA) 2) 整个应用只有一个完整的页面 3) 点击页面中的链接不会刷新页面, 本…

Java包(package)

1、概念 为了更好的组织类,用于区别类名的命名空间,其实就是基于工程的一个文件路径,如: 2、作用 三个作用: 1)区分相同名称的类。 2)能够较好地管理大量的类。 3)控制访问范围。 在…

独家揭秘:卢松松拍摄视频背后的创作过程

我是卢松松,点点上面的头像,欢迎关注我哦! 一条视频刚刚发几分钟,有个粉丝就过来评论说: 抛开广告性,越来越有感觉了。 于是今天的这篇文章就来了,也顺便给大家分享下近期我拍视频、编辑视频的…

五年自动化测试,终于进字节跳动了,年薪30w其实也并非触不可及

一些碎碎念 什么都做了,和什么都没做其实是一样的,走出“瞎忙活”的安乐窝,才是避开弯路的最佳路径。希望我的经历能帮助到有需要的朋友。 在测试行业已经混了5个年头了,以前经常听到开发对我说,天天的点点点有意思没…

最新发布 Spring Boot 3.2.0 新特性和改进

一、Spring Boot 简介 Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程。这个框架使用了特定的方式来进行配置,从而使开发人员不再需要定义样板化的配置。 以下是Spring Boot的一些主要特点&#xf…

也可Adobe Animate

Animate CC 由原Adobe Flash Professional CC 更名得来,2015年12月2日:Adobe 宣布Flash Professional更名为Animate CC,在支持Flash SWF文件的基础上,加入了对HTML5的支持。并在2016年1月份发布新版本的时候,正式更名为…

记录一次vscode markdown的图片路径相关插件学习配置过程

插件及说明查找过程 csdn搜索markdown图片路径,找到关于这一款插件的回答。打开vscode拓展搜索Paste Image这款插件,看到下载量挺高的,应该不赖。 点击仓库,进入该插件开源的github仓库,查看README文件阅读说明. 淡然在Vscode 插件项目下的细…

Linux中文件的打包压缩、解压,下载到本地——zip,tar指令等

目录 1 .zip后缀名: 1.1 zip指令 1.2 unzip指令 2 .tar后缀名 3. sz 指令 4. rz 指令 5. scp指令 1 .zip后缀名: 1.1 zip指令 语法:zip [namefile.zip] [namefile]... 功能:将目录或者文件压缩成zip格式 常用选项&#xff1a…

ZLMediakit-method ANNOUNCE failed: 401 Unauthorized(ffmpeg、obs推流rtmp到ZLM发现的问题)

错误截图 解决办法 修改配置文件config.ini 改成0 修改之后 重启服务 systemctl restart zlm*推流成功

LeetCode(47)合并区间【区间】【中等】

目录 1.题目2.答案3.提交结果截图 链接: 合并区间 1.题目 以数组 intervals 表示若干个区间的集合,其中单个区间为 intervals[i] [starti, endi] 。请你合并所有重叠的区间,并返回 一个不重叠的区间数组,该数组需恰好覆盖输入中…

第九节HarmonyOS 常用基础组件5-LoadingProgress

一、LoadingProgress LoadingProgress组件用于显示加载动效的组件,比如应用的登录界面,当我们点击登录的时候,显示的“正在登录”的进度条状态。LoadingProgress的使用非常简单,只需要设置颜色和宽高就可以了。 Entry Component …

目标检测——Fast R-CNN算法解读

论文:Fast R-CNN 作者:Ross Girshick 链接:https://arxiv.org/abs/1504.08083 代码:https://github.com/rbgirshick/fast-rcnn 目录 1、算法概述2、Fast R-CNN细节2.1The RoI pooling layer2.2 Fine-tuning for detection2.3 Fast…

工业机器视觉megauging(向光有光)使用说明书(十三,资源发现bug,已经更新)

megauging(向光有光)旧资源有bug,已经更新,如下: 第一工具,combox默认0,选择后,鼠标点击“获取结果”,相机就取一帧图像处理后显示出来: 第一工具&#xff0…

YOLOv5算法进阶改进(7)— 将主干网络SPPF更换为SimSPPF / SPP-CSPC / SPPF-CSPC

前言:Hello大家好,我是小哥谈。SimSPPF是YOLOv6中提出的一种改进的空间金字塔池化方法,它是SPPF的升级版。SimSPPF通过在不同尺度上使用不同大小的池化核来提取特征,从而提高了检测器的性能。与SPPF相比,SimSPPF可以在不增加计算成本的情况下提高检测器的性能。本节课就教…

Flask使用线程异步执行耗时任务

1 问题说明 1.1 任务简述 在开发Flask应用中一定会遇到执行耗时任务,但是Flask是轻量级的同步框架,即在单个请求时服务会阻被塞,直到任务完成(注意:当前请求被阻塞不会影响到其他请求)。 解决异步问题有…

记录 | photoshop移动选区

期望达到的效果: 选择一块区域,并移动它 操作: (1) 选择矩形选框工具, (2) 对区域进行选取, (3) 选择移动工具, (4) 移动选区,效果如下,

已知数组A[1..n]中元素类型为非负整数,设计算法将其调整为左右两部分,左边所有为奇数,右边所有为偶数,并要求算法的时间复杂度为O(n)

//左边奇数右边偶数 void Swap(int* a, int* b) {int tmp *b;*b *a;*a tmp; } void LeftRight(int arr[],int n) {int i 0;int j n - 1;while(i<j){if (arr[i] % 2 0 && arr[j] % 2 1) {Swap(&arr[i], &arr[j]);i;j--;}else if (arr[i] % 2 1 &…

Next.js初步使用

文章目录 安装和运行页面静态文件 React初步&#xff0c;但不熟悉React也可以学习本文。 安装和运行 Next.js是一个基于React的服务端渲染框架&#xff0c;可以实现构建高性能、可扩展的React应用&#xff0c;提供了很多方便的工具和功能&#xff0c;包括自动代码分割、服务器…