当前位置: 首页 > news >正文

机器学习基础02

目录

1.特征工程

1.1特征工程概念

1.2特征工程的步骤

1.3特征工程-特征提取

1.3.1字典列表(json)特征提取

1.3.2文本特征提取

英文文本提取

中文文本提取

 1.3.3TF-IDF文本特征词的稀有程度特征提取

2.无量纲化

2.1归一化

2.2标准化

2.3fit、fit_transform、transform

3.特征降维

3.1特征选择

3.1.1低方差过滤特征选择

3.1.2相关系数特征选择

3.2主成份分析(PCA)


1.特征工程

1.1特征工程概念

对特征进行相关的处理

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

1.2特征工程的步骤

(1)特征提取, 如果不是像dataframe那样的数据,要进行特征提取,比如字典特征提取,文本特征提取

(2)无量纲化(预处理)

(3)特征降维

1.3特征工程-特征提取

稀疏矩阵

稀疏矩阵是指一个矩阵中大部分元素为零,只有少数元素是非零的矩阵。

三元组表 (Coordinate List, COO):三元组表就是一种稀疏矩阵类型数据,存储非零元素的行索引、列索引和值:

(行,列)   数据

非稀疏矩阵(稠密矩阵)

非稀疏矩阵,或称稠密矩阵,是指矩阵中非零元素的数量与总元素数量相比接近或相等。

1.3.1字典列表(json)特征提取

  • 创建转换器对象

 sklearn.feature_extraction.DictVectorizer(sparse=True)

参数:

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

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

  • 转换器对象:

transfer=fit_transform(data)

转换器对象调用fit_transform(data)函数,返回转化后的矩阵或数组

  • 获取特征名

 transfer.get_feature_names_out()

import numpy as np
from sklearn.feature_extraction import DictVectorizer'''
字典列表特征提取
'''
data = [{'city': '成都', 'age': 30, 'temperature': 20},{'city': '重庆', 'age': 33, 'temperature': 60},{'city': '北京', 'age': 42, 'temperature': 80},{'city': '上海', 'age': 22, 'temperature': 70}, ]# 转为稀疏矩阵
transfer = DictVectorizer(sparse=True)
date_new = transfer.fit_transform(data)
print(date_new,'\n')
# 不转成三元组的形式:toarray()
print(date_new.toarray(),'\n')# 不转成三元组表的形式:sparse=False
transfer = DictVectorizer(sparse=False)
# 特征
print(transfer.get_feature_names_out())
date_new = transfer.fit_transform(data)
print(date_new,'\n')

1.3.2文本特征提取

  • 英文文本提取

from sklearn.feature_extraction.text import CountVectorizer

transfer = CountVectorizer(stop_words=[ ])
data = transfer.fit_transform(documents)

关键字参数stop_words,表示词的黑名单

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

from sklearn.feature_extraction.text import CountVectorizer
import pandas as pddocuments = ["This is the first document.","This document is the second document.","And this is the third one.","Is this the first document?"
]# 创建转换器对象
transfer = CountVectorizer(stop_words=['is', 'and'])data = transfer.fit_transform(documents)
# print(data)feature_df = pd.DataFrame(data=data.toarray(),columns=transfer.get_feature_names_out()
)
print(feature_df)
  • 中文文本提取

下载jiaba

pip install jieba -i https://pypi.tuna.tsinghua.edu.cn/simple

API 

jieba.cut(str) 

import jieba
from sklearn.feature_extraction.text import CountVectorizer
import pandas as pddef chinese_cut(text):data = jieba.cut(text)data_lt = list(data)data_str = " ".join(data_lt)return data_strdocuments = ["这是第一份文件","此文档是第二个文档","这是第三个","这是第一份文件吗 "
]data_new = [chinese_cut(i) for i in documents]
transfer = CountVectorizer(stop_words=[])
data_final = transfer.fit_transform(data_new)df = pd.DataFrame(data=data_final.toarray(),columns=transfer.get_feature_names_out())
print(df)

 1.3.3TF-IDF文本特征词的稀有程度特征提取

词频(Term Frequency, TF),使词数归一化

TF = 该词在文章中出现的次数 / 文章词总数

逆文档频率(Inverse Document Frequency, IDF), 反映了该词在整个文档集合中的稀有程度

IDF = lg( 文档总数 / 包含该词的文档数+1 )

 包含该词的文档数+1:使分母不为0

 TF-IDF=TF*IDF

  •  API

from sklearn.feature_extraction.text import TfidfVectorizer

transfer = TfidfVectorizer(stop_words=[' '])
ti_idf = transfer.fit_transform(data_new)

