三种特征选择方法及Spark MLlib调用实例.docx
《三种特征选择方法及Spark MLlib调用实例.docx》由会员分享,可在线阅读,更多相关《三种特征选择方法及Spark MLlib调用实例.docx(11页珍藏版)》请在三一办公上搜索。
1、三种特征选择方法及Spark MLlib调用实例三种特征选择方法及Spark MLlib调用实例 VectorSlicer 算法介绍: VectorSlicer是一个转换器输入特征向量,输出原始特征向量子集。VectorSlicer接收带有特定索引的向量列,通过对这些索引的值进行筛选得到新的向量集。可接受如下两种索引 1.整数索引,setIndices。 2.字符串索引代表向量中特征的名字,此类要求向量列有AttributeGroup,因为该工具根据Attribute来匹配名字字段。 指定整数或者字符串类型都是可以的。另外,同时使用整数索引和字符串名字也是可以的。不允许使用重复的特征,所以所选
2、的索引或者名字必须是没有独一的。注意如果使用名字特征,当遇到空值的时候将会报错。 输出将会首先按照所选的数字索引排序,其次按名字排序。 示例: 假设我们有一个DataFrame含有userFeatures列: userFeatures - 0.0, 10.0, 0.5 userFeatures是一个向量列包含3个用户特征。假设userFeatures的第一列全为0,我们希望删除它并且只选择后两项。我们可以通过索引setIndices(1,2)来选择后两项并产生一个新的features列: userFeatures | features -|- 0.0, 10.0, 0.5 | 10.0, 0.
3、5 假设我们还有如同f1,f2, f3的属性,那可以通过名字setNames(f2,f3)的形式来选择: userFeatures | features -|- 0.0, 10.0, 0.5 | 10.0, 0.5 f1, f2,f3 | f2, f3 调用示例: Scala: plain view plain copy import java.util.Arrays import org.apache.spark.ml.attribute.Attribute, AttributeGroup, NumericAttribute import org.apache.spark.ml.featur
4、e.VectorSlicer import org.apache.spark.ml.linalg.Vectors import org.apache.spark.sql.Row import org.apache.spark.sql.types.StructType val data = Arrays.asList(Row(Vectors.dense(-2.0, 2.3, 0.0) val defaultAttr = NumericAttribute.defaultAttr val attrs = Array(f1, f2, f3).map(defaultAttr.withName) val
5、attrGroup = new AttributeGroup(userFeatures, attrs.asInstanceOfArrayAttribute) val dataset = spark.createDataFrame(data, StructType(Array(attrGroup.toStructField) val slicer = new VectorSlicer.setInputCol(userFeatures).setOutputCol(features) slicer.setIndices(Array(1).setNames(Array(f3) / or slicer.
6、setIndices(Array(1, 2), or slicer.setNames(Array(f2, f3) val output = slicer.transform(dataset) println(output.select(userFeatures, features).first) Java: java view plain copy import java.util.List; import mon.collect.Lists; import org.apache.spark.ml.attribute.Attribute; import org.apache.spark.ml.
7、attribute.AttributeGroup; import org.apache.spark.ml.attribute.NumericAttribute; import org.apache.spark.ml.feature.VectorSlicer; import org.apache.spark.ml.linalg.Vectors; import org.apache.spark.sql.Dataset; import org.apache.spark.sql.Row; import org.apache.spark.sql.RowFactory; import org.apache
8、.spark.sql.types.*; Attribute attrs = new Attribute NumericAttribute.defaultAttr.withName(f1), NumericAttribute.defaultAttr.withName(f2), NumericAttribute.defaultAttr.withName(f3) ; AttributeGroup group = new AttributeGroup(userFeatures, attrs); List data = Lists.newArrayList( RowFactory.create(Vect
9、ors.sparse(3, new int0, 1, new double-2.0, 2.3), RowFactory.create(Vectors.dense(-2.0, 2.3, 0.0) ); Dataset dataset = spark.createDataFrame(data, (new StructType).add(group.toStructField); VectorSlicer vectorSlicer = new VectorSlicer .setInputCol(userFeatures).setOutputCol(features); vectorSlicer.se
10、tIndices(new int1).setNames(new Stringf3); / or slicer.setIndices(new int1, 2), or slicer.setNames(new Stringf2, f3) Dataset output = vectorSlicer.transform(dataset); System.out.println(output.select(userFeatures, features).first); Python: python view plain copy from pyspark.ml.feature import Vector
11、Slicer from pyspark.ml.linalg import Vectors from pyspark.sql.types import Row df = spark.createDataFrame( Row(userFeatures=Vectors.sparse(3, 0: -2.0, 1: 2.3),), Row(userFeatures=Vectors.dense(-2.0, 2.3, 0.0),) slicer = VectorSlicer(inputCol=userFeatures, outputCol=features, indices=1) output = slic
12、er.transform(df) output.select(userFeatures, features).show RFormula 算法介绍: RFormula通过R模型公式来选择列。支持R操作中的部分操作,包括, ., :, +以及-,基本操作如下: 1. 分隔目标和对象 2. +合并对象,“+ 0”意味着删除空格 3. :交互 4. . 除了目标外的全部列 假设a和b为两列: 1. y a + b表示模型y w0 + w1 * a +w2 * b其中w0为截距,w1和w2为相关系数。 2. y a + b + a:b 1表示模型y w1* a + w2 * b + w3 * a *
13、b,其中w1,w2,w3是相关系数。 RFormula产生一个向量特征列以及一个double或者字符串标签列。如果类别列是字符串类型,它将通过StringIndexer转换为double类型。如果标签列不存在,则输出中将通过规定的响应变量创造一个标签列。 示例: 假设我们有一个DataFrame含有id,country, hour和clicked四列: id | country |hour | clicked -|-|-|- 7 | US | 18 | 1.0 8 | CA | 12 | 0.0 9 | NZ | 15 | 0.0 如果我们使用RFormula公式clicked country
14、+ hour,则表明我们希望基于country和hour预测clicked,通过转换我们可以得到如下DataFrame: id | country |hour | clicked | features | label -|-|-|-|-|- 7 | US | 18 | 1.0 | 0.0, 0.0, 18.0 | 1.0 8 | CA | 12 | 0.0 | 0.0, 1.0, 12.0 | 0.0 9 | NZ | 15 | 0.0 | 1.0, 0.0, 15.0 | 0.0 调用示例: Scala: plain view plain copy import org.apache.spa
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 三种特征选择方法及Spark MLlib调用实例 特征 选择 方法 Spark MLlib 调用 实例

链接地址:https://www.31ppt.com/p-3204480.html