3.特征工程-特征抽取、特征预处理、特征降维
文章目录
- 环境配置(必看)
- 头文件引用
- 1.数据集: sklearn
- 代码
- 运行结果
- 2.字典特征抽取: DictVectorizer
- 代码
- 运行结果
- 稀疏矩阵
- 3.文本特征抽取(英文文本): CountVectorizer()
- 代码
- 运行结果
- 4.中文文本分词(中文文本特征抽取使用)
- 代码
- 运行结果
- 5.中文文本特征抽取
- 代码
- 运行结果
- 6.文本特征抽取: TfidfVectorizer
- 代码
- 运行结果
- 7.归一化:MinMaxScaler
- 代码
- 运行结果
- 8.标准化: StandardScaler
- 代码
- 运行结果
- 9.过滤低方差特征: VarianceThreshold
- 代码
- 运行结果
- 结果1:threshold=0时运行的结果
- 结果2:threshold=10时运行的结果
- 10.数据降维: StandardScaler
- 代码
- 运行结果
- n_components=2
- n_components=0.95 代表保留95%的特征
- 本章学习资源
环境配置(必看)
Anaconda-创建虚拟环境的手把手教程相关环境配置看此篇文章,本专栏深度学习相关的版本和配置,均按照此篇文章进行安装。
头文件引用
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.feature_extraction import DictVectorizer
from sklearn.feature_extraction.text import CountVectorizer, TfidfVectorizer
from sklearn.preprocessing import MinMaxScaler, StandardScaler
from sklearn.decomposition import PCA
from sklearn.feature_selection import VarianceThreshold
from scipy.stats import pearsonr
import pandas as pd
import jieba
1.数据集: sklearn
代码
1.load_iris() 获取鸢尾花数据集,数据集的形状为(150, 4)
2.train_test_split()调用划分数据集的函数,test_size=0.2意思是将150个数据中的20%划分为测试集,剩下的80%为训练集。从代码运行的图中 x_train.shape: (120, 4)可以看出,训练集为150 * 0.8 = 120个
3.其他的打印,可以自己运行程序去看一下
def datasets_demo():"""获取鸢尾花数据集:return:"""# 获取鸢尾花数据集iris = load_iris()print(f"鸢尾花数据集的返回值: {iris}")# print("查看数据集描述: \n", iris["DESCR"])print(f"查看特征值的名字:{iris.feature_names}")# print(f"查看特征值:{iris.data} \n 特征值的形状:{iris.data.shape}")print(f"标签组:{iris.target}")print(f"标签名:{iris.target_names}")# 数据集划分 特征数据 目标数据 测试集比例 随机种子x_train, x_test, y_train, y_test = train_test_split(iris.data, iris.target, test_size=0.2, random_state=20)print(f"x_train: \n {x_train} \n x_train.shape: {x_train.shape}")return None
运行结果
鸢尾花数据集的返回值:


查看特征值的名字、标签组、标签名

划分数据集后,训练集的形状

2.字典特征抽取: DictVectorizer
代码
1.从运行结果可以看出,'city’有北京、上海、深圳三个类别,对应one-hot编码就是001 010 100三种情况;'temperature’只有就是顺应数值。
2.DictVectorizer()默认返回的是稀疏矩阵,结果在下边的运行结果中。其中的:
(0, 1) 1.0
(1, 0) 1.0
(2, 2) 1.0
可以看出是对应非稀疏矩阵的坐标位置。
3.数据需要处理成字典的类型才可以使用DictVectorizer()
def dict_demo():"""字典特征抽取: DictVectorizer:return:"""data = [{'city': '北京', 'temperature': 100},{'city': '上海', 'temperature': 60},{'city': '深圳', 'temperature': 30}]# 1.实例化一个转换器类 不填写参数默认返回的是稀疏矩阵transfer = DictVectorizer(sparse=False)# 2.调用fit_transform()data_new = transfer.fit_transform(data)print("data_new:\n", data_new)print("特征名字: \n", transfer.get_feature_names())return None
运行结果

稀疏矩阵

