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明确区分了分 ...
随机推荐
- Java实例化对象过程中的内存分配
Java实例化对象过程中的内存分配: https://blog.csdn.net/qq_36934826/article/details/82685791 问题引入这里先定义一个很不标准的“书”类,这 ...
- POJ 3342 Party at Hali-Bula ——(树型DP)
一开始用pii保存dp类型,写的很长,还是WA了= =.. 然后参考了一下别人的博客,重新写了一发(似乎是岐哥的博客233). 代码如下: #include <stdio.h> #incl ...
- instr和like的使用区别
1.instr函数 instr函数是一个字符串处理函数,它在Oracle/PLSQL中是返回子字符串在源字符串中的位置,如果在源串中没有找到子串,则返回0. instr函数定义如下: /* * 返回子 ...
- Js 中那些 隐式转换
曾经看到过这样一个代码: (!(~+[])+{})[--[~+""][+[]]*[~+[]]+~~!+[]]+({}+[])[[~!+[]*~+[]]] = sb , 你敢相信, ...
- 阶段5 3.微服务项目【学成在线】_day04 页面静态化_19-页面静态化-模板管理-模板存储
因为没有界面,所以手动的通过操作数据库的方式来存储 比如说要存一个轮播图的模板 把自增的_id去掉 先用测试程序把文件存储到gridFS得到一个gridId,然后拿着这个文件的id 这样就添加好了这一 ...
- nginx反向代理本地 两台web负载均衡 使用ip+端口代理
环境: 本地外网ip:123.58.251.166 .配置index.html网页 [root@host---- conf.d]# cat /web/sing/index.html <h1> ...
- laravel中的管道设计模式
转自 http://laravelacademy.org/post/3088.html
- iOS-XMPP(转)
IM的实现原理 在我最初学习编程的时候,曾经用JAVA实现了一个最简单版的IM通讯,即通过Socket建立两台电脑之间的连接,然后发送IO流来进行即时通讯,我们现在所使用的IM软件尽管看上去非常 ...
- 利用matlab自带函数快速提取二值图像的图像边缘 bwperim函数
clear all;close all;clc; I = imread('rice.png'); I = im2bw(I); J = bwperim(I); % 提取二值图像图像边缘 figure ...
- ADRMS与office的整合(一)
因为微软之前针对客户的RMS加密服务是一种免费的测试服务,虽然用户很多但实质上还是一种“测试服务”. 后来微软把这个服务商业化了,需要继续使用的话需要打下这个补丁 https://support.mi ...