import jieba
from sklearn.feature_extraction.text import TfidfVectorizerdef chinese_cut(text):data = jieba.cut(text)data_lt = list(data)data_str = " ".join(data_lt)return data_strdocuments = ["这是第一份文件","此文档是第二个文档","这是第三个","这是第一份文件吗 "
]
data_new = [chinese_cut(i) for i in documents]transfer = TfidfVectorizer(stop_words=['这是'])
ti_idf = transfer.fit_transform(data_new)df = pd.DataFrame(data=ti_idf.toarray(),columns=transfer.get_feature_names_out())
print(df)

2.无量纲化

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

2.1归一化

公式

将原始数据映射到指定区间(默认为0-1)

x-xmin / xmax-xmin = y-a / b-a

原始数据的数值范围:[xmin,xmax]

指定区间:[a,b]

将原始数据x映射到指定区间的结果为:y

API

sklearn.preprocessing.MinMaxScaler(feature_range)

参数:feature_range默认=(0,1) 为归一化后的值域,可以自定义

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

fit_transform函数的返回值为ndarray

示例

from sklearn.preprocessing import MinMaxScalerdata = [[2, 5, 4],[6, 1, 9],[3, 0, 7]]transfer = MinMaxScaler(feature_range=(0, 1))scaler_data = transfer.fit_transform(data)
print(scaler_data)

缺点

最大值和最小值易受到异常点影响,所以鲁棒性较差。

2.2标准化

在机器学习中,标准化是一种数据预处理技术,也称为数据归一化或特征缩放。它的目的是将不同特征的数值范围缩放到统一的标准范围,以便更好地适应一些机器学习算法,特别是那些对输入数据的尺度敏感的算法。

公式

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

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

API

sklearn.preprocessing.StandardScale

transfer = StandardScaler()

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

fit_transform函数的返回值为ndarray

示例

df = pd.DataFrame(data=[[1, 2, 3, 4],[2, 1, 3, 4],[3, 2, 3, 4],[4, 2, 3, 4]]
)
# 实例化一个转换器
transfer = StandardScaler()# DataFrame进行标准化
standard_data = transfer.fit_transform(data)
print(standard_data, '\n')# 将DF转化为list,进行标准化
df_lt = df.values.tolist()
standard_data = transfer.fit_transform(df_lt)
print(standard_data, '\n')# 将DF转化为ndarray,进行标准化
df_arr = df.values
standard_data = transfer.fit_transform(df_arr)
print(standard_data, '\n')

2.3fitfit_transform、transform

fitfit_transformtransform有不同的作用:

  • fit:

这个方法用来计算数据的统计信息,比如均值和标准差(在StandardScaler的情况下)。

fit仅用训练集上。

  • transform:

这个方法使用已经通过fit方法计算出的统计信息来转换数据。

可以应用于任何数据集,包括训练集、验证集或测试集,

使用的统计信息必须来自于训练集。

  • fit_transform:

这个方法相当于先调用fit再调用transform,但是它在内部执行得更高效。

仅在训练集上使用

一旦scaler对象在x_train使用fit(),就已经得到统计信息对于测试集x_test,只需要使用transform方法,因为我们不希望在测试集上重新计算任何统计信息,也不希望测试集的信息影响到训练过程。如果我们对x_test也使用fit_transform,测试集的信息就可能会影响到训练过程。

总结来说:常常是先fit(x_train)然后再transform(x_test,y_test)

3.特征降维

目的:降低数据集的维度,保留重要信息。

特征降维的好处:

减少计算成本:在高维空间中处理数据可能非常耗时且计算密集。降维可以简化模型,降低训练时间和资源需求。

去除噪声:高维数据可能包含许多无关或冗余特征,这些特征可能引入噪声并导致过拟合。降维可以帮助去除这些不必要的特征。

特征降维的方式:

  • 特征选择

    • 从原始特征集中挑选出最相关的特征

  • 主成份分析(PCA)

    • 主成分分析就是把之前的特征通过一系列数学计算,形成新的特征,新的特征数量会小于之前特征数量

3.1特征选择

3.1.1低方差过滤特征选择

from sklearn.feature_selection import VarianceThreshold

transfer = VarianceThreshold(threshold)

from sklearn.feature_selection import VarianceThresholddf = pd.DataFrame(data=[[1, 2, 5, 4],[2, 1, 3, 6],[3, 2, 3, 4],[4, 2, 3, 4]],columns=['f1', 'f2', 'f3', 'f4'])# 定义一个低方差过滤器
transfer = VarianceThreshold(threshold=0.6)
vt_data = transfer.fit_transform(df)
print(vt_data)

