五台山,在Apache Spark上跑Logistic Regression算法,摸金校尉

本文旨在介绍运用机器学习算法,来介绍Apache Spark数据处理五台山,在Apache Spark上跑Logistic Regression算法,摸金校尉引擎。咱们一开端会先简略介绍一下Spark,然后咱们将开端实践一个机器学习的比如。咱们将运用Qualitative Bankruptcy数据集,来自UCI机器学习数据仓库。尽管Spark支撑一起Java,Scala,Python和R,在本教程中咱们将运用Scala作为编程言语。不必忧虑你没有运用Scala的经历。操练中的每个代码段,咱们都会具体解说一遍。

APACHE SPARK

Apache Spark是一个开源的集群核算结构,用Spark编写的运用程序能够比Hadoop MapReduce范式的速度高100倍以上。Spark的一个首要的特色,根据内存,运转速度快,不仅如此,杂乱运用在Spark体系上运转,也比根据磁盘的MapReduce更有用。Spark还旨在更通用,因而它供给了以下库:

Spark SQL,处理结构化数据的模块MLlib,可扩展的机器学习库GraphX,图和图的并行核算APISpark Streaming,可扩展的,可容错的流式核算程序

正如现已说到的,Spark支撑Java,Scala,Python和R编程言语。它还集成了其他大数据东西。特别是,Spark能够运转在Hadoop集群,能够拜访任何数据源,包括Hadoop Cassandra。

Spark中心概念

在一个高的笼统层面,一个Spark的运用程序由一个驱动程序作为进口,在一个集群上运转各种并行操作。驱动程序包括了你的运用程序的main函数,然后将这些运用程序分配给夏凌兮集群成员履行。驱动程序经过SparkContext目标来拜访核算集群。关于交互式的shell运用,SparkContext默许可经过sc变量拜访。

Spark的一个非常重要的概念是RDD–弹性分布式数据集。这是一个不行改动的目标调集。每个RDD会分红多个分区,每个分区可能在不同的群集节点上参加核算。RDD能够包括任何类型的Java,Scala目标,Python或R,包括用户自定义的类。RDDS的发生有两种根本方法:经过加载外部数据集或分配目标的调集如,list或set。

在创立了RDDs之后,咱们能够对RDDs做2种不同类型的操作:

Transformations - 转化操作,从一个RDD转化成别的一个RDDActions - 动作操作,经过RDD核算成果

RDDs经过lazy的方法核算 - 即当RDDs碰到Action操作时,才会开端核算。Spark的Transformations操作,都会堆集哈宝530成一条链,只有当需求数据的时分,才会履行这些Transformations操作。每一次RDD进行Action操作时,RDD都会从头生成。假如你期望某些中心的核算成果能被其他的Action操作复用,那么你需求调用Spa剑巫纪rk的RDD.persist实脾饮方歌()来保存中心数据。

Spark支撑多种运转形式,你能够运用交互式的Shell,或许独自运转一个standalone的Spark程序。不论哪一种方法,你都会有如下的工作流:

输入数据,用于生成RDD运用Transformations琦瑶门 操作转化数据集让Spark保存一些中心核算成果,用于复用核算运用Action操作,让Spark并行核算。Spark内部会主动优化和运转核算使命。

装置末世之妖花绚烂Apache Spark

为了开端运用Spark,需求先从官网下载。挑选“Pre-built for Hadoop 2.4 and later”版别然后点击“Direct 五台山,在Apache Spark上跑Logistic Regression算法,摸金校尉Download”。假如是Windows用户,主张将Spark放进姓名没有空格的文件夹中。比如说,将文件解压到:C:\spark。

正如上面所说的,咱们将会运用Scala编程言语。进入Spark的装置途径,运转如下指令:

// Linux and Mac users bin/spark-shell // Windows users bin\spark shell

然后你能够在操控台中看到Scala:

scala>

QUALITATIVE 破产分类

现实生活中的问题是能够用机器学习算法来猜测的。咱们将企图处理的,经过一个公司的定性信息,猜测该公司是否会破产。数据集能够从UCI机器学习库https://archive.ics.uci.edu/ml/datasets/qualitative_bankruptcy下载。在Spark的装置文件夹中,创立一个新的文件夹命名为playground。仿制 qualitative_bankruptcy.data.txt文件到这里边。这将是咱们的练习数据。

数据集包括250个实例,其间143个实例为非破产,107个破产实例。

每一个实五台山,在Apache Spark上跑Logistic Regression算法,摸金校尉例数据格式如下:

工业危险办理危险财政灵活性余鑫阳诺言竞争力经营危险

这些被称为定性参数,由于它们不能被表明为一个数字。每一个参数能够取下以下值:

P positiveA averageN negative

数据集的最终一个列是每个实例的分类:B为破产或NB非破产。

鉴于此五台山,在Apache Spark上跑Logistic Regression算法,摸金校尉数据集五台山,在Apache Spark上跑Logistic Regression算法,摸金校尉,咱们有必要练习一个模型,它能够用来分类新的数据实例,这是一个典型的分类问题。

处理问题的过程如下:

从qualitative_bankruptcy.data.txt文件中读取数据解析每一个qualitative值,并将其转化为double型数值。这是咱们的分类算法所需求的将数据集区分为练习和测试数据集运用练习数据练习模型核算测试数据的练习差错

SPARK LOGISTIC REGRESSION

咱们将用Spark的逻辑回归算法练习分类模型。假如你想知道更多逻辑回归算法的原理,你能够阅览以下教程http://technobium.com/logi五台山,在Apache Spark上跑Logistic Regression算法,摸金校尉stic-regression-using-apache-mahout。

在Spark的Scala Shell中张贴以下import句子:

import org.apache.spark.mllib.classification.{LogisticRegressionWithLBFGS, LogisticRegressionModel} import org.apache.spark.mllib.regression.LabeledPoint import org.apache.spark.mllib.linalg.{Vector, Vectors}

这将导入所需的库。

接下来咱们将创立一个Scala函数,将数据会集的qualitative数据转化为Double型数值。键入或张贴以下代码并回车,在Spark Scala Shell。

def getDoubleValue( input:String ) : Double = { var result:Double = 0.0 if (input == "P") result = 3.0 if (input == "A") result = 2.0 if (input == "N") result = 1.0 if (input == "NB") result = 1.0 if (input == "B") resu王范堂lt = 0.0 return result }

假如一切的运转都没有问题,你应该看到这样的输出:

getDoubleValue: (input: String)Double

现在,咱们能够读取到qualitative_bankruptcy.data.txt文件中的数据。从Spark的视点来看,这是一个Transformation操作。在这个阶段,数据实践上不被读入内存。如前所述,这是一三国之西州制霸个lazy的方法履行。实践的读取操作是由count()引发,这是一个Action操作。

val data = sc.textFile("playground/Qualitative_Bankruptcy.data.txt") data.count()

用咱们val关键字声明一个常量data。它是一个包括输入数据一切行的RDD。读操作被SC或sparkcontext上下文变量监听。count操作应回来以下成果:

res0: Long = 250

现在是时分为逻辑回归算法预备数据,将字符串转化为数值型。

val parsedData = data.map{line = val parts = line.split(",") LabeledPoint(getDoubleValue(parts(6)), Vectors.dense(parts.slice(0,6).map(x =getDoubleValue(x)))) }

在这里,咱们声明晰别的一个常量,命名为parsedData。关于data变量中的每一行数据,咱们将做以下操作:

运用“,”拆分字符串,并取得一个向量,命名为parts创立并回来一个LabeledPoint目标。每个LabeledPoint包括标签和值的向量。在咱们的练习数据,标签或类别(破产或非破产)放在最终一列,数组下标0到6。这是咱们运用的parts(6)。在保存标签之前,咱们将用getDoubleValue()函数将字符串转化为Double型。其他的值也被转化为Double型数值,并保存在一个名为稠密矢量的数据结构。这也是Spark的逻辑回归算法所需求的数据结构。

Spark十亿少女支撑map()转化操作,Action动作履行时,第一个履行的便是map()。

咱们来看看咱们预备好的数据,运用take():

parsedData.take(10)

上面的代码,通知Spark从parsedData数组中取出10个样本,并打印到操控台。相同的,take()操作之前,会先履行map()。输出成果如下浴血金三角:

