机器学习(基础2)

特征工程

特征工程:就是对特征进行相关的处理

一般使用pandas来进行数据清洗和数据处理、使用sklearn来进行特征工程

特征工程是将任意数据(如文本或图像)转换为可用于机器学习的数字特征,比如:字典特征提取(特征离散化)、文本特征提取、图像特征提取。

特征工程API

实例化转换器对象,转换器类有很多,都是Transformer的子类, 常用的子类有:

DictVectorizer  	字典特征提取
CountVectorizer 	文本特征提取
TfidfVectorizer 	TF-IDF文本特征词的重要程度特征提取 
MinMaxScaler 		归一化
StandardScaler 		标准化
VarianceThreshold 	底方差过滤降维
PCA  				主成分分析降维

转换器对象调用fit_transform()进行转换, 其中fit用于计算数据,transform进行最终转换

fit_transform()可以使用fit()和transform()代替

data_new = transfer.fit_transform(data)
可写成
transfer.fit(data)
data_new = transfer.transform(data)

DictVectorizer 字典列表特征提取

api

  • 创建转换器对象:

    sklearn.feature_extraction.DictVectorizer(sparse=True)

    参数:

    sparse=True返回类型为csr_matrix的稀疏矩阵

    sparse=False表示返回的是数组,数组可以调用.toarray()方法将稀疏矩阵转换为数组

  • 转换器对象:

    转换器对象调用fit_transform(data)函数,参数data为一维字典数组或一维字典列表,返回转化后的矩阵或数组

    转换器对象get_feature_names_out()方法获取特征名

示例1 提取为稀疏矩阵对应的数组

from sklearn.feature_extraction import DictVectorizer
import pandas as pd 
data =[{'city':'成都','age':30,'temperature':200},{'city':'重庆','age':33, 'temperature':60}, {'city':'北京', 'age':42, 'temperature':80}]
transfer = DictVectorizer(sparse=False)
arr = transfer.fit_transform(data)
feature = transfer.get_feature_names_out()
ddata = pd.DataFrame(arr,columns=feature)
print(ddata)

示例2 提取为稀疏矩阵

from sklearn.feature_extraction import DictVectorizer
import pandas as pd 
data =[{'city':'成都','age':30,'temperature':200},{'city':'重庆','age':33, 'temperature':60}, {'city':'北京', 'age':42, 'temperature':80}]
transfer = DictVectorizer(sparse=True)
arr = transfer.fit_transform(data)
print(arr)

稀疏矩阵转为数组

稀疏矩阵对象调用toarray()函数, 得到类型为ndarray的二维稀疏矩阵

from sklearn.feature_extraction import DictVectorizer
import pandas as pd 
data =[{'city':'成都','age':30,'temperature':200},{'city':'重庆','age':33, 'temperature':60}, {'city':'北京', 'age':42, 'temperature':80}]
transfer = DictVectorizer(sparse=True)
arr = transfer.fit_transform(data)
print(arr)
arr1 = arr.toarray()
print(arr1)

CountVectorizer 文本特征提取

API

sklearn.feature_extraction.text.CountVectorizer

构造函数关键字参数stop_words,值为list,表示词的黑名单(不提取的词)

fit_transform函数的返回值为稀疏矩阵

英文文本提取

from sklearn.feature_extraction.text import CountVectorizer
import pandas as pd
data = ['i love you','you like her','i like book']
# 创建转换器对象
transfer = CountVectorizer(stop_words=[])
# 提取,得到稀疏矩阵
data1 = transfer.fit_transform(data)
print(data1)
# data1转为对应的完整数组
data2 = data1.toarray()
# 获取特征名称
feature = transfer.get_feature_names_out()
# 创建DataFrame对象
arr = pd.DataFrame(data2,columns=feature)
print(arr)

中文文本提取

a.中文文本不像英文文本,中文文本文字之间没有空格,所以要先分词,一般使用jieba分词.

b.下载jieba组件, (不要使用conda)