3.1.2相关系数特征选择

from scipy.stats import pearsonr

statistic,pvalue=pearsonr(data[" "], data[" "])

from scipy.stats import pearsonrdf = pd.DataFrame(data=[[1, -2, 5, 4],[2, -1, 3, 6],[3, -2, 3, 4],[4, -2, 3, 4]],columns =['f1','f2','f3','f4'])r1 = pearsonr(df['f1'],df['f2'])# 相关性
print(r1.statistic)#皮尔逊相关系数
print(r1.pvalue)#零假设,为非负数,越小越相关

3.2主成份分析(PCA)

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

API

from sklearn.decomposition import PCA

transfer=PCA(n_components=None)

参数:

n_components:

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

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

from sklearn.decomposition import PCA
import numpy as npdata =np.random.rand(3,4)
# print(data)transfer = PCA(n_components=2)
data_new = transfer.fit_transform(data)
print(data_new)
from sklearn.decomposition import PCA
import numpy as npdata =np.random.rand(3,4)
# print(data)transfer = PCA(n_components=0.8)
data_new = transfer.fit_transform(data)
print(data_new)

相关文章:

机器学习基础02

目录 1.特征工程 1.1特征工程概念 1.2特征工程的步骤 1.3特征工程-特征提取 1.3.1字典列表(json)特征提取 1.3.2文本特征提取 英文文本提取 中文文本提取 1.3.3TF-IDF文本特征词的稀有程度特征提取 2.无量纲化 2.1归一化 2.2标准化 2.3fit、fit_transform、transfo…...

element plus的表格内容自动滚动

<el-table:data"tableData"ref"tableRef"borderstyle"width: 100%"height"150"><el-table-column prop"date" label"名称" width"250" /><el-table-column prop"name" label&…...

哈佛商业评论 | 未来商业的技术趋势:百度李彦宏谈技术如何变革商业

在《哈佛商业评论》的HBR IdeaCast节目中&#xff0c;百度联合创始人、首席执行官兼董事长李彦宏分享了他对人工智能&#xff08;AI&#xff09;和其他技术趋势的见解。这期节目讨论了百度如何将生成式AI融入业务&#xff0c;以及这些技术如何重塑我们的生活和工作方式。让我们…...

Pytorch如何将嵌套的dict类型数据加载到GPU

在PyTorch中&#xff0c;您可以使用.to(device)方法将嵌套的字典中的所有支持的Tensor对象转移到GPU。以下是一个简单的例子 import torch# 假设您已经有了一个名为device的GPU设备对象 device torch.device("cuda:0" if torch.cuda.is_available() else "cp…...

Shell基础2

声明&#xff01; 学习视频来自B站up主 **泷羽sec** 有兴趣的师傅可以关注一下&#xff0c;如涉及侵权马上删除文章&#xff0c;笔记只是方便各位师傅的学习和探讨&#xff0c;文章所提到的网站以及内容&#xff0c;只做学习交流&#xff0c;其他均与本人以及泷羽sec团…...

7z 解压器手机版与解压专家:安卓解压工具对决

7z 解压器手机版和解压专家都是在安卓设备上广受欢迎的解压软件。7z 解压器手机版由深圳乡里云网络科技有限公司开发&#xff0c;大小为 32.8M&#xff0c;支持多种常见的压缩文件格式&#xff0c;如.zip、.rar、.7z 等。 它对安卓操作系统的特性和用户习惯进行了优化&#xf…...

C++清除所有输出【DEV-C++】所有编辑器通用 | 算法基础NO.1

各位小伙伴们&#xff0c;上一期的保留小数位数教学够用一辈子&#xff0c;有不错的点赞量&#xff0c;可我连一个粉丝铁粉都没有&#xff0c;你愿意做我的第一个铁粉吗&#xff1f;OK废话不多说&#xff0c;开始&#xff01; 温故与知心 可能你也学过&#xff0c;且是工作者…...

【Android、IOS、Flutter、鸿蒙、ReactNative 】启动页

Android 设置启动页 自定义 splash.xml 通过themes.xml配置启动页背景图 IOS 设置启动页 LaunchScreen.storyboard 设置为启动页 storyboard页面绘制 Assets.xcassets 目录下导入图片 AppLogo Flutter 设置启动页 Flutter Android 设置启动页 自定义 launch_background.xm…...

SpringBoot 2.2.10 无法执行Test单元测试

