SparkMllib之特征选择(了解)

特征选择的4种方式:

  • df.select("")
  • VectorSlicer
  • RFormula

着重讲卡一下卡方验证选择:

  • ChiSquare卡方选择

  • 如何进行特征选择?

    • 假设特征和标签列计算他们之间的相关性,如果特征和标签列比较相关的,选择该特征。如果不相关也就说独立的特征,直接舍弃
      在这里插入图片描述
      在这里插入图片描述
      代码演示:
import org.apache.spark.SparkContext
import org.apache.spark.ml.feature.{
    
    ChiSqSelector, ChiSqSelectorModel}
import org.apache.spark.ml.linalg.Vectors
import org.apache.spark.sql.{
    
    DataFrame, SparkSession}

object ChiSquareTest {
    
    
  def main(args: Array[String]): Unit = {
    
    
    //    * 1-准备环境
    val spark: SparkSession = SparkSession.builder().master("local[*]").appName("StringToIndexerTest").getOrCreate()
    val sc: SparkContext = spark.sparkContext
    sc.setLogLevel("WARN")
    import spark.implicits._
      
    //   * 2 读取数据
    val data = Seq(
      (7, Vectors.dense(0.0, 0.0, 18.0, 1.0), 1.0),
      (8, Vectors.dense(0.0, 1.0, 12.0, 0.0), 0.0),
      (9, Vectors.dense(1.0, 0.0, 15.0, 0.1), 0.0)
    )
    val df = spark.createDataset(data).toDF("id", "features", "clicked")
      
    //3-卡方验证选择
    val features: ChiSqSelector = new ChiSqSelector()
      .setLabelCol("clicked")   //设置标签列
      .setFeaturesCol("features")  //设置选择的特征
      .setNumTopFeatures(2)   //在4个features 随机抽取2个
    val ChiModel: ChiSqSelectorModel = features.fit(df)
    val dfResult: DataFrame = ChiModel.transform(df)
    dfResult.show(false)
  }
}

结果: 随机将如下两列选择了出来,说明这两列features与clicked最符合
在这里插入图片描述
关于SparkMllib特征工程的总结:

  • 五大组件:
    1-ML算法—分类-回归-聚类
    2-特征化—特征抽取、特征转换、特征选择、特征降维
    3-管道Pipeline—将特征数据处理的各个流程串联起来
    4-持久化persistence–将模型保存起来
    5-工具–线性代数、统计学、数据处理
  • SparkMllib中两个package
    1-spark.ml 基于Dataframe
    1-1 好处:DF多种数据源支持、优化引擎等
    1-2 好处:DF可以综合多种数据源统一的API
    1-3 好处:Pipeline
    2-spark.mllib 基于RDD
  • SparkMllib中数据类型是什么
    1-Vectors—>vector返回值
    2-Matrices---->Matirx
    3-LabeledPoint---->label+features
    4-libsvm数据格式---->classlabel index1:features1
    5-LocalMatrix—numCOls,numRows,按照列式存储的数据
    6-了解的分不是矩阵
  • SparkMllib的统计
    1-Statices.colState(RDD[Vector])
    2-Statices.corr(相关系数) 相关系数矩阵
    3-随机数:1-模拟数据 seed随机数种子–保证每次切分数据的结果相同
    2-df.randomSplit(Array(0.8,0.2),seed=123L)
  • 特征工程:
    特征提取:1-TFIDF词频和逆文档频率–选择出TFIDF高的数据作为关键词
    2-CountVectorizer计算词出现的次数
    特征转换:
    1-类别值属性的数值化
    Stringindexer【项目中使用】+IndexToString+OneHotEncoder
    2-连续值属性的离散化
    Binarizer,Bucketnizer,QuantileDiscriter分位数
    3-特征组合【用户画像项目中】
    VectorAssemble将离散的特征进行组合
    4-数值型数据的标准化
    StandardSclear—减去均值除以方差
    特征选择:
    1-VectorSlicer根据下标选择
    2-R公式—构建y=w0+w1x1+w2x2选择和标签列相关的特征列
    3-ChiSquareTest卡方验证----选择和标签列最相关的特征列

猜你喜欢

转载自blog.csdn.net/m0_49834705/article/details/113359492