spark mllib 基于卡方校验的特征选择

运行代码如下

package spark.FeatureExtractionAndTransformation

import org.apache.spark.mllib.feature.ChiSqSelector
import org.apache.spark.mllib.linalg.Vectors
import org.apache.spark.mllib.regression.LabeledPoint
import org.apache.spark.mllib.util.MLUtils
import org.apache.spark.{SparkConf, SparkContext}

/**
  * 基于卡方校验的特征选择
  * 卡方校验:
  * 在分类资料统计推断中一般用于检验一个样本是否符合预期的一个分布.
  * 是统计样本的实际值与理论推断值之间的偏离程度.
  * 卡方值越小,越趋于符合
  *
  * Created by eric on 16-7-24.
  */
object FeatureSelection {
  val conf = new SparkConf()                                     //创建环境变量
    .setMaster("local")                                             //设置本地化处理
    .setAppName("TF_IDF")                              //设定名称
  val sc = new SparkContext(conf)

  def main(args: Array[String]) {
    val data = MLUtils.loadLibSVMFile(sc, "/home/eric/IdeaProjects/wordCount/src/main/spark/FeatureExtractionAndTransformation/fs.txt")
    val discretizedData = data.map { lp => //创建数据处理空间
      LabeledPoint(lp.label, Vectors.dense(lp.features.toArray.map {x => x/2}))
    }

    val selector = new ChiSqSelector(2)//创建选择2个特性的卡方校验
    val transformer = selector.fit(discretizedData)//创建训练模型

    val filteredData = discretizedData.map { lp =>  //过滤前两个特性
      LabeledPoint(lp.label, transformer.transform(lp.features))
    }
    filteredData.foreach(println)

//    (0.0,[1.0,0.5])
//    (1.0,[0.0,0.0])
//    (0.0,[1.5,1.5])
//    (1.0,[0.5,0.0])
//    (1.0,[2.0,1.0])
  }
}

fs.txt

0 1:2 2:1 3:0 4:1
1 1:0 2:0 3:1 4:0
0 1:3 2:3 3:2 4:2
1 1:1 2:0 3:4 4:3
1 1:4 2:2 3:3 4:1

结果如下

 

转载于:https://my.oschina.net/sunmin/blog/723931

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值