3.文本特征抽取(英文文本): CountVectorizer()
代码
1.CountVectorizer()没有像DictVectorizer()通过输入参数来控制是否返回稀疏矩阵,而是通过data_new.toarray()来转换为非稀疏矩阵
2.CountVectorizer(stop_words=[“is”, “too”]),可以通过入参stop_words=[“is”, “too”]来控制不统计某些单词。
def count_demo():"""文本特征抽取: CountVectorizer:return:"""data = ["Life is short, i like like python", "life is too long, i dislike python"]# 1.实例化一个转换器类transfer = CountVectorizer()# 2.调用fit_transform()data_new = transfer.fit_transform(data)# data_new.toarray()生成非稀疏矩阵print("data_new:\n", data_new.toarray())print("特征名字: \n", transfer.get_feature_names())return None
运行结果

4.中文文本分词(中文文本特征抽取使用)
代码
1.运行函数: cut_word(“我爱北京天安门”), 得到运行结果
def cut_word(text):"""中文分词: 我爱北京天安门:param text::return:"""# jieba.cut(text)对字符串进行分词处理# " ".join() 转换为字符串tmp = " ".join(list(jieba.cut(text)))print(f"{tmp}\n{type(tmp)}")return tmp
运行结果

5.中文文本特征抽取
代码
1.需要调用cut_word()进行分词,然后再进行特征抽取
2.中文文本特征抽取与英文文本抽取唯一的不同就是分词,后续是一样的处理
3.与TfidfVectorizer()计算出的结果不同,CountVectorizer()统计的是特征出现的个数,TfidfVectorizer()统计的是特征的重要程度
def count_chinses_demo():"""中文文本特征提取,自动分词:return:"""# 将中文文本进行分词data = ["一种还是一种今天很残酷,明天更残酷,后天很美好,但绝对大部分是死在明天晚上,所以每个人不要放弃今天。","我们看到的从很远星系来的光是在几百万年之前发出的,这样当我们看到宇宙时,我们是在看它的过去。","如果只用一种方式了解某样事物,你就不会真正了解它。了解事物真正含义的秘密取决于如何将其与我们所了解的事物相联系。"]data_new = []for sent in data:data_new.append(cut_word(sent))print(f"data_new = \n{data_new}")# 1.实例化一个转换器类transfer = CountVectorizer()# 2.调用fit_transform()data_final = transfer.fit_transform(data_new)# data_final.toarray()生成非稀疏矩阵print("data_final:\n", data_final.toarray())print("特征名字: \n", transfer.get_feature_names())return None
运行结果

6.文本特征抽取: TfidfVectorizer
代码
1.TfidfVectorizer(stop_words=[“is”, “too”]),可以通过入参stop_words=[“is”, “too”]来控制不统计某些单词。
2.计算出的结果矩阵,是代表各个特征的重要程度
def tfidf_demo():"""用TF-IDF的方法进行文本特征抽取:return:"""# 将中文文本进行分词data = ["一种还是一种今天很残酷,明天更残酷,后天很美好,但绝对大部分是死在明天晚上,所以每个人不要放弃今天。","我们看到的从很远星系来的光是在几百万年之前发出的,这样当我们看到宇宙时,我们是在看它的过去。","如果只用一种方式了解某样事物,你就不会真正了解它。了解事物真正含义的秘密取决于如何将其与我们所了解的事物相联系。"]data_new = []for sent in data:data_new.append(cut_word(sent))# 1.实例化一个转换器类transfer = TfidfVectorizer()# 2.调用fit_transform()data_final = transfer.fit_transform(data_new)print("data_final:\n", data_final.toarray())print("特征名字: \n", transfer.get_feature_names())return None
运行结果

7.归一化:MinMaxScaler
代码
1.需要dating.txt数据的可以把邮箱留在评论区
2.如果样本的最大值或者最小值是异常点,对归一化的结果有很大的影响,所以对数据进行处理更建议使用下边的标准化
def minmax_demo():"""归一化:return:"""# 1、获取数据data = pd.read_csv("dating.txt")# 获取前3列数据data = data.iloc[:, :3]# print("data:\n", data)# 2、实例化一个转换器类# feature_range=[2, 3] 归一化放缩的范围[2, 3]transfer = MinMaxScaler(feature_range=[2, 3])# 3、调用fit_transform# data数据的形状(n_samples, n_features) 行:样本数 列:特征数data_new = transfer.fit_transform(data)print("data_new:\n", data_new)return None
运行结果
可以看到归一化后的数值全部在[2, 3]范围内,通过MinMaxScaler的入参feature_range=[2, 3]来进行调整

