spark/MLlib分类与回归、聚类

来源:互联网 发布:阿里云新用户邀请码 编辑:程序博客网 时间:2024/05/16 05:22

二分分类: SVM、逻辑回归、决策树、贝叶斯

多类分类:决策树、贝叶斯

回归:线性最小二乘法

聚类:kmeans、层次法(CURE、CHAMELEON)、网格算法(STING、WaveCluster)


与分类不同,分类是示例式学习,要求分类前指出各个类别,并断言每个元素映射到一个类别,儿聚类是观察式学习,在聚类前可以不知道类别甚至不给定类别数量,是无监督学习的一种。



二分分类

线性SVM


MLlib支持两个线性方法:线性支持向量机SVM和逻辑回归。在MLlib中,训练标签用1表示积极,用0表示消极。


线性SVM是大规模分类任务的标准方法。

L ( ; , y ) = max { 0 , 1  y w T } 

线性SVM算法输出一个SVM模型,对于一个新数据x,模型通过wTx进行预测。

逻辑回归

L ( ; , y ) = log ( 1 + exp (  y w T ) ) 


加载测试数据
val  data=MLUtils.loadLibSVMFile(sc,"svm_data.txt")

将测试数据划分为training和test (train,test)
val  splits = data.randomSplit(Array(0.6,0.4) , seed=11L)
val  training=splits(0).cache()
val  test=splits(1)

训练模型
val  numIterations =100
val  model=SVMWithSGD.train(training,numIterations)

清除默认阈值
model.clearThreshold()

计算新模型在测试数据集的效果
val scoreAndLabels = test.map{ point =>
      val score= model.predict(point.features)
      (score,point.label)
}

得到评估指标
val   metrics=new BinaryClassificationMetrics(scoreAndLabels)
val   auROC=metrics.areaUnderROC()

SVMWithSGD.train()训练方法使用默认参数。如需配置算法,
val  svmAlg=new SVMWithSGD()
svmAlg.optimizer.setNumIterations(200) .setRegParam(0.1).setUpdater(new L1Updater)
val  modelL1 =svmAlg.run(training)
其他MLlib算法也支持这种方式自定义。


Kmeans

从文件加载数据
val   data=sc.textFile("hdfs://")

使用spark util包中的generateKMeansRDD生成数据集,生成多个中心的混合高斯分布
val  data=KMeansDataGenerator.generateKMeansRDD(sc,pointnumber,numClusters,k,r)

转换为RDD
val  parseData=data.map( s=> Vectors.dense(s.split(' ').map(_.toDouble)))

生成模型
val  model=KMeans.train(parseData , numClusters,numIterations,runs)

数据中心点
model.clusterCenters

预测新数据点
model.predict(Vectors.dense("1.0 2.0 3.0".split(' ').map(_.toDouble)))

数据方差和
model.computeCost(parseData)

kmeans算法的结果好坏依赖于对初始聚类中心的选择,容易陷入局部最优解,对异常数据较为敏感,只能处理数值属性的数据,聚类结构可能不平衡。
 

 

0 0
原创粉丝点击