博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
FeatureSelectors
阅读量:6903 次
发布时间:2019-06-27

本文共 2741 字,大约阅读时间需要 9 分钟。

package mlimport java.utilimport org.apache.spark.mllib.linalg.{Vector, Vectors}import org.apache.spark.mllib.linalg.distributed.RowMatriximport org.apache.spark.rdd.RDDimport org.apache.spark.sql.{DataFrame, SQLContext, Row}import org.apache.spark.{SparkContext, SparkConf}import java.util.Arraysimport org.apache.spark.ml.attribute.{Attribute, AttributeGroup, NumericAttribute}import org.apache.spark.ml.feature.VectorSlicerimport org.apache.spark.sql.types.{DataTypes, StructField, StructType}/*VectorSlicer是一个转换器,输入一个特征向量输出一个特征向量,它是原特征的一个子集。这在从向量列中抽取特征非常有用。VectorSlicer接收一个拥有特定索引的特征列,它的输出是一个新的特征列,它的值通过输入的索引来选择。有两种类型的索引:1、整数索引表示进入向量的索引,调用setIndices()2、字符串索引表示进入向量的特征列的名称,调用setNames()。这种情况需要向量列拥有一个AttributeGroup,这是因为实现是通过属性的名字来匹配的。* */object FeatureSelectors {    def main(args: Array[String]) {        val conf = new SparkConf().setAppName("test").setMaster("local")        val sc = new SparkContext(conf)        val sql = new SQLContext(sc);        val data = Arrays.asList(//            Row(Vectors.dense(-2.0, 2, 0.0)),            Row(Vectors.sparse(3, Seq((0, -2.0), (1, 2.3)))),            Row(Vectors.dense(-2.0, 2, 0.0))        )        val defaultAttr: NumericAttribute = NumericAttribute.defaultAttr        val attrs = Array("f1", "f2", "f3").map(defaultAttr.withName)        val attrGroup = new AttributeGroup("userFeatures", attrs.asInstanceOf[Array[Attribute]])//从三列中选择两列参与模型训练        val dataset = sql.createDataFrame(data, StructType(Array(attrGroup.toStructField())))        dataset.printSchema()        val slicer = new VectorSlicer().setInputCol("userFeatures").setOutputCol("features")        //setIndices(Array(1)) 第二列   setNames(Array("f3")) 第三列//        slicer.setIndices(Array(1)).setNames(Array("f3"))        slicer.setIndices(Array(1)).setNames(Array("f3"))        // or slicer.setIndices(Array(1, 2)), or slicer.setNames(Array("f2", "f3"))        val output: DataFrame = slicer.transform(dataset)        output.printSchema()        output.show(false)        output.select("features").show()//        val out: RDD[Row] = output.rdd.map(row => Row(row.get(0),row.get(1)))        val out: DataFrame = output.select("features")        val rdd: RDD[Row] = out.toDF().map{ row =>            val r: Vector = row.getAs[Vector](0)        Row(r.apply(0),r.apply(1))//        println("---"+r.apply(0)+"---"+r.apply(1))        }        val fields = new util.ArrayList[StructField];        fields.add(DataTypes.createStructField("id", DataTypes.DoubleType, true));        fields.add(DataTypes.createStructField("feature", DataTypes.DoubleType, true));        val structType = DataTypes.createStructType(fields);        sql.createDataFrame(rdd,structType).show()    }}

  

转载于:https://www.cnblogs.com/xiaoma0529/p/7268303.html

你可能感兴趣的文章
ES与Javscript,JScript,ActionScript等脚本
查看>>
断点的技巧
查看>>
mariadb配置安装
查看>>
自己做网站怎么计算带宽需求
查看>>
流镜像,端口镜像
查看>>
3月23日作业
查看>>
C语言之枚举
查看>>
我的友情链接
查看>>
程序员学习能力提升三要素
查看>>
Mysqli的批量CRUD数据
查看>>
oracle 10g升级流程
查看>>
linux下DNS服务器的实现1
查看>>
BGinfo设置记录文档
查看>>
爆款打造之中小卖家如何做到零成本选/测款?(一)
查看>>
性能监测工具 dstat
查看>>
匿名无须交互输入用户名和密码的samba配置方法(security=user)
查看>>
我的友情链接
查看>>
UTM四公子
查看>>
6016.Cacti监控思科6509交换机告警灯和系统运行状态
查看>>
sed-n/N/g/G/h/H/x…
查看>>