8.标准化: StandardScaler
代码
1.处理之后,对于每列来说,所有数据都聚集在均值为0,标准差为1的附近
def stand_demo():"""标准化:return:"""# 1、获取数据data = pd.read_csv("dating.txt")data = data.iloc[:, :3]# print("data:\n", data)# 2、实例化一个转换器类transfer = StandardScaler()# 3、调用fit_transformdata_new = transfer.fit_transform(data)print("data_new:\n", data_new)return None
运行结果

9.过滤低方差特征: VarianceThreshold
代码
1.pearsonr()得出皮尔逊相关系数,相关系数r的值介于-1至1之间
- r > 0,表示两变量正相关, r < 0,两变量负相关;
- |r| = 1,表示两变量为完全正相关, r = 0,表示两变量无相关关系;
2.相关系数,只看第一个值即可,不需要看第二个值。例如:
相关系数: (-0.004389322779936271, 0.8327205496564927)
只看-0.004389322779936271即可。
def variance_demo():"""过滤低方差特征:return:"""# 1、获取数据data = pd.read_csv("factor_returns.csv")data = data.iloc[:, 1:-2]print("data:\n", data)# 2、实例化一个转换器类transfer = VarianceThreshold(threshold=10)# 3、调用fit_transformdata_new = transfer.fit_transform(data)print("data_new:\n", data_new, data_new.shape)# 计算某两个变量之间的相关系数r1 = pearsonr(data["pe_ratio"], data["pb_ratio"])print("相关系数:\n", r1)r2 = pearsonr(data['revenue'], data['total_expense'])print("revenue与total_expense之间的相关性:\n", r2)return None
运行结果
结果1:threshold=0时运行的结果
可以看到数据原本是具有9个特征,设置threshold=0后,过滤掉0个特征,还剩下9个特征

结果2:threshold=10时运行的结果
可以看到数据原本是具有9个特征,设置threshold=10后,过滤掉2个特征,还剩下7个特征

10.数据降维: StandardScaler
StandardScaler()的作用:数据维数压缩,尽可能降低原数据的维数(复杂度),损失少量的信息
代码
1.n_components=2减少到2个特征,代码中是将4个特征减少到2个特征
def pca_demo():"""PCA降维:主成分分析:return:"""data = [[2, 8, 4, 5], [6, 3, 0, 8], [5, 4, 9, 1]]# 1.实例化一个转换器类# n_components 1.整数:留下特征数 2.小数: 保留特征的百分比transfer = PCA(n_components=2)# 2.调用fit_transform()data_new = transfer.fit_transform(data)print("data_new:\n", data_new)return None
运行结果
n_components=2

n_components=0.95 代表保留95%的特征
从结果看,保留95%的信息依旧还保留2个特征,说明这个PCA的方法还是不错的!

