在实际运用算法建模过程中,spark自带的ml库中不一定都包含所需算法,这时就需要加载第三方算法包jar,主要有两种方式:
##方法一:首先在maven官网上找到相应算法对应的Jar包
官网地址:https://mvnrepository.com/
##方法二:若未找到,则到GitHub上搜索对应算法源码,操作步骤如下:
先使用IntelliJ IDEA打开算法工程文件
在右侧窗口依次点击Maven Projects、Lifecycle、package
若出现报错,定位错误原因之后,点击clean重新进行打包
###注:在正式打jar包之前,将原有工程中的test目录先剪切出来,如果不剪切出来则需要加入某些代码跳过test目录,后续再研究
//在spark-shell中加载打的jar包,类似如下写法
./spark-shell \
--jars /root/spark-iforest-2.2.0.jar
//已打包操作成功,启动spark-shell通过命令行运行
import org.apache.spark.ml.feature.StringIndexer
import org.apache.spark.ml.feature.VectorAssembler
import org.apache.spark.ml.iforest.IForest
import org.apache.spark.ml.Pipeline
import org.apache.spark.ml.evaluation.BinaryClassificationEvaluator
// 读取数据
val dataset = (spark.read.option("inferSchema", "true")
.csv("/user/spark/data/breastw.csv"))
// 对标签值重新编码
// Index label values: 2 -> 0, 4 -> 1
val indexer = (new StringIndexer()
.setInputCol("_c10")
.setOutputCol("label"))
//构建特征向量
val assembler = (new VectorAssembler()
.setInputCols(Array("_c1", "_c2", "_c3", "_c4", "_c5", "_c6", "_c7", "_c8", "_c9"))
.setOutputCol("features"))
//Isolation Forest初始化
val iForest = (new IForest()
.setNumTrees(100)
.setMaxSamples(256)
.setContamination(0.35)
.setBootstrap(false)
.setMaxDepth(100)
.setSeed(123456L))
// 构建pipeline机器学习工作流
val pipeline = new Pipeline().setStages(Array(indexer, assembler, iForest))
// 训练模型
val model = pipeline.fit(dataset)
// 模型预测
val predictions = model.transform(dataset)
// 构建模型效果评估器
val evaluator = (new BinaryClassificationEvaluator()
.setLabelCol("label")
.setRawPredictionCol("prediction")
.setMetricName("areaUnderROC"))
// 计算Auc值
val auc = evaluator.evaluate(predictions)
println(s"The model's auc: $auc")