from sklearn.feature_extraction.text import CountVectorizer
import pandas as pd
import jieba
def cut(text):return ' '.join(list(jieba.cut(text)))data = ['正义也许会迟到,但永远不会缺席','迟到的正义还是正义吗','正义和邪恶究竟哪一方会缺席']
data1 = [cut(i) for i in data]
print(data1)
transfer = CountVectorizer(stop_words=['还是'])
re = transfer.fit_transform(data1)
print(re)
feature = transfer.get_feature_names_out()
arr = re.toarray()
ddata = pd.DataFrame(arr,columns=feature)
ddata

数字代表这个词在句子中出现的频次,在代码中“还是”被作为了黑名单词,并不会进行划分

TfidfVectorizer TF-IDF文本特征词的重要程度特征提取

API

sklearn.feature_extraction.text.TfidfVectorizer()

构造函数关键字参数stop_words,表示词特征黑名单

fit_transform函数的返回值为稀疏矩阵

示例

代码与CountVectorizer的示例基本相同,仅仅把CountVectorizer改为TfidfVectorizer即可

示例中data是一个字符串list, list中的第一个元素就代表一篇文章.

from sklearn.feature_extraction.text import TfidfVectorizer,CountVectorizer
import pandas as pd
import jieba
data = ['正义也许会迟到,但永远不会缺席','迟到的正义还是正义吗','正义和邪恶究竟哪一方会缺席']
def cut(text):return ' '.join(jieba.cut(text))
data1 = [cut(i) for i in data]
transfer1 = TfidfVectorizer(stop_words=[])
transfer2 = CountVectorizer(stop_words=[])
data01 = transfer1.fit_transform(data1)
data02 = transfer2.fit_transform(data1)
# 转换成完整矩阵
arr1 = data01.toarray()
arr2 = data02.toarray()
# 获取特征名称
feature1 = transfer1.get_feature_names_out()
feature2 = transfer2.get_feature_names_out()
# 创建DataFrame对象
Data1 = pd.DataFrame(arr1,columns=feature1)
Data2 = pd.DataFrame(arr2,columns=feature2)
Data1
Data2

无量纲化-预处理

无量纲,即没有单位的数据

无量纲化包括"归一化"和"标准化", 为什么要进行无量纲化呢?

(1) MinMaxScaler 归一化

通过对原始数据进行变换把数据映射到指定区间(默认为0-1)

<1>归一化公式:

这里的 𝑥min 和 𝑥max 分别是每种特征中的最小值和最大值,而 𝑥是当前特征值,𝑥scaled 是归一化后的特征值。

若要缩放到其他区间,可以使用公式:x=x*(max-min)+min;

<2>归一化API

sklearn.preprocessing.MinMaxScaler(feature_range)

参数:feature_range=(0,1) 归一化后的值域,可以自己设定

fit_transform函数归一化的原始数据类型可以是list、DataFrame和ndarray, 不可以是稀疏矩阵

fit_transform函数的返回值为ndarray

<3>归一化示例
from sklearn.preprocessing import MinMaxScaler
data = [[19,12,15],[23,15,25],[25,18,20]]
# 定义转换后的值域
transfer = MinMaxScaler(feature_range=(0,1))
# 转换
data1 = transfer.fit_transform(data)
print(data1)

<4>缺点

最大值和最小值容易受到异常点影响,所以鲁棒性较差。所以常使用标准化的无量钢化

(2)StandardScaler 标准化

<1>标准化公式

最常见的标准化方法是Z-score标准化,也称为零均值标准化。它通过对每个特征的值减去其均值,再除以其标准差,将数据转换为均值为0,标准差为1的分布。这可以通过以下公式计算:

其中,z是转换后的数值,x是原始数据的值,μ是该特征的均值,σ是该特征的标准差

<2> 标准化 API

sklearn.preprocessing.StandardScale

与MinMaxScaler一样,原始数据类型可以是list、DataFrame和ndarray

fit_transform函数的返回值为ndarray, 归一化后得到的数据类型都是ndarray

from sklearn.preprocessing import StandardScaler
data = [[19,12,15],[23,15,25],[25,18,20]]
transfer = StandardScaler()
data1 = transfer.fit_transform(data)
print(data1)

