栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 前沿技术 > 云计算 > 云平台

MLib基础

云平台 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

MLib基础

一、概念

1)MLib是一个构建在Spark上的专门针对大数据处理的并发式高速机器学习库,采用较为先进的迭代式、内存存储的分析计算,使得数据的计算处理速度大大高于普通的数据处理引擎

2)目前MLlib中已经有通用的学习算法和工具类,包括统计、分类、回归、聚类、降维等。

3)MLlib采用Scala语言编写,Scala语言是运行在JVM上的一种函数式编程语言,特点就是可移植性强,“一次编写,到处运行”是其最重要的特点。借助于RDD数据统一输入格式,让用户可以在不同的IDE上编写数据处理程序,通过本地化测试后可以在略微修改运行参数后直接在集群上运行。对结果的获取更为可视化和直观,不会因为运行系统底层的不同而造成结果的差异与改变。

二、MLib基本数据类型

RDD是MLlib专用的数据格式,它参考了Scala函数式编程思想,并大胆引入统计分析概念,将存储数据转化成向量和矩阵的形式进行存储和计算,这样将数据定量化表示,能更准确地整理和分析结果。

多种数据类型:

Local vector

本地向量集。主要向Spark提供一组可进行操作的数据集合

Labeled point

向量标签。让用户能够分类不同的数据集合

Local matrix

本地矩阵。将数据结合以矩阵形式存储在本地计算机中

Distributed matrix

分布式矩阵。将矩阵集合以矩阵形式存储在分布式计算机中

1)本地向量

MLlib使用的本地化存储类型是向量,这里的向量主要由两类构成:稀疏型数据集(spares)和密集型数据集(dense)。 

import org.apache.spark.mllib.linalg.Vectors

//通过传入指定个数的double参数创建向量。
//如果传入其他的数值类型参数,可以隐式转换为double类型
val v1=Vectors.dense(2.5,1.5,5.5)
val v2=Vectors.dense(1,2,3)

println(v1(0))
print(v2)

val v3=Vectors.dense(Array[Double](1,2,3))
val v4=Vectors.dense(Array(1.1,2.2,3.3))

2) 向量标签

import org.apache.spark.mllib.linalg.Vectors

val v5=Vectors.dense(2,3,1)

//创建向量标签。1)标签值(看作是因变量Y)2)向量(看做是所有自变量组成的向量)
//标签值要求的类型是Double,其他的数值类型,会隐式转换成Double
val lb1=LabeledPoint(10,v1)

println(lb1.label)//获取标签值
println(lb1.features)//获取向量
 三、MLib统计量基础

数理统计中,基本统计量包括数据的平均值、方差,这是一组求数据统计量的基本内容。在MLlib中,统计量的计算主要用到Statistics类库。

 

import org.apache.spark.mllib.linalg.Vectors
import org.apache.spark.mllib.stat.Statistics
val conf=new SparkConf().setMaster("local").setAppName("statistic")
val sc=new SparkContext(conf)

val r1=sc.makeRDD(List(1,2,3,4))
val r2=r1.map(x=>Vectors.dense(x))

//返回这一组数据的各项基本指标
val result=Statistics.colStats(r2)

println(result.max)
println(result.min)
println(result.mean)//均值
println(result.variance)//方差
println(result.count)//元素个数
println(result.numNonzeros)//不为0的元素个数
println(result.normL1)//曼哈顿距离
println(result.normL2)//欧式距离
val p1=Array(2,1,5)
val p2=Array(5,10,3)

//计算两个点之间的曼哈顿距离
val p1p2=p1 zip p2
val dis1=p1p2.map( x=>Math.abs(x._1-x._2)).sum

//计算两个点之间的欧式距离
val dis2=p1p2.map( x=>(x._1-x._2)*(x._1-x._2)).sum

//计算两个点之间的切比雪夫距离
val dis3=p1p2.map( x=>Math.abs(x._1-x._2)).max

println(dis1)
println(dis2)
println(dis3)
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/896078.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号