特征的选择_02:RFormula
来源:互联网 发布:郑州网站排名优化 编辑:程序博客网 时间:2024/06/07 09:22
1.RFormula解释
使用RFormula选择特征列在Spark2.1.0版本只支持一部分R操作,包括:~’, ‘.’, ‘:’, ‘+’, and ‘-‘.
~ separate target and terms 分割标签与特征 + concat terms, “+ 0” means removing intercept 将两个特征相加 - remove a term, “- 1” means removing intercept 减去一个特征 : interaction (multiplication for numeric values, or binarized categorical values) 将多个特征相乘变成一个特征 . all columns except target 选取所有特征
什么,,,我没听懂。。。
举个小例子,假设有a,b两列作为2个特征,y是应变量。
y ~ a + b 表示建立这样的线性模型:y ~ w0 + w1 * a + w2 * b ,其中w0是截距。
y ~ a + b + a:b - 1 表示线性模型:y ~ w1 * a + w2 * b + w3 * a * b
(-1表示去掉截距,所以模型中没有w0了,a:b表示将ab两个特征相乘生成新的特征)
也就是说,我们可以通过这些简单的符号去表示线性模型。
RFormula可以生成多组列向量来表示特征,和一组double或string类型的列来标签。
就像在R中使用公式来建立线性模型一样,字符串类型的特征会被One-hot编码,数值类型的特征会被转换成double类型。如果标签列是字符串类型,会先将它转换成双精度的字符串索引。
如果在dataframe中不存在标签列,将会根据公式中的自变量去生成标签应变量作为输出。
什么,,,还是没懂。。。
来看下面的例子,假设有一个4列的dataframe:
如果使用RFormula,并且构建公式: clicked ~ country + hour,它表示通过country, hour这两个特征去预测clicked这个应变量。于是我们会得到以下dataframe:
features列为转换后的特征表示,因为country是字符串类型的类编变量,故进行one-hot编码变成了两列, hour是数值型的,故转换成double类型。
label列是应变量click列,双精度的类型保持不变。
2.sparkM代码
来看看以上例子的代码实现:
/** * Created by cc on 17-1-11. */object FeatureSelection { def main(args: Array[String]) { Logger.getLogger("org.apache.spark").setLevel(Level.WARN) val conf = new SparkConf().setAppName("FeatureSelection").setMaster("local") val sc = new SparkContext(conf) val spark = SparkSession .builder() .appName("Feature Extraction") .config("spark.some.config.option", "some-value") .getOrCreate() // 认为创建一个dataframe,有3行4列 val dataset = spark.createDataFrame(Seq( (7, "US", 18, 1.0), (8, "CA", 12, 0.0), (9, "NZ", 15, 0.0) )).toDF("id", "country", "hour", "clicked") // 训练 val formula = new RFormula() //创建一个对象 .setFormula("clicked ~ country + hour") //设置公式 .setFeaturesCol("feature") //设置选择出来的特征的列名 .setLabelCol("label") //设置标签列的列名 val model = formula.fit(dataset) //转换 val output = model.transform(dataset) output.show(false) output.select("feature", "label").show(false) spark.close() }}
打印结果:
+---+-------+----+-------+--------------+-----+|id |country|hour|clicked|feature |label|+---+-------+----+-------+--------------+-----+|7 |US |18 |1.0 |[0.0,0.0,18.0]|1.0 ||8 |CA |12 |0.0 |[1.0,0.0,12.0]|0.0 ||9 |NZ |15 |0.0 |[0.0,1.0,15.0]|0.0 |+---+-------+----+-------+--------------+-----++--------------+-----+|feature |label|+--------------+-----+|[0.0,0.0,18.0]|1.0 ||[1.0,0.0,12.0]|0.0 ||[0.0,1.0,15.0]|0.0 |+--------------+-----+
- 特征的选择_02:RFormula
- SparkML中三种特征选择算法(VectorSlicer/RFormula/ChiSqSelector)
- Spark特征处理之RFormula源码解析
- 特征的转换_02-连续变量的离散化
- 分类的特征选择
- 特征选择的方法
- 特征选择的方法
- 特征选择与特征抽取的区别
- 特征选择的一般步骤
- clementine上的特征选择
- 决策树学习的特征选择
- 局部放电的特征选择
- 文本的特征属性选择
- 常用的特征选择方法
- 特征选择的一些方法
- 特征选择之基于相关性的特征选择(CFS)
- 特征选择
- 特征选择
- 特征的选择_01:特征向量的切分
- iOS URL特殊字符处理
- MySQL删除重复记录
- 一个干货任意门
- android学习-----使用TabLayout实现Tab选项卡以及遇到的一些问题(一)
- 特征的选择_02:RFormula
- Centos搭建LAMP(详细过程)
- Android SystemProperties系统属性详解
- BP神经网络C++代码
- C++函数的递归调用
- CentOS 7 最小化安装后的注意事项及一些必备组件的安装
- C++ typedef用法详解(转)
- window.XMLHttpRequest对象详解
- winFrom中dataGridView绑定集合ILst