很早之前的项目今天clone现在&#xff0c;想执行一个业务订单的检查&#xff0c;该检查的代码放在test单元测试中&#xff0c;启动也是好好的&#xff0c;当点击对应的方法执行Test的时候就报错 tip&#xff1a;已添加spring-boot-test-starter 所以本身就引入了junit5的库 No…...

聊天服务器(8)用户登录业务

目录 登录状态业务层代码数据模型层代码记录用户的连接信息以及线程安全问题客户端异常退出业务 登录状态 登录且状态变为online 业务层代码 #include "chatservice.hpp" #include "public.hpp" #include <string> #include <muduo/base/Loggi…...

stm32在linux环境下的开发与调试

环境安装 注&#xff1a;文末提供一键脚本 下载安装stm32cubeclt 下载地址为&#xff1a;https://www.st.com/en/development-tools/stm32cubeclt.html 选择 linux版本下载安装 安装好后默认在家目录st下 > $ ls ~/st/stm32cubeclt_1.16.0 …...

flinkOnYarn并配置prometheus+grafana监控告警

flinkOnYarn并配置prometheusgrafana监控告警 一、相关服务版本&#xff1a; flink版本&#xff1a;1.17.2 pushgateway版本&#xff1a;1.10.0 prometheus版本&#xff1a;3.0.0 grafana-v11.3.0参考了网上的多个文档以及学习某硅谷的视频&#xff0c;总结了一下文档&#x…...

麒麟系统下docker搭建jenkins

首先我们需要创建宿主机挂载路径&#xff0c;我这里放在本地的/data/henkins/home,然后赋予权限&#xff0c;命令如下&#xff1a; mkdir -p /data/jenkins/home chown -R 1000:1000 /data/jenkins/home chmod -R 777 /data/jenkins/homedocker run -d --restart …...

论文阅读 - Causally Regularized Learning with Agnostic Data Selection

代码链接&#xff1a; GitHub - HMTTT/CRLR: CRLR尝试实现 https://arxiv.org/pdf/1708.06656v2 目录 摘要 INTRODUCTION 2 RELATED WORK 3 CAUSALLY REGULARIZED LOGISTIC REGRESSION 3.1 Problem Formulation 3.2 Confounder Balancing 3.3 Causally Regularized Lo…...

计算机网络之会话层

一、会话层的核心功能 会话层作为OSI模型的第五层&#xff0c;不仅承担着建立、管理和终止通信会话的基本任务&#xff0c;还隐含着许多复杂且关键的功能&#xff0c;这些功能共同确保了网络通信的高效、有序和安全。 1. 会话建立与连接管理&#xff1a; 身份验证与授权&…...

blind-watermark - 水印绑定

文章目录 一、关于 blind-watermark安装 二、bash 中使用三、Python 调用1、基本使用2、attacks on Watermarked Image3、embed images4、embed array of bits 四、并发五、相关 Project 一、关于 blind-watermark Blind watermark 基于 DWT-DCT-SVD. github : https://githu…...

reduce-scatter:适合分布式计算;Reduce、LayerNorm和Broadcast算子的执行顺序对计算结果的影响,以及它们对资源消耗的影响

目录 Gather Scatter Reduce reduce-scatter:适合分布式计算 Reduce、LayerNorm和Broadcast算子的执行顺序对计算结果的影响,以及它们对资源消耗的影响 计算结果理论正确性 资源消耗方面 Gather 这个也很好理解,就是把多个进程的数据拼凑在一起。 Scatter 不同于Br…...

DAY64||dijkstra(堆优化版)精讲 ||Bellman_ford 算法精讲

dijkstra&#xff08;堆优化版&#xff09;精讲 题目如上题47. 参加科学大会&#xff08;第六期模拟笔试&#xff09; 邻接表 本题使用邻接表解决问题。 邻接表的优点&#xff1a; 对于稀疏图的存储&#xff0c;只需要存储边&#xff0c;空间利用率高遍历节点链接情况相对容…...

使用Git工具在GitHub的仓库中上传文件夹(超详细)

如何使用Git工具在GitHub的仓库中上传文件夹&#xff1f; 如果觉得博主写的还可以&#xff0c;点赞收藏关注噢~ 第一步&#xff1a;拥有一个本地的仓库 可以fork别人的仓库或者自己新创建 fork别人的仓库 或者自己创建一个仓库 按照要求填写完成后&#xff0c;点击按钮创建…...

Python酷库之旅-第三方库Pandas(218)

