Spark ml 或 mlib 常用便利函数方法与常忽略的问题

****************spark**************

一、样本数据转换处理

虽然是多余的话语,但是还是得提醒各位,mllib和ml的Vector类是不一样的!

(一)格式转换

对于原始数据中的字符变量,我们可以通过自定义装换方法或者导入HashTF()装换,后者方法具体操作如下:

import org.apache.spark.ml.feature.HashingTF

val tf = new HashingTF()
        tf.setInputCol("str_arr")//这是string类型array列的col名
        tf.setOutputCol("str2dou")//输出Vector类型col名字
        tf.setNumFeatures(32)//设置生成维度值
        val df2_1 = tf.transform(df1_1)//输入df名为df1_1生成新df名为df2_1

注意:ml和mllib的Vector的HashingTF是不一样的别导错~~~

(二)合并Vector(Array和Vector,Vector和Vector)

这有两个方法,一:把df转为rdd后把rdd中想合并Vector或Array变量转成seq后的使用Vectors生成新Vector,如下:

//本处合并Array和Vector,其他情况以此类推即可
val df2_2=df2_1.rdd.map(e=>{
    val vector=e.getAs("vector").asInstanceOf[org.apache.spark.ml.linalg.Vector]
    val vector_arr =vector.toArray
    val array =e.getAs("arr").asInstanceOf[mutable.Seq[Double]]
    val arr = ArrayBuffer[Double]()
    val new_arr = ArrayBuffer[Double]()
    for (i<-str_arr2){
        new_arr .append(i)
    }
        val pp=e.getAs("dou_arr").asInstanceOf[mutable.Seq[Double]]//我用array不行,只能用seq来代替。
    for(i<-arr){
        new_arr .append(i)
    }
    val new_vector = Vectors.dense(new_arr.toArray)
    (new_vector)
}

另一个方法是在直接对整体df进行操作,利用VectorAssembler把同一地方里两个Vector合并成一个新的Vector(原来的vector会保留)方法如下

import org.apache.spark.ml.feature.VectorAssembler
//合并两个向量
  val assembler = new VectorAssembler()
  assembler.setInputCols(Array("vector_1","vector_2"))//需要合并的vector列名array数组
  assembler.setOutputCol("vector_new")//设置生成合并vector的列名
  val df2 = assembler.transform(df1)//对df1对应col进行处理返回新df  df2

二、常见算法

具体算法,请自行百度,我就不Ctrl+C和Ctrl+V了。以下只是本人调优方法。

(1)、分类模型

1.1逻辑回归(LogisticRegression)

逻辑回归.前期设置迭代次数越大,效果能有较明显上升。我们一般设置到100次就差不多可以达到较理想效果。


1.2决策树(DecisionTreeClassifier)

调高树的深度也可以提高但也是有限的,同时面对海量数据,树越深计算时长越长,对于速率和分类效果之间的取舍就得由当事人决定了。


1.3支持向量机(SVMWithSGD)

样本维度对该模型运算效率影响十分显著。故当维度过高时,对自变量参数降维是很有必要,降维常用方法有PCA等。


1.6朴素贝叶斯(NaiveBayes)

贝叶斯定理假设不同属性值之间是不相关联的,故自变量参数如果关联性较强就不适用该模型


1.5神经网络

    1.5.1卷积神经网络

       1.5.1.1激活函数(均为非线性激活函数)

               Sigmoid、Leaky ReLU、tanh、Maxout、ReLu、ELU。

       1.5.1.2卷积

       P=边距(padding)     S=步长(stride)

       输出尺寸 = (n-p) / s + 1

      参数数目 = kw * kh * Ci * Co   (Ci :输入通道数,Co :输出通道数,(Kw,Kh):卷积核长宽)

       1.5.1.3池化——最大值池化

      

待学中


 

(2)、聚类模型

1.1K均值(K-Means)

总结中

(3)、关联模型

(待补充)

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值