<3>标准化示例
from sklearn.preprocessing import StandardScaler
import numpy as np
import pandas as pd
# 获取数据
data = pd.read_csv('./src/dating.txt')
print(type(data))  # <class 'pandas.core.frame.DataFrame'>
print(data.shape)  # (1000, 4)
# 实例化一个转换器
transfer = StandardScaler()
# 调用fit_transform
data1 = transfer.fit_transform(data) # 把DataFrame数据进行标准化
print(data1[0:5])
data2 = data.values # 把DateFrame转为ndarray
data3 = transfer.fit_transform(data2) # 把ndarray数据进行标准化
print(data3[0:5])
data4 = data.values.tolist() # 把DateFrame转为list
data5 = transfer.fit_transform(data4) #把list数据进行标准化
print(data5[0:5])

特征降维

实际数据中,有时候特征很多,会增加计算量,降维就是去掉一些特征,或者转化多个特征为少量个特征

特征降维其目的:是减少数据集的维度,同时尽可能保留数据的重要信息。

特征选择

(a) VarianceThreshold 低方差过滤特征选择
  • Filter(过滤式): 主要探究特征本身特点, 特征与特征、特征与目标 值之间关联

    方差选择法: 低方差特征过滤
    • 如果一个特征的方差很小,说明这个特征的值在样本中几乎相同或变化不大,包含的信息量很少,模型很难通过该特征区分不同的对象,比如区分甜瓜子和咸瓜子还是蒜香瓜子,如果有一个特征是长度,这个特征相差不大可以去掉。

    • 过滤特征:移除所有方差低于设定阈值的特征

    • 设定阈值:选择一个方差阈值,任何低于这个阈值的特征都将被视为低方差特征。

    • 计算方差:对于每个特征,计算其在训练集中的方差(每个样本值与均值之差的平方,在求平均)。

from sklearn.feature_selection import VarianceThreshold
import pandas as pd
def variance_demo():# 1、获取数据,data是一个DataFrame,可以是读取的csv文件data=pd.DataFrame([[10,1,2],[11,3,3],[11,1,5],[11,5,7],[11,9,12],[11,3,14],[11,2,12],[11,6,9]])print(data)# 实例化一个转换器transfer = VarianceThreshold(threshold=1)# 调用fit_transformdata1 = transfer.fit_transform(data)print('data1:\n',data1)return None
variance_demo()

(b) 根据相关系数的特征选择

<1>理论

正相关性(Positive Correlation)是指两个变量之间的一种统计关系,其中一个变量的增加通常伴随着另一个变量的增加,反之亦然。在正相关的关系中,两个变量的变化趋势是同向的。当我们说两个变量正相关时,意味着:

  • 如果第一个变量增加,第二个变量也有很大的概率会增加。

  • 同样,如果第一个变量减少,第二个变量也很可能会减少。

<2>api:

scipy.stats.personr(x, y) 计算两特征之间的相关性

返回对象有两个属性:

statistic皮尔逊相关系数[-1,1]

pvalue零假设(了解),统计上评估两个变量之间的相关性,越小越相关

<3>示例:

from scipy.stats import pearsonr
import pandas as pd
def pear():# 获取数据data = pd.DataFrame([[1,2,3],[2,4,5],[3,5,4],[4,6,2],[5,8,5],[6,8,4]],columns=['1','2','3'])print(data)# 计算某两个变量之间的相关系数r1 = pearsonr(data['1'],data['2'])print(r1.statistic,r1.pvalue)
pear()

2.主成份分析(PCA)

PCA的核心目标是从原始特征空间中找到一个新的坐标系统,使得数据在新坐标轴上的投影能够最大程度地保留数据的方差,同时减少数据的维度。

原理:将不同特征看作向量投射到一条新向量上。达到降维的目的

投影到L上的值就是降维后保留的信息,投影到与L垂直的轴上的值就是丢失的信息。保留信息/丢失信息=信息保留的比例

api

  • from sklearn.decomposition import PCA

  • PCA(n_components=None)

  • 主成分分析

  • n_components:
    • 实参为整数时:表示减少到多少特征

    • 实参为小数时:表示降维后保留百分之多少的信息

n_components为小数,例(0.8),表示保留80%的特征信息来进行降维

n_components为整数,例(3),表示最后结果只保留下3个特征,来进行降维

示例:

