首页 > 其他分享 >聊聊基于Alink库的特征工程方法

聊聊基于Alink库的特征工程方法

时间:2023-10-17 15:57:12浏览次数:25  
标签:基于 聊聊 特征向量 Alink 二手 3.0 new 2.0 Row

示例代码及相关内容来源于《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,二手,3.0,new,2.0,Row
From: https://www.cnblogs.com/zhiyong-ITNote/p/17769895.html

相关文章

  • fastify-awilix 基于awilix 的fastify 依赖注入扩展
    依赖注入是一个很不错的开发模式,可以帮助我们开发灵活的业务服务,fastify-awilix是基于awilix实现的一个fastify扩展说明目前nodejs的ioc框架也是很多的,fastify-awilix属于官方提供的一个扩展,还是挺不错的,值得试用下参考资料https://github.com/fastify/fastify-awilixhtt......
  • 基于落点打分的井字棋智能下棋算法(C语言实现)
    本文设计了一种基于落地打分的井字棋下棋算法,能够实现电脑不败,所以如果玩家会玩的话,一般是平局。算法核心电脑根据对落子位置的打分,选择分数最高的位置,若不同落点分数相同则随机选择位置(随机选择就不会显得那么呆板)所以怎么打分是关键!基本思想是,判断落点附近的位置的棋子类型,......
  • 北林OJ基于栈的后缀表达式求值
    思路1:(较易理解)#include<iostream>#include<iomanip>usingnamespacestd;#defineOK1#defineERROR0#defineMaxSize100typedefdoubleElemType;//定义栈_顺序栈structStack{ ElemType*top; ElemType*base; intstacksize;};intIsFull(Stacks);i......
  • 循序渐进介绍基于CommunityToolkit.Mvvm 和HandyControl的WPF应用端开发(9) -- 实现系
    在WPF应用端开发,它的界面类似于Winform端,因此我们也需要对系统的菜单进行动态配置,这样才能把系统的功能弹性发挥到极致,通过动态菜单的配置方式,我们可以很容易的为系统新增所需的功能,通过权限分配的方式,可以更有效的管理系统的菜单分配到不同的角色用户,本篇随笔介绍在WPF应用端中实......
  • DHorse v1.4.2 发布,基于 k8s 的发布平台
    版本说明优化特性在集群列表增加集群版本;修改Jvm的GC指标名;解决问题解决shell脚本换行符的问题;解决部署历史列表页,环境名展示错误的问题;解决指标收集功能的异常;升级指南升级指南DHorse介绍DHorse是一个简单易用的轻量级的云应用管理平台,不需要理解容器和k8s的概念,......
  • 【福利】基于matlab生成任意多面体有界 Voronoi 图附完整代码
    ✅作者简介:热爱科研的Matlab仿真开发者,修心和技术同步精进,matlab项目合作可私信。......
  • 聊聊 RXJS
    一什么是rxjs?RxJS(ReactiveExtensionsforJavaScript)是一个用于响应式编程的JavaScript库。它通过使用可观察对象(Observables)和操作符(Operators)来处理异步和事件驱动的代码。什么是响应式编程?程序的输入可以被当成一个数据流,例如excel表格的累加。响应式编程世界里知名度......
  • 基于 Debian 稳定分支发行版的Zephix 7 发布
    Zephix是一个基于Debian稳定版的实时 Linux 操作系统。它可以完全从可移动媒介上运行,而不触及用户系统磁盘上存储的任何文件。Zephix是一个基于Debian稳定版的实时Linux操作系统。它可以完全从可移动媒介上运行,而不触及用户系统磁盘上存储的任何文件。Zephix的......
  • 基于LEACH路由协议的网络性能matlab仿真,包括数据量,能耗,存活节点
    1.程序功能描述    LEACH的原理在于它将传感器节点分为两类:簇头节点和普通节点。普通节点将数据发送给距离自己最近的簇头节点,然后簇头节点将收集到的数据融合后发送给基站。这种机制可以减少网络中节点的能耗,并且能够提高数据融合比例,减少传输数据量。本课题将分别对比le......
  • Jestson Nano上基于openvino推理
    intelNCS2计算棒是由openvino支持的,但是目前openvino只有2022.3.1版本支持NCS2了,之后的版本都不支持计算棒了。本文记录一下再NVIDIAJetsonNano上用openvino实现NCS2的调用。通过交叉编译openvinosamples,通过benchmarkapp实现模型推理。环境配置openvino归档文件,可以再......