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生成zip包兼容Linux
/* 这个方法只用在windows中用服务器为Linux就不行 */ package common.util; import java.io.File;import java.io.FileInput ...
- Qt读写Json格式配置文件
头文件Config.h #pragma once #include <QVariantMap> class Config { public: Config(const QString &a ...
- 第二次博客作业: 函数+进制转换器v1.0beta
一:运行截图 二:介绍函数 1, int panduan1(int n,char a[],int count,int sign)//判断用户是否输入了除数字和a-f范围外的字符 { int i; ; ...
- mysql8.0.17gtid方式实现主从同步
数据库的安装: [root@node1 8.0.17]# rpm -ivh mysql-community-common-8.0.17-1.el7.x86_64.rpm 警告:mysql-commun ...
- Nginx中配置非英文域名
前两天遇到个配置越南语的域名的情况.域名和ip解析完成后,直接ping域名也不通,还以为是解析问题.研究了半天,nginx配置非英文域名时,需要有其他操作. 非英文域名转换成punycode编码才可以 ...
- DataFactory生产身份证号码==
生产身份证号:定义数据类型为CHAR()类型的才能进行数据的组合
- 在调试linux的休眠功能时如何打开调试信息开关?
答:在bootargs中添加参数no_console_suspend即可进行调试
- SQL-W3School-高级:SQL RIGHT JOIN 关键字
ylbtech-SQL-W3School-高级:SQL RIGHT JOIN 关键字 1.返回顶部 1. SQL RIGHT JOIN 关键字 RIGHT JOIN 关键字会右表 (table_nam ...
- CentOS 7.4 发布下载,安全稳定的Linux发行版
CentOS 7.4 发布了.CentOS 是 RHEL(Red Hat Enterprise Linux)源代码再编译的产物,而且在 RHEL 的基础上修正了不少已知的 Bug ,相对于其他 Lin ...
- [maven]scope之test
<dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit ...