本文来自CSDN博客,作者ID:Quincy点击文末“阅读原文”查看原文
本文主要讲述如何利用Spark的MLlib构建机器学习模型并预测新的数据,具体的流程如下图所示:
加载数据对于数据的加载或保存,MLlib提供了MLUtils包,其作用是Hlprmthodstoload,savandpr-procssdatausdinMLLib.博客中的数据是采用Spark中提供的数据sampl_libsvm_data.txt,其有一百个数据样本,个特征。具体的数据形式如图所示::
加载libsvm
JavaRDDLabldPointlpdata=MLUtils.loadLibSVMFil(sc,this.libsvmFil).toJavaRDD();
LabldPoint数据类型是对应与libsvmfil格式文件,,具体格式为:
Labl(doubl类型),vctor(Vctor类型)
转化dataFram数据类型
JavaRDDRowjrow=lpdata.map(nwLabldPointToRow());StructTypschma=nwStructTyp(nwStructFild[]{
nwStructFild("labl",DataTyps.DoublTyp,fals,Mtadata.mpty()),
nwStructFild("faturs",nwVctorUDT(),fals,Mtadata.mpty()),});SQLContxtjsql=nwSQLContxt(sc);DataFramdf=jsql.cratDataFram(jrow,schma);
DataFram:DataFram是一个以命名列方式组织的分布式数据集。在概念上,它跟关系型数据库中的一张表或者1个Python(或者R)中的datafram一样,但是比他们更优化。DataFram可以根据结构化的数据文件、Hiv表、外部数据库或者已经存在的RDD构造。
SQLContxt:sparksql所有功能的入口是SQLContxt类,或者SQLContxt的子类。为了创建一个基本的SQLContxt,需要一个SparkContxt。
特征提取特征归一化处理
StandardScalrscalr=
nwStandardScalr().stInputCol("faturs").stOutputCol("normFaturs").stWithStd(tru);
DataFramscalrDF=scalr.fit(df).transform(df);scalr.sav(this.scalrModlPath)
利用卡方统计做特征提取
ChiSqSlctorslctor=nwChiSqSlctor().stNumTopFaturs().stFatursCol("normFaturs").stLablCol("labl").stOutputCol("slctdFaturs");
ChiSqSlctorModlchiModl=slctor.fit(scalrDF);
DataFramslctdDF=chiModl.transform(scalrDF).slct("labl","slctdFaturs");
chiModl.sav(this.faturSlctdModlPath);
训练机器学习模型(以SVM为例)测试新的样本测试新的样本前,需要将样本做数据的转化和特征提取的工作,所有刚刚训练模型的过程中,除了保存机器学习模型,还需要保存特征提取的中间模型。具体代码如下:
测试数据集
计算准确率
doublaccuracy=prdictRsult.filtr(nwPrdictAndScor()).count()*1.0/prdictRsult.count();
Systm.out.println(accuracy);
staticclassPrdictAndScorimplmntsFunctionTupl2Doubl,Doubl,Boolan
{
publicBoolancall(Tupl2Doubl,Doublt)
throwsExcption{
doublscor=t._1();doubllabl=t._2();Systm.out.print("scor:"+scor+",labl:"+labl);
if(scor=0.0labl=0.0)
rturntru;ls
if(scor0.0labl0.0)
rturntru;
lsrturnfals;
}
}
具体的代码安全治疗白癜风要多少钱丹芪偏瘫胶囊