分類算法屬于<mark>監督式學習</mark>,根據已知標簽的樣本應用到分類模型中,能把數據庫中未知的類標簽數據進行歸類。
<br/>
分類在數據挖掘中是一項重要的任務,目前在商業上應用最多,常見的典型應用場景有流失預測、精確營銷、客戶獲取、個性偏好等。
<br/>
MLlib 目前支持分類算法有:邏輯回歸、支持向量機(SVM)、樸素貝葉斯和決策樹。
<br/>
**1. 支持向量機(SVM)**
(1)數據`$SPARK_HOME/data/mllib/sample_libsvm_data.txt`
```txt
0 128:51 129:159 130:253 131:159 ...
1 159:124 160:253 161:255 162:63 ...
```
(2)代碼
```scala
import org.apache.spark.mllib.classification.{SVMModel, SVMWithSGD}
import org.apache.spark.mllib.regression.LabeledPoint
import org.apache.spark.mllib.util.MLUtils
import org.apache.spark.{SparkConf, SparkContext}
import org.apache.spark.rdd.RDD
object SVMAlgorithm {
def main(args: Array[String]): Unit = {
val conf: SparkConf = new SparkConf().setMaster("local[*]")
.setAppName(this.getClass.getName)
val sc: SparkContext = SparkContext.getOrCreate(conf)
val data: RDD[LabeledPoint] = MLUtils.loadLibSVMFile(sc, "F:/mlib/sample_libsvm_data.txt")
// 將數據隨機分成兩份,一份占60%,另一份占40%
val splits: Array[RDD[LabeledPoint]] = data.randomSplit(Array(0.6, 0.4), seed = 11L)
// 將60%數據作為訓練集
val training: RDD[LabeledPoint] = splits(0).cache()
// 將40%數據作為測試集
val test: RDD[LabeledPoint] = splits(1)
// 迭代次數為100次
val numIterations = 100
// 進行模型訓練
val model: SVMModel = SVMWithSGD.train(training, numIterations)
// 可以選擇將模型保存
// 路徑會自動創建,如果路徑已經存在是會報錯的;路徑不能指定到文件,只能指定到目錄
// model.save(sc, "F:/mlib/model/svm")
// 可以調用load加載模型
// val model:SVMModel = SVMModel.load(sc, "F:/mlib/model/svm")
// 進行模型預測
val scoreAndLabels: RDD[Tuple2[Double, Double]] = test.map {
point =>
val score: Double = model.predict(point.features)
(score, point.label)
}
// 統計分類錯誤的樣本比例
val trainErr:Double = scoreAndLabels.filter(r => r._1 != r._2).count().toDouble / data.count()
println(trainErr) // 0.01
}
}
```