企业🤖AI智能体构建引擎,智能编排和调试,一键部署,支持私有化部署方案 广告
分类算法属于<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 } } ```