from sklearn.decomposition import PCA
data = [[2,8,4,5], [6,3,0,8], [5,4,9,1]]
# 实例化转换器
transfer = PCA(n_components=0.8)
# 调用fit_transform
arr = transfer.fit_transform(data)
print('arr:\n',arr)

将4维特征降为了2维特征。

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

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

相关文章

CSS Module:告别类名冲突,拥抱模块化样式(5)

CSS Module 是一种解决 CSS 类名冲突的全新思路。它通过构建工具&#xff08;如 webpack&#xff09;将 CSS 样式切分为更加精细的模块&#xff0c;并在编译时将类名转换为唯一的标识符&#xff0c;从而避免类名冲突。本文将详细介绍 CSS Module 的实现原理和使用方法。 1. 思…

webpack案例----pdd(anti-content)

本文章中所有内容仅供学习交流&#xff0c;相关链接做了脱敏处理&#xff0c;若有侵权&#xff0c;请联系我立即删除&#xff01; 目标网址&#xff1a;aHR0cHM6Ly9waW5kdW9kdW8uY29tL2hvbWUvM2M 加密参数&#xff1a;anti_content 载荷里面的rn是不变的 发现加密是anti-con…

Flume1.9.0自定义Sink组件将数据发送至Mysql

需求 1、将Flume采集到的日志数据也同步保存到MySQL中一份&#xff0c;但是Flume目前不支持直接向MySQL中写数据&#xff0c;所以需要用到自定义Sink&#xff0c;自定义一个MysqlSink。 2、日志数据默认在Linux本地的/data/log/user.log日志文件中&#xff0c;使用Flume采集到…

T265相机双目鱼眼+imu联合标定(全记录)

最近工作用到t265&#xff0c;记录一遍标定过程 1.安装驱动 首先安装realsense驱动&#xff0c;因为笔者之前使用过d435i&#xff0c;装的librealsense版本为2.55.1&#xff0c;直接使用t265会出现找不到设备的问题&#xff0c;经查阅发现是因为realsense在2.53.1后就不再支持…

RT-DETR融合[CVPR2023]FasterNet种的PConv及相关改进思路

RT-DETR使用教程&#xff1a; RT-DETR使用教程 RT-DETR改进汇总贴&#xff1a;RT-DETR更新汇总贴 《Run, Don’t Walk: Chasing Higher FLOPS for Faster Neural Networks》 一、 模块介绍 论文链接&#xff1a;Run, Dont Walk: Chasing Higher FLOPS for Faster Neural Netwo…

【测试框架篇】单元测试框架pytest(2):用例编写

一、 前言 前面一章我们介绍了pytest环境安装和配置&#xff0c;并在pycharm里面实现了我们第一个pytest脚本。但是有些童鞋可能在编写脚本的时候遇到了问题&#xff0c;本文会讲一下我们编写pytest用例时需要遵守哪些既定的规则&#xff0c;同时这个规则也是可以修改的。 二…

嵌入式硬件电子电路设计(五)MOS管详解(NMOS、PMOS、三极管跟mos管的区别)

引言&#xff1a;在我们的日常使用中&#xff0c;MOS就是个纯粹的电子开关&#xff0c;虽然MOS管也有放大作用&#xff0c;但是几乎用不到&#xff0c;只用它的开关作用&#xff0c;一般的电机驱动&#xff0c;开关电源&#xff0c;逆变器等大功率设备&#xff0c;全部使用MOS管…

Conda安装软件错误(Pycharm)

conda的环境变量路径错误&#xff0c;比如移动了conda的文件位置conda的python版本不适合&#xff0c;python3.10现在更适合很多库conda对cmd没有初始化&#xff0c;conda init cmd.exe

《TCP/IP网络编程》学习笔记 | Chapter 11:进程间通信

《TCP/IP网络编程》学习笔记 | Chapter 11&#xff1a;进程间通信 《TCP/IP网络编程》学习笔记 | Chapter 11&#xff1a;进程间通信进程间通信的基本概念通过管道实现进程间通信通过管道进行进程间双向通信 运用进程间通信习题&#xff08;1&#xff09;什么是进程间通信&…

推荐一款高效的网站数据抓取工具:SysNucleus WebHarvy