res5: Array[org.apache.spark.mllib.reg金正贤下车ression.LabeledPoint] = Array((1.0,[3.0,3.0,2.0,2.0,2.0,3.0]), (1.0,[1.0,1.0,2.0,2.0,2.0,1.0]), (1.0,[2.0,2.0,2.0,2.0,2.0,2.0]), (1.0,[3.0,3.0,3.0,3.0,3.0,3.0]), (1.0,[1.0,1.0,3.0,3.0,3.0,1.0]), (1.0,[2.0,2.0,3.0,3.0,3.0,2.0]), (1.0,[3.0,3.0,2.0,3.0,3.0,3.0]), (1.0,[3.0,3.0,3.0,2.0,2.0,3.0]), (1.0,[3.0,3.0,2.0,3.0,2.0,3.0]), (1.0,[3.0,3.0,2.0,2.0,3.0,3.0]))

接着咱们区分一下练习数据和测试数据,将parsedData的60%分为练习数据,40%分为测试数据。

val splits = parsedData.randomSplit(Array(0.6, 0.4), seed = 11L) val trainingData = splits(0) val testData = splits(1)

练习数据和测试数据也能够像上面相同,运用take()者count()检查。

激动人心的五台山,在Apache Spark上跑Logistic Regression算法,摸金校尉时间,咱们现在开端运用Spark的LogisticRegressioinWithLBFGS()来练习模型。设置好分类个数,这里是2个(破产和非破产):

val model = new LogisticRegressionWithLBFGS().setNumClasses(2).run(trainingData)

当模型练习完,咱们能够运用testData来查验一下模型的犯错率。

val labelAndPreds = testData.map { point = val prsifucunediction = model.predict(point.features) (point.label, prediction) } val trainErr = labelAndPreds.filter(r = r._1 != r._2).count.toDouble / testData.count

变量lab赵爽怀孕三次elAndPreds保存了map()转化操作,map()将每一个行转化成二元组。二元组包括了testData的标签数据(point.label,分类数据)和猜测出来的分类数据(prediction)。模型运用point.features作为输入数据。

最终一行代码,咱们运用filter()转化操作和count()动作操作来核算模型犯错率。filter()中,保存猜测分类和所属分类不一致的元组。在Scala中_1和_2能够用来拜访元组的第一个元素和第二个元素。最终用猜测犯错的数量除以testData练习集的张强与王天一的恩怨数量,咱们能够得到模型犯错率:

trainErr: Double葬神诛仙 = 0.20430107526881722

总结

在这个教程中,你现已看到了Apache Spark能够用于机器学习的使命,如logistic regression。尽管这只对错分布式的单机环境的Scala shell demo,可是Spark的真实强壮在于分布式下的内存并行处理才能。

在大数据范畴,Spark是现在最活泼的开源项目,在曩昔几年已敏捷取得重视和开展。在曩昔的几年里。采访了超越2100受访者,各式各样的运用情况和环境床奴。

[参考资料]

“Learning Spark” by HoldenKarau, Andy Konwinski, Patrick Wendell and Matei Zaharia, O’Reilly Media 2015

Lichman, M. (2013). UCI Machine Learning Repository [http://archive.ics.uci.edu/ml]. Irvine, CA: University of California, School of Information and Computer Science

https://spark.apache.org/docs/latest/mllib-linear-methods.html#logistic-regression

https://spark.apache.org/docs/1.1.0/mllib-data-types.htm易人珠l

https://archive.ics.uci.edu/ml/datasets/Qualitative_Bankruptcy

原文来自:LOGISTIC REGRESSION USING APACHE SPARK(译者/施聪羽 审校/朱正贵 责编/仲浩)

关于译者:施聪羽,浩渺科技服务端研制工程师,重视大数据处理。

【预告】首届我国人工智能大会(CCAI 2015)将于7月26-27日在北京友谊宾馆举行。机器学习与形式识别、大数据的机会与应战、人工智能与认知科学、智能机器人四个主题专变豆菜家聚集。人工智能产品库将同步上线,预定咨询:QQ:1192936057。欢迎重视。

本文为CSDN编译收拾,未经答应不得转载,如需转载请联络market#csdn.net(#换成@)

点击展开全文

上一篇:

下一篇:

相关推荐