spark机器学一Mllib 数据抽象
spark 提供了两个机器学习库 MLlib 和 ML,MLlib 是 spark 第一个机器学习库,相比于 ML,它更加成熟
rdd 是 spark core 的数据抽象,dataframe 是 sparkSQL 的数据抽象,
而 MLib 的数据抽象包括 Vector、LabeledPoint、Rating
Vector
vector 是一个由 数值型数据 构成的带索引的 集合,确切的说是一个向量;索引从 0 开始;
从机器学习的角度将,一个 vector 代表一个 对象,vector 的元素代表对象的特征;
MLib 支持两种类型的向量:稀疏 与 稠密;
MLib 的 vector 被定义成特质,无法直接创建一个 vector 实例,可以使用工厂方法 DenseVector 和 SparseVector 来创建具有 vector 特质的实例; 【Dense 稠密,Sparse 稀疏】
Vectors 类的 dense 和 sparse 方法提供了更统一的接口;
API 汇总
DenseVector 和 SparseVector 继承自 Vector,自然都有 asML 和 toArray 方法
Vectors 统一了 创建方法
DenseVector
创建对象
from pyspark.mllib.linalg import Vectors
from pyspark.mllib.linalg import DenseVector ### DenseVector 方法
a = DenseVector([-1, 2])
print(a) # [-1.0,2.0] ### vectors.dense 方法
v = Vectors.dense([1.0, 3])
u = Vectors.dense([2, 4.0])
# s = Vectors.dense(['a', 'b']) # 不能是字符 ValueError: could not convert string to float: a
t = Vectors.dense([1, 1]) # 元素可重复,非集合 set print(v[0]) # 1.0
print(v + u) # [3.0,7.0]
print(v * u) # [2.0,12.0]
print(v - 2) # [-1.0,1.0]
print(v % 2) # [1.0,1.0] print(a + v) # [0.0,5.0] 两种方法创建的 向量 可直接相加
操作 API
dot(other)
向量相乘,参数支持 Numpy array, list, SparseVector, or SciPy sparse 等多种格式
v.dot(range(2)) # list
# dense.dot(SparseVector(2, [0, 1], [2., 1.])) # SparseVector
# dense.dot(np.array(range(1, 3))) # np
norm(p)
向量范数,
第一范数 Σ|x|;第二范数 平方和开方
a = DenseVector([0, -1, 2, -3])
a.norm(1) # 第一范数 6.0
a.norm(2) # 第二范数 3.7
查看全部的属性方法,使用时可自行研究
dir(a)
['array', 'asML', 'dot', 'norm', 'numNonzeros', 'parse', 'squared_distance', 'toArray', 'values']
SparseVector
只存储非零值
SparseVector 实例中存在两个数组:一个存储非零值的索引,一个存储非零值
from pyspark.mllib.linalg import Vectors
from pyspark.mllib.linalg import SparseVector ### SparseVector 方法
a = SparseVector(4, [1, 3], [3.0, 4.0]) # size 4, 非零元素索引 [1, 3], 非零元素值 [3, 4]
print(a)
print(a.values) # [ 3. 4.]
print(a.toArray()) # [ 0. 3. 0. 4.] ### vectors.sparse 方法
n = Vectors.sparse(4, {1: 1.0, 3: 5.5}) # 方式1
p = Vectors.sparse(4, [(1, 1.0), (3, 5.5)]) # 方式2
q = Vectors.sparse(4, [1, 3], [1.0, 5.5]) # 方式3
print(n)
print(a + n) # TypeError: unsupported operand type(s) for +: 'SparseVector' and 'SparseVector'
查看全部的属性方法
dir(a)
[ 'dot', 'indices', 'norm', 'numNonzeros', 'parse', 'size', 'squared_distance', 'toArray', 'values']
LabeledPoint
由 LabeledPoint 构成的 RDD 是标签数据的主要抽象,MLlib 提供的回归和分类算法只能作用于由 LabeledPoint 构成的 RDD 上
from pyspark.mllib.regression import LabeledPoint
from pyspark.mllib.linalg import Vectors # class pyspark.mllib.regression.LabeledPoint(label, features)
classing = LabeledPoint(1, Vectors.dense([1, 3]))
regression = LabeledPoint(2.5, Vectors.sparse(3, [2], [3]))
print(classing) # (1.0,[1.0,3.0])
print(regression) # (2.5,(3,[2],[3.0]))
Rating
这个数据类型主要用在 推荐算法 中,表示用户对某个产品的评分;
在输入推荐算法之前必须把数据集转换成由 Rating 构成的 RDD
Rating 类有 3 个参数:
第一个是 用户 ID,int 型;
第二个是 产品 ID,int 型;
第三个是 评分,double 型
from pyspark.mllib.recommendation import Rating r = Rating(1, 2, 5.0)
print(r.user, r.product, r.rating) # (1, 2, 5.0)
print(r[0], r[1], r[2]) # (1, 2, 5.0)
参考资料:
spark机器学一Mllib 数据抽象的更多相关文章
- Spark中ml和mllib的区别
转载自:https://vimsky.com/article/3403.html Spark中ml和mllib的主要区别和联系如下: ml和mllib都是Spark中的机器学习库,目前常用的机器学习功 ...
- Spark学习之基于MLlib的机器学习
Spark学习之基于MLlib的机器学习 1. 机器学习算法尝试根据训练数据(training data)使得表示算法行为的数学目标最大化,并以此来进行预测或作出决定. 2. MLlib完成文本分类任 ...
- 机器学*——K*邻算法(KNN)
1 前言 Kjin邻法(k-nearest neighbors,KNN)是一种基本的机器学*方法,采用类似"物以类聚,人以群分"的思想.比如,判断一个人的人品,只需观察他来往最密切 ...
- 【机器学*】k-*邻算法(kNN) 学*笔记
[机器学*]k-*邻算法(kNN) 学*笔记 标签(空格分隔): 机器学* kNN简介 kNN算法是做分类问题的.思想如下: KNN算法的思想总结一下:就是在训练集中数据和标签已知的情况下,输入测试数 ...
- 【机器学*】k*邻算法-03
心得体会: 需要思考如何将现实对象转化为特征向量,设置特征向量时记住鸭子定律1 鸭子定律1 如果走路像鸭子.说话像鸭子.长得像鸭子.啄食也像鸭子,那它肯定就是一只鸭子 事物的外在特征就是事物本质的表现 ...
- 【机器学*】k*邻算法-02
k邻*算法具体应用:2-2约会网站配对 心得体会: 1.对所有特征值进行归一化处理:将特征值单位带来的距离影响消除,使所有特征同权重--然后对不同的特征进行加权2.对于相互独立的特征,可以通过建立(特 ...
- SPARK快学大数据分析概要
Spark 是一个用来实现快速而通用的集群计算的平台.在速度方面,Spark 扩展了广泛使用的MapReduce 计算模型,而且高效地支持更多计算模式,包括交互式查询和流处理.在处理大规模数据集时,速 ...
- Spark学习笔记——基于MLlib的机器学习
使用MLlib库中的机器学习算法对垃圾邮件进行分类 分类的垃圾邮件的如图中分成4个文件夹,两个文件夹是训练集合,两个文件夹是测试集合 build.sbt文件 name := "spark-f ...
- spark:ML和MLlib的区别
ML和MLlib的区别如下: ML是升级版的MLlib,最新的Spark版本优先支持ML. ML支持DataFrame数据结构和Pipelines,而MLlib仅支持RDD数据结构. ML明确区分了分 ...
随机推荐
- leveldb源码分析之Slice
转自:http://luodw.cc/2015/10/15/leveldb-02/ leveldb和redis这样的优秀开源框架都没有使用C++自带的字符串string,redis自己写了个sds,l ...
- jquer属性 offset、position、scrollTop
尺寸操作 1.获取宽高 a) jq对象.height/width () :只有获取高度/宽度 尺寸,不包括padding和margin 和 border 2.设置宽度 ...
- Gym - 100199C
Gym - 100199C 题意: 其实这么长的英文题面就是想告诉我们这个题是丢手绢. 解法: 找到与 $ N $ 互质的最大整数 $ K $ 即可.当 $ N $ 为奇数时, $ \frac{N-1 ...
- 深入分析JAVA IO(BIO、NIO、AIO)
IO的基本常识 1.同步 用户进程触发IO操作并等待或者轮询的去查看IO操作是否完成 2.异步 用户触发IO操作以后,可以干别的事,IO操作完成以后再通知当前线程继续处理 3.阻塞 当一个线程调用 r ...
- 自定义镜像mycentos
1.编写 1).Hub默认CentOS镜像是什么情况 2).编写Dockerfile文件 2.构建 3.运行
- gdb常用的调试命令
首先将源代码编译.链接生成debug版本的可执行文件,然后通过‘gdb debug版本的可执行文件名’进入调试模式. a) 单进程.单线程基础调试命令 l 显示main函数所在的文件的源代码 ...
- 发现一个好的手机抓包工具Http Traffic
---恢复内容开始--- 晚上加班闲着没事,喜欢抓包,逛破解论坛,看到他们在聊Http Traffic手机抓包工具, 就下载了打算玩玩 Http Traffic: 是 HTTP 抓包调试工具 HTTP ...
- pwn学习日记Day9 基础知识积累
知识杂项 libc是Linux下的ANSI C的函数库. LOOKUP函数 数组形式:公式为= LOOKUP(lookup_value,array) 式中 array-包含文本.数字或逻辑值的单元格区 ...
- 配置连接远程ip的Redis
1.修改redis服务器的配置文件redis.windows.conf 注释绑定的主机地址 # bind 127.0.0.1 修改redis的守护进程为no,不启用 daemonize "n ...
- php中_initialize()函数与 __construct()函数的区别说明
_initialize()方法是在任何方法执行之前,都要执行的,当然也包括 __construct构造函数. 也就是说如果存在_initialize()函数,调用对象的任何方法都会导致_initial ...