目录 一、用法精讲 1021、pandas.DatetimeIndex.inferred_freq属性 1021-1、语法 1021-2、参数 1021-3、功能 1021-4、返回值 1021-5、说明 1021-6、用法 1021-6-1、数据准备 1021-6-2、代码示例 1021-6-3、结果输出 1022、pandas.DatetimeIndex.indexer_at_time方…...

铭豹扩展坞 USB转网口 突然无法识别解决方法

当 USB 转网口扩展坞在一台笔记本上无法识别,但在其他电脑上正常工作时,问题通常出在笔记本自身或其与扩展坞的兼容性上。以下是系统化的定位思路和排查步骤,帮助你快速找到故障原因: 背景: 一个M-pard(铭豹)扩展坞的网卡突然无法识别了,扩展出来的三个USB接口正常。…...

测试微信模版消息推送

进入“开发接口管理”--“公众平台测试账号”&#xff0c;无需申请公众账号、可在测试账号中体验并测试微信公众平台所有高级接口。 获取access_token: 自定义模版消息&#xff1a; 关注测试号&#xff1a;扫二维码关注测试号。 发送模版消息&#xff1a; import requests da…...

python打卡day49

知识点回顾&#xff1a; 通道注意力模块复习空间注意力模块CBAM的定义 作业&#xff1a;尝试对今天的模型检查参数数目&#xff0c;并用tensorboard查看训练过程 import torch import torch.nn as nn# 定义通道注意力 class ChannelAttention(nn.Module):def __init__(self,…...

相机Camera日志实例分析之二:相机Camx【专业模式开启直方图拍照】单帧流程日志详解

【关注我&#xff0c;后续持续新增专题博文&#xff0c;谢谢&#xff01;&#xff01;&#xff01;】 上一篇我们讲了&#xff1a; 这一篇我们开始讲&#xff1a; 目录 一、场景操作步骤 二、日志基础关键字分级如下 三、场景日志如下&#xff1a; 一、场景操作步骤 操作步…...

《用户共鸣指数(E)驱动品牌大模型种草:如何抢占大模型搜索结果情感高地》

在注意力分散、内容高度同质化的时代&#xff0c;情感连接已成为品牌破圈的关键通道。我们在服务大量品牌客户的过程中发现&#xff0c;消费者对内容的“有感”程度&#xff0c;正日益成为影响品牌传播效率与转化率的核心变量。在生成式AI驱动的内容生成与推荐环境中&#xff0…...

第一篇:Agent2Agent (A2A) 协议——协作式人工智能的黎明

AI 领域的快速发展正在催生一个新时代&#xff0c;智能代理&#xff08;agents&#xff09;不再是孤立的个体&#xff0c;而是能够像一个数字团队一样协作。然而&#xff0c;当前 AI 生态系统的碎片化阻碍了这一愿景的实现&#xff0c;导致了“AI 巴别塔问题”——不同代理之间…...

华硕a豆14 Air香氛版,美学与科技的馨香融合

在快节奏的现代生活中&#xff0c;我们渴望一个能激发创想、愉悦感官的工作与生活伙伴&#xff0c;它不仅是冰冷的科技工具&#xff0c;更能触动我们内心深处的细腻情感。正是在这样的期许下&#xff0c;华硕a豆14 Air香氛版翩然而至&#xff0c;它以一种前所未有的方式&#x…...

算法岗面试经验分享-大模型篇

文章目录 A 基础语言模型A.1 TransformerA.2 Bert B 大语言模型结构B.1 GPTB.2 LLamaB.3 ChatGLMB.4 Qwen C 大语言模型微调C.1 Fine-tuningC.2 Adapter-tuningC.3 Prefix-tuningC.4 P-tuningC.5 LoRA A 基础语言模型 A.1 Transformer &#xff08;1&#xff09;资源 论文&a…...

C/C++ 中附加包含目录、附加库目录与附加依赖项详解

在 C/C 编程的编译和链接过程中&#xff0c;附加包含目录、附加库目录和附加依赖项是三个至关重要的设置&#xff0c;它们相互配合&#xff0c;确保程序能够正确引用外部资源并顺利构建。虽然在学习过程中&#xff0c;这些概念容易让人混淆&#xff0c;但深入理解它们的作用和联…...

MFC 抛体运动模拟:常见问题解决与界面美化

在 MFC 中开发抛体运动模拟程序时,我们常遇到 轨迹残留、无效刷新、视觉单调、物理逻辑瑕疵 等问题。本文将针对这些痛点,详细解析原因并提供解决方案,同时兼顾界面美化,让模拟效果更专业、更高效。 问题一:历史轨迹与小球残影残留 现象 小球运动后,历史位置的 “残影”…...