SysNucleus WebHarvy是一款高效的网站数据抓取工具&#xff0c;支持从网页中提取文本、图像、URL 和电子邮件等内容&#xff0c;无需编写任何代码或脚本即可轻松实现数据抓取。用户可以通过 WebHarvy 内置的浏览器直观地浏览网页&#xff0c;指引软件提取所需的数据。它通过自动…

道陟科技EMB产品开发进展与标准设计的建议|2024电动汽车智能底盘大会

11月12日&#xff0c;2024电动汽车智能底盘大会在重庆开幕。会议由中国汽车工程学会主办&#xff0c;电动汽车产业技术创新战略联盟、中国汽车工程学会智能底盘分会、智能绿色车辆与交通全国重点实验室承办。本届大会围绕电动汽车智能底盘相关技术发展与融合&#xff0c;满足高…

Spring Authorization Server OAuth2.1

Spring Authorization Server介绍 Spring Authorization Server 是一个框架&#xff0c;它提供了 OAuth 2.1 和 OpenID Connect 1.0 规范以及其他相关规范的实现。 它建立在 Spring Security 之上&#xff0c;为构建 OpenID Connect 1.0 身份提供者和 OAuth2 授权服务器产品提供…

C++ 优先算法 —— 三数之和(双指针)

目录 题目&#xff1a;三数之和 1. 题目解析 2. 算法原理 ①. 暴力枚举 ②. 双指针算法 不漏的处理&#xff1a; 去重处理&#xff1a; 固定一个数 a 的优化&#xff1a; 3. 代码实现 Ⅰ. 暴力枚举&#xff08;会超时 O&#xff08;N&#xff09;&#xff09; Ⅱ.…

(三十三)队列(queue)

文章目录 1. 队列&#xff08;queue&#xff09;1.1 定义1.2 函数1.3 习题1.3.1 例题&#xff08;周末舞会&#xff09; 2. 双向队列&#xff08;deque&#xff09;2.1 定义2.2 函数2.3 题目2.3.1 例题&#xff08;打BOSS&#xff09; 1. 队列&#xff08;queue&#xff09; 队…

《FreeRTOS任务基础知识以及任务创建相关函数》

目录 1.FreeRTOS多任务系统与传统单片机单任务系统的区别 2.FreeRTOS中的任务&#xff08;Task&#xff09;介绍 2.1 任务特性 2.2 FreeRTOS中的任务状态 2.3 FreeRTOS中的任务优先级 2.4 在任务函数中退出 2.5 任务控制块和任务堆栈 2.5.1 任务控制块 2.5.2 任务堆栈…

springboot的社区团购系统设计录像

springboot的社区团购系统设计录像 springboot的社区团购系统设计

力扣每日一题

行变成回文&#xff1a; 对于每一行&#xff0c;遍历前半部分的元素&#xff0c;与后半部分的元素比较。如果不相等&#xff0c;计数器加 1&#xff0c;表示需要翻转一次。 列变成回文&#xff1a; 将矩阵转置&#xff0c;使用与行类似的方式对每一列进行统计。可以使用 Python…

linux c 语言回调函数学习

动机 最近在看 IO多路复用&#xff0c;包括 select() poll () epoll() 的原理以及libevent&#xff0c; 对里面提及的回调机制 比较头大&#xff0c;特写此文用例记录学习笔记。 什么是回调函数 网上看到的最多的一句话便是&#xff1a;回调函数 就是 函数指针的一种用法&am…

游戏引擎学习第九天

视频参考:https://www.bilibili.com/video/BV1ouUPYAErK/ 修改之前的方波数据&#xff0c;改播放正弦波 下面主要讲关于浮点数 1. char&#xff08;字符类型&#xff09; 大小&#xff1a;1 字节&#xff08;8 位&#xff09;表示方式&#xff1a;char 存储的是一个字符的 A…

# Python IDE的介绍和选择 --- 《跟着小王学Python》

Python IDE的介绍和选择 — 《跟着小王学Python》 《跟着小王学Python》 是一套精心设计的Python学习教程&#xff0c;适合各个层次的学习者。本教程从基础语法入手&#xff0c;逐步深入到高级应用&#xff0c;以实例驱动的方式&#xff0c;帮助学习者逐步掌握Python的核心概念…