聊聊基于Alink库的特征工程方法
示例代码及相关内容来源于《Alink权威指南(Java版)》
独热编码
OneHotEncoder
是用于将类别型特征转换为独热编码的类。独热编码是一种常用的特征编码方式,特别适用于处理类别型特征,将其转换为数值型特征。
对于每个类别型特征,OneHotEncoder 将其编码成一个长度为类别数量的向量。
每个类别对应一个维度,如果样本的该特征值为该类别,则对应维度置1,其他维度置0。
示例:
List <Row> df = Arrays.asList(
Row.of("a", 1),
Row.of("b", 1),
Row.of("c", 1),
Row.of("e", 2),
Row.of("a", 2),
Row.of("b", 1),
Row.of("c", 2),
Row.of("d", 2),
Row.of(null, 1)
);
BatchOperator <?> inOp = new MemSourceBatchOp(df, "query string, weight int");
OneHotEncoder one_hot = new OneHotEncoder().setSelectedCols("query").setEncode(Encode.VECTOR);
// 或者单独设置输出列
// OneHotEncoder one_hot = new OneHotEncoder().setSelectedCols("query").setOutputCols("output");
one_hot.fit(inOp).transform(inOp).print();
输出结果如下所示:
query | weight |
---|---|
$5$0:1.0 | 1 |
$5$1:1.0 | 1 |
$5$2:1.0 | 1 |
$5$ | 2 |
$5$0:1.0 | 2 |
$5$1:1.0 | 1 |
$5$2:1.0 | 2 |
$5$3:1.0 | 2 |
$5$4:1.0 | 1 |
向量聚合
VectorAssembler
是用于将多列特征合并为单列特征向量的类。它将多个特征列的值合并为一个特征向量,通常用于特征工程的最后阶段,以准备机器学习模型的输入特征。
对于每个样本,VectorAssembler 将选定的特征列的值合并成一个特征向量。特征向量的维度等于选定的特征列数,每个维度对应一个特征列的值。
合并的特征列仅支持数值类型。
示例:
List <Row> df = Arrays.asList(
Row.of("0", "$6$1:2.0 2:3.0 5:4.3", "3.0 2.0 3.0"),
Row.of("1", "$8$1:2.0 2:3.0 7:4.3", "3.0 2.0 3.0"),
Row.of("2", "$8$1:2.0 2:3.0 7:4.3", "2.0 3.0 2.2")
);
MemSourceBatchOp data = new MemSourceBatchOp(df, "id string, c0 string, c1 string");
VectorAssembler res = new VectorAssembler()
.setSelectedCols("c0", "c1")
.setOutputCol("table2vec");
res.transform(data).print();
输出结果如下所示:
id | c0 | c1 | table2vec |
---|---|---|---|
0 | $6$1:2.0 2:3.0 5:4.3 | 3.0 2.0 3.0 | $9$1:2.0 2:3.0 ... 8:3.0 |
1 | $8$1:2.0 2:3.0 7:4.3 | 3.0 2.0 3.0 | $11$1:2.0 2:3.0 ... 10:3.0 |
2 | $8$1:2.0 2:3.0 7:4.3 | 2.0 3.0 2.2 | $11$1:2.0 2:3.0 ... 10:2.2 |
特征哈希
FeatureHasher
是用于将多列特征进行哈希映射,将特征合并成特征向量的类。
对于每个样本,将选定的特征列的值进行哈希映射,得到特征向量的维度。每个特征列的值经过哈希函数映射到特征向量的对应维度,形成一个特征向量。
这种方式可以降低特征维度,减少内存和计算资源的消耗,尤其适用于高维稀疏特征。
不限于数值类型的数据
示例:
List<Row> df1 = Arrays.asList(
Row.of(1.1, true, 2, "A"),
Row.of(1.1, false, 2, "B"),
Row.of(1.1, true, 1, "B"),
Row.of(2.2, true, 1, "A")
);
BatchOperator <?> inOp = new MemSourceBatchOp(df1, "double double, bool boolean, number int, str string");
FeatureHasher binarizer = new FeatureHasher().setSelectedCols("double", "bool", "number", "str").setOutputCol("output").setNumFeatures(3);
输出结果如下所示:
double | bool | number | str | output |
---|---|---|---|---|
1.1000 | true | 2 | A | $3$0:3.0 1:1.1 2:1.0 |
1.1000 | false | 2 | B | $3$0:3.0 1:1.1 2:1.0 |
1.1000 | true | 1 | B | $3$0:2.0 1:1.1 2:1.0 |
2.2000 | true | 1 | A | $3$0:2.0 1:2.2 2:1.0 |
文本特征生成
DocCountVectorizer
用于将文本数据转换为文本特征向量。它主要适用于文本数据的特征抽取和处理,以便进一步用于机器学习模型的训练和预测。主要用于自然语言处理(NLP)任务,如文本分类、情感分析、主题建模等。
特征抽取过程:
对于每个文本数据,
DocCountVectorizer
统计每个词汇在文本中的出现次数,作为特征向量的值。每个文本对应一个特征向量,特征向量的维度为词汇表的大小。
Alink库封装的DocCountVectorizer
支持生成多种类型的特征向量,支持IDF/WORD_COUNT/TF_IDF/Binary/TF。默认是WORD_COUNT特征类型,即单词出现的频率。
示例:
List <Row> df = Arrays.asList(
Row.of(0, "二手旧书:医学电磁成像"),
Row.of(1, "二手美国文学选读( 下册 )李宜燮南开大学出版社 9787310003969"),
Row.of(2, "二手正版图解象棋入门/谢恩思主编/华龄出版社"),
Row.of(3, "二手中国糖尿病文献索引"),
Row.of(4, "二手郁达夫文集( 国内版 )全十二册馆藏书")
);
BatchOperator <?> inOp = new MemSourceBatchOp(df, "id int, text string");
Pipeline pipeline = new Pipeline()
.add(new Segment().setSelectedCol("text")) // 分词
.add(new DocCountVectorizer().setFeatureType("TF_IDF").setSelectedCol("text").setOutputCol("vec"));
pipeline.fit(inOp).transform(inOp).print();
输出结果如下所示:
id | text | vec |
---|---|---|
0 | 二手 旧书 : 医学 电磁 成像 | $37$10:0.1831020481113516 14:0.1831020481113516 ... 34:0.1831020481113516 |
1 | 二手 美国 文学 选读 ( 下册 ) 李宜燮 南开大学 出版社 9787310003969 | $37$0:0.04077336356234972 1:0.04077336356234972 ... 35:0.06462425227459469 |
2 | 二手 正版 图解 象棋 入门 / 谢恩 思 主编 / 华龄 出版社 | $37$5:0.0915510240556758 6:0.0915510240556758 ... 36:0.1831020481113516 |
3 | 二手 中国 糖尿病 文献 索引 | $37$8:0.21972245773362198 9:0.21972245773362198 ... 32:0.21972245773362198 |
4 | 二手 郁达夫 文集 ( 国内 版 ) 全 十二册 馆藏 书 | $37$0:0.046209812037329684 1:0.046209812037329684 ... 30:0.07324081924454065 |
文本哈希特征生成
DocHashCountVectorizer
将文本数据中的每个词汇通过哈希函数映射到特征向量的维度,得到特征向量。
特征向量的维度由用户设置的参数 numFeatures
决定,通常较小以减少维度。
示例:
List <Row> df = Arrays.asList(
Row.of(0, "二手旧书:医学电磁成像"),
Row.of(1, "二手美国文学选读( 下册 )李宜燮南开大学出版社 9787310003969"),
Row.of(2, "二手正版图解象棋入门/谢恩思主编/华龄出版社"),
Row.of(3, "二手中国糖尿病文献索引"),
Row.of(4, "二手郁达夫文集( 国内版 )全十二册馆藏书")
);
BatchOperator <?> inOp = new MemSourceBatchOp(df, "id int, text string");
Pipeline pipeline = new Pipeline()
.add(new Segment().setSelectedCol("text"))
.add(new DocHashCountVectorizer().setFeatureType("TF_IDF").setSelectedCol("text").setOutputCol("vec").setNumFeatures(3));
pipeline.fit(inOp).transform(inOp).print();
输出结果如下所示:
id | text | vec |
---|---|---|
0 | 二手 旧书 : 医学 电磁 成像 | $3$0:-0.7331685343967134 1:-0.5207269374140805 |
1 | 二手 美国 文学 选读 ( 下册 ) 李宜燮 南开大学 出版社 9787310003969 | $3$0:-0.776296095243579 1:-0.24504797054780258 2:-0.21559781926450705 |
2 | 二手 正版 图解 象棋 入门 / 谢恩 思 主编 / 华龄 出版社 | $3$0:-0.7331685343967134 1:-0.17357564580469348 2:-0.30543024395805163 |
3 | 二手 中国 糖尿病 文献 索引 | $3$0:-0.2932674137586854 1:-0.4165815499312644 2:-0.366516292749662 |
4 | 二手 郁达夫 文集 ( 国内 版 ) 全 十二册 馆藏 书 | $3$0:-0.5865348275173707 1:-0.34715129160938696 2:-0.24434419516644132 |
Word2Vec
Word2Vec是Google在2013年开源的一个将词表转为向量的算法,其利用神经网络,可以通过训练,将词映射到K维度空间向量,它主要用于将单词表示成高维空间中的向量,以便能够在计算机上更好地处理自然语言文本。Word2Vec 提供了一种有效的方式来捕获单词之间的语义关系,这对于自然语言处理任务非常有用。
Word2Vec有两种主要模型:Skip-gram和Continuous Bag of Words (CBOW)。
Skip-gram模型是预测上下文单词,而CBOW模型是预测中心单词。
示例:
List <Row> df = Arrays.asList(
Row.of("A B C")
);
BatchOperator <?> inOp = new MemSourceBatchOp(df, "tokens string");
Word2Vec word2vec = new Word2Vec().setSelectedCol("tokens").setMinCount(1).setVectorSize(2).setOutputCol("vec");
word2vec.fit(inOp).transform(inOp).print();
输出结果如下所示:
tokens | vec |
---|---|
A B C | 0.7309789158041142 0.40841706187852966 |
聊聊基于Alink库的特征工程方法的更多相关文章
- 基于bs4库的HTML查找方法
基于bs4库的HTML查找方法 find_all方法 <>.find_all(name,attrs,recursive,string,**kwargs) 返回一个列表类型,内部存储查找的结 ...
- 【STM32学习笔记1】基于固件库的STM32_MDK工程模版
文章包含STM32固件库介绍和工程模板搭建两方面内容. 一.STM32固件库介绍 要建立工程模板,首先要对STM32的固件库有所了解.STM32的固件可以从ST官网下载,网址为:http://www. ...
- 手把手教你用Python实现自动特征工程
任何参与过机器学习比赛的人,都能深深体会特征工程在构建机器学习模型中的重要性,它决定了你在比赛排行榜中的位置. 特征工程具有强大的潜力,但是手动操作是个缓慢且艰巨的过程.Prateek Joshi,是 ...
- 2022年Python顶级自动化特征工程框架⛵
作者:韩信子@ShowMeAI 机器学习实战系列:https://www.showmeai.tech/tutorials/41 本文地址:https://www.showmeai.tech/artic ...
- Alink漫谈(十) :特征工程 之 特征哈希/标准化缩放
Alink漫谈(十) :特征工程之特征哈希/标准化缩放 目录 Alink漫谈(十) :特征工程之特征哈希/标准化缩放 0x00 摘要 0x01 相关概念 1.1 特征工程 1.2 特征缩放(Scali ...
- 【GMT43智能液晶模块】基于HAL库的SDRAM和LCD驱动例程(MDK工程&CubeMX工程)
说明: 1.该工程基于HAL库实现动态存储器SDRAM驱动以及液晶控制器LCD驱动. 2.工程通过STM32CubeMX(Version 4.22.0)配置生成,可直接打开进行配置. 3.KEIL M ...
- 基于bs4库的HTML标签遍历方法
基于bs4库的HTML标签遍历方法 import requests r=requests.get('http://python123.io/ws/demo.html') demo=r.text HTM ...
- 基于bs4库的HTML内容查找方法
一.信息提取实例 提取HTML中所有的URL链接 思路:1)搜索到所有的<a>标签 2)解析<a>标签格式,提取href后的链接内容 >>> import r ...
- python 机器学习库 —— featuretools(自动特征工程)
文档:https://docs.featuretools.com/#minute-quick-start 所谓自动特征工程,即是将人工特征工程的过程自动化.以 featuretools 为代表的自动特 ...
- 使用sklearn做单机特征工程
目录 1 特征工程是什么?2 数据预处理 2.1 无量纲化 2.1.1 标准化 2.1.2 区间缩放法 2.1.3 标准化与归一化的区别 2.2 对定量特征二值化 2.3 对定性特征哑编码 2.4 缺 ...
随机推荐
- ubuntu22.04下编译ffmpeg-6.0,并且激活x264编码功能。记录一下踩坑(ERROR: x264 not found using pkg-config)
一.编译x264(在编译前确保安装了pkg-config,默认在/usr/share下) 1.下载x264源代码:(我下载到了~/Downloads下,各位随意就好) git clone https: ...
- Jenkins自动化测试构建完成 发送钉钉消息
背景 有时自动化测试完成后,我们可以通过构建完成后给钉钉群发消息,这样就能及时通知到所有人员了. 接入流程 1:建立钉钉机器人,可以通过群助手,添加机器人,增加WebHook自定义接入,然后添加完成会 ...
- 浅析synchronized锁升级的原理与实现
背景 在多线程编程中,线程同步是一个关键的概念,它确保了多个线程对共享资源的安全访问.Java中的synchronized关键字是一种常用的线程同步机制,它不仅提供了互斥访问的功能,还具备锁升级的特性 ...
- 【SpringBoot】定时任务
SpringBoot实现定时任务 SpringBoot创建定时任务,目前主要有以下三种实现方式: 基于注解(@Scheduled): 基于注解@Scheduled默认为单线程,开启多个任务时,任务的执 ...
- adb如何做Android ui自动化(这一篇就够了)
一.简介 我们都知道在做Android ui自动化的时候用的是appium,环境搭建贼难受.如果我们在工作中遇到需要实现简单的自动化功能,可以直接使用adb来完成,无需去搭建繁琐的appium.ADB ...
- Oracle批量处理SQL
批量更新且更新字段数字需要递增 示例: DECLARE n int; -- 定义变量 BEGIN n:=1000010; --为n 赋值 FOR i IN (SELECT AGENCY.ID FROM ...
- 【Azure Event Hub】Event Hub的Process Data页面无法通过JSON格式预览数据
问题描述 在Event Hub的门户页面中,可以通过Process Data页面查看Event Hub中的数据,但是当使用JSON格式预览时(View in JSON),却出现错误. 消息一: No ...
- Fastjson1.2.24漏洞复现-基于vulhub漏洞平台(文件上传写入-反弹shell)
Fastjson1.2.24漏洞复现-基于vulhub漏洞平台 环境准备: 192.168.59.130 攻击机 window10 192.168.59.135 靶机 centos8 声明:不涉及互联 ...
- enumerate()使用方法
enumerate()(单词意思是枚举的意思)是python中的内置函数, enumerate(X,[start=0]) 函数中的参数X可以是一个迭代器(iterator)或者是一个序列, start ...
- Django:数据库驱动安装
import pymysql pymysql.install_as_MySQLdb() 常见MySQL驱动介绍: MySQL-python:也就是MySQLdb.是对C语言操作MySQL数据库的一个简 ...