特征选择的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卡方验证----选择和标签列最相关的特征列