本章学习资源
黑马程序员3天快速入门python机器学习
我是跟着视频进行的学习,欢迎大家一起来学习!
相关文章:
3.特征工程-特征抽取、特征预处理、特征降维
文章目录 环境配置(必看)头文件引用1.数据集: sklearn代码运行结果 2.字典特征抽取: DictVectorizer代码运行结果稀疏矩阵 3.文本特征抽取(英文文本): CountVectorizer()代码运行结果 4.中文文本分词(中文文本特征抽取使用)代码运行结果 5.中文文本特征抽…...
RISC-V (五)上下文切换和协作式多任务
任务(task) 所谓的任务就是寄存器的当前值。 -smp后面的数字指的是hart的个数,qemu模拟器最大可以有8个核,此文围绕一个核来讲。 QEMU qemu-system-riscv32 QFLAG -nographic -smp 1 -machine virt -bios none 协作式多任务 …...
Cornerstone加载本地Dicom文件第二弹 - Blob篇
🍀 引言 当我们刚接触Cornerstone或拿到一组Dicom文件时,如果没有ImageID和后台接口,可能只是想简单测试Cornerstone能否加载这些Dicom文件。在这种情况下,可以使用本地文件加载的方法。之前我们介绍了通过node启动服务器请求文件…...
C语言中整数类型及其类型转换
1.数据的存储和排列 是的,在C语言中,整数类型通常以补码(twos complement)形式存储在内存中。这是因为补码表示法在处理有符号整数的加减运算上更为简便和高效。 2.有符号数和无符号数之间的转换 在C语言中,有符号数和…...
powerjob连接postgresql数据库(支持docker部署)
1.先去pg建一个powerjob-product库 2.首先去拉最新的包,然后找到server模块,把mysql的配置文件信息替换成pg的 spring.datasource.hikari.auto-committrue spring.datasource.remote.hibernate.properties.hibernate.dialecttech.powerjob.server.pers…...
浅谈位运算及其应用(c++)
目录 一、位运算的基础(一)位与(&)(二)位或(|)(三)位异或(^)(四)位取反(~)&#x…...
Git版本管理中下列不适于Git的本地工作区域的是
Git版本管理中下列不适于Git的本地工作区域的是 A. 工作目录 B. 代码区 C. 暂存区 D. 资源库 选择B Git本地有四个工作区域: 工作目录(Working Directory)、 暂存区(Stage/Index)、 资源库(Repository或Git Directory)、 git仓库(Remote Di…...
webGL + WebGIS + 数据可视化
webGL: 解释:用于在浏览器中渲染 2D 和 3D 图形。它是基于 OpenGL ES 的,提供了直接操作 GPU 的能力。 库: Three.jsBabylon.jsPixiJSReglGlMatrixOsgjs WebGIS: 解释:用于在 Web 浏览器中处理和展示地…...
职场“老油条”的常规操作,会让你少走许多弯路,尤其这三点
有句话说得好:“在成长的路上,要么受教育,要么受教训。” 挨过打才知道疼,吃过亏才变聪明,从职场“老油条”身上能学到很多经验,不一定全对,但至少有可以借鉴的地方,至少能让你少走…...
Ceres Cuda加速
文章目录 一、简介二、准备工作三、实现代码四、实现效果参考资料一、简介 字Ceres2.2.1版本之后,作者针对于稠密矩阵的分解计算等操作进行了Cuda加速,因此这里就基于此项改动测试一下效果。 二、准备工作 1、首先是需要安装Cuda这个英伟达第三方库,https://developer.nvidi…...
微信小程序生成小程序转发链接,携带参数跳转到另外一个页面
🤵 作者:coderYYY 🧑 个人简介:前端程序媛,目前主攻web前端,后端辅助,其他技术知识也会偶尔分享🍀欢迎和我一起交流!🚀(评论和私信一般会回!!) 👉 个人专栏推荐:《前端项目教程以及代码》 ✨一、前言 需求:在页面A生成分享链接(携带参数),分享到微信…...
图解RocketMQ之消息如何存储
大家好,我是苍何。 人一辈子最值得炫耀的不应该是你的财富有多少(虽然这话说得有点违心,呵呵),而是你的学习能力。技术更新迭代的速度非常快,那作为程序员,我们就应该拥有一颗拥抱变化的心&…...
2024年中国信创产业发展白皮书精简版
获取方式: 链接:https://pan.baidu.com/s/1rEHMfcCfJm4A40vzrewoCw?pwda5u1 提取码:a5u1 得益于中国数字经济的迅猛发展,2023年中国信创产业规模达20961.9亿元,2027年有望达到37011.3亿元,中国信创市场…...
Redis2-Redis常见命令
目录 Redis数据结构介绍 Redis通用命令 KEYS DEL EXISTS EXPIRE String类型 Key的层级格式 Hash类型 List类型 Set类型 SortedSet类型 Redis数据结构介绍 Redis是一个key-value的数据库,key一般是String数据库,value的类型多种多样 可以通过…...
一天攻克一个知识点 —— 设计模式之动态代理
一、设计模式之代理设计 代理设计是在Java开发中使用较多的一种设计模式,所谓的代理设计模式就是指一个代理主体操作真实主体,真实主体操作具体业务,代理主体负责给具体业务添砖加瓦。 就好比在生活中你有一套房子想要出租(你真实主体)&…...
数据采集与预处理【大数据导论】
各位大佬好 ,这里是阿川的博客,祝您变得更强 个人主页:在线OJ的阿川 大佬的支持和鼓励,将是我成长路上最大的动力 阿川水平有限,如有错误,欢迎大佬指正 数据采集与预处理前 必看 【大数据导论】—大数据序…...
白骑士的PyCharm教学进阶篇 2.2 高级调试技术
系列目录 上一篇:白骑士的PyCharm教学进阶篇 2.1 高效编码技巧 在Python开发中,调试是一个非常重要的环节。PyCharm作为一款功能强大的IDE,不仅提供了基本的调试功能,还包含了许多高级调试工具与技巧。本篇将详细介绍这些高级调试…...
[网鼎杯]2018Unfinish
使用ctf在线靶场https://adworld.xctf.org.cn/home/index。 进入靶场,发现是一个登录页面。 使用awvs进行扫描,发现存在login.php和register.php,并且register.php存在sql注入漏洞。 访问一下register.php试试,发现是一个注册页面…...
Java算法-力扣leetcode-383. 赎金信
383. 赎金信 给你两个字符串:ransomNote 和 magazine ,判断 ransomNote 能不能由 magazine 里面的字符构成。 如果可以,返回 true ;否则返回 false 。 magazine 中的每个字符只能在 ransomNote 中使用一次。 示例 1:…...
使用idea对spring全家桶的各种项目进行创建
目录 1. 简介2. spring2.1 简介2.2 创建 3. springmvc3.1 介绍3.2 创建 4. springboot4.1 简介4.2 创建(仅仅就其中一种) 5. 其他:maven6. 参考链接 1. 简介 因为总是分不清spring全家桶,所以就在这里进行一个总结。 2. spring …...
web vue 项目 Docker化部署
Web 项目 Docker 化部署详细教程 目录 Web 项目 Docker 化部署概述Dockerfile 详解 构建阶段生产阶段 构建和运行 Docker 镜像 1. Web 项目 Docker 化部署概述 Docker 化部署的主要步骤分为以下几个阶段: 构建阶段(Build Stage):…...
如何在看板中体现优先级变化
在看板中有效体现优先级变化的关键措施包括:采用颜色或标签标识优先级、设置任务排序规则、使用独立的优先级列或泳道、结合自动化规则同步优先级变化、建立定期的优先级审查流程。其中,设置任务排序规则尤其重要,因为它让看板视觉上直观地体…...
【大模型RAG】Docker 一键部署 Milvus 完整攻略
本文概要 Milvus 2.5 Stand-alone 版可通过 Docker 在几分钟内完成安装;只需暴露 19530(gRPC)与 9091(HTTP/WebUI)两个端口,即可让本地电脑通过 PyMilvus 或浏览器访问远程 Linux 服务器上的 Milvus。下面…...
el-switch文字内置
el-switch文字内置 效果 vue <div style"color:#ffffff;font-size:14px;float:left;margin-bottom:5px;margin-right:5px;">自动加载</div> <el-switch v-model"value" active-color"#3E99FB" inactive-color"#DCDFE6"…...
1.3 VSCode安装与环境配置
进入网址Visual Studio Code - Code Editing. Redefined下载.deb文件,然后打开终端,进入下载文件夹,键入命令 sudo dpkg -i code_1.100.3-1748872405_amd64.deb 在终端键入命令code即启动vscode 需要安装插件列表 1.Chinese简化 2.ros …...
Springcloud:Eureka 高可用集群搭建实战(服务注册与发现的底层原理与避坑指南)
引言:为什么 Eureka 依然是存量系统的核心? 尽管 Nacos 等新注册中心崛起,但金融、电力等保守行业仍有大量系统运行在 Eureka 上。理解其高可用设计与自我保护机制,是保障分布式系统稳定的必修课。本文将手把手带你搭建生产级 Eur…...
C++八股 —— 单例模式
文章目录 1. 基本概念2. 设计要点3. 实现方式4. 详解懒汉模式 1. 基本概念 线程安全(Thread Safety) 线程安全是指在多线程环境下,某个函数、类或代码片段能够被多个线程同时调用时,仍能保证数据的一致性和逻辑的正确性…...
MySQL账号权限管理指南:安全创建账户与精细授权技巧
在MySQL数据库管理中,合理创建用户账号并分配精确权限是保障数据安全的核心环节。直接使用root账号进行所有操作不仅危险且难以审计操作行为。今天我们来全面解析MySQL账号创建与权限分配的专业方法。 一、为何需要创建独立账号? 最小权限原则…...
中医有效性探讨
文章目录 西医是如何发展到以生物化学为药理基础的现代医学?传统医学奠基期(远古 - 17 世纪)近代医学转型期(17 世纪 - 19 世纪末)现代医学成熟期(20世纪至今) 中医的源远流长和一脉相承远古至…...
力扣热题100 k个一组反转链表题解
题目: 代码: func reverseKGroup(head *ListNode, k int) *ListNode {cur : headfor i : 0; i < k; i {if cur nil {return head}cur cur.Next}newHead : reverse(head, cur)head.Next reverseKGroup(cur, k)return newHead }func reverse(start, end *ListNode) *ListN…...
