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

创建对象

  1. from pyspark.mllib.linalg import Vectors
  2. from pyspark.mllib.linalg import DenseVector
  3.  
  4. ### DenseVector 方法
  5. a = DenseVector([-1, 2])
  6. print(a) # [-1.0,2.0]
  7.  
  8. ### vectors.dense 方法
  9. v = Vectors.dense([1.0, 3])
  10. u = Vectors.dense([2, 4.0])
  11. # s = Vectors.dense(['a', 'b']) # 不能是字符 ValueError: could not convert string to float: a
  12. t = Vectors.dense([1, 1]) # 元素可重复,非集合 set
  13.  
  14. print(v[0]) # 1.0
  15. print(v + u) # [3.0,7.0]
  16. print(v * u) # [2.0,12.0]
  17. print(v - 2) # [-1.0,1.0]
  18. print(v % 2) # [1.0,1.0]
  19.  
  20. print(a + v) # [0.0,5.0] 两种方法创建的 向量 可直接相加

操作 API

dot(other)

向量相乘,参数支持 Numpy array, list, SparseVector, or SciPy sparse 等多种格式

  1. v.dot(range(2)) # list
  2. # dense.dot(SparseVector(2, [0, 1], [2., 1.])) # SparseVector
  3. # dense.dot(np.array(range(1, 3))) # np

norm(p)

向量范数,

第一范数 Σ|x|;第二范数 平方和开方

  1. a = DenseVector([0, -1, 2, -3])
  2. a.norm(1) # 第一范数 6.0
  3. a.norm(2) # 第二范数 3.7

查看全部的属性方法,使用时可自行研究

  1. dir(a)
  2. ['array', 'asML', 'dot', 'norm', 'numNonzeros', 'parse', 'squared_distance', 'toArray', 'values']

SparseVector

只存储非零值

SparseVector 实例中存在两个数组:一个存储非零值的索引,一个存储非零值

  1. from pyspark.mllib.linalg import Vectors
  2.  from pyspark.mllib.linalg import SparseVector
  3.  
  4. ### SparseVector 方法
  5. a = SparseVector(4, [1, 3], [3.0, 4.0]) # size 4, 非零元素索引 [1, 3], 非零元素值 [3, 4]
  6. print(a)
  7. print(a.values) # [ 3. 4.]
  8. print(a.toArray()) # [ 0. 3. 0. 4.]
  9.  
  10. ### vectors.sparse 方法
  11. n = Vectors.sparse(4, {1: 1.0, 3: 5.5}) # 方式1
  12. p = Vectors.sparse(4, [(1, 1.0), (3, 5.5)]) # 方式2
  13. q = Vectors.sparse(4, [1, 3], [1.0, 5.5]) # 方式3
  14. print(n)
  15. print(a + n) # TypeError: unsupported operand type(s) for +: 'SparseVector' and 'SparseVector'

查看全部的属性方法

  1. dir(a)
  2. [ 'dot', 'indices', 'norm', 'numNonzeros', 'parse', 'size', 'squared_distance', 'toArray', 'values']

LabeledPoint

由 LabeledPoint 构成的 RDD 是标签数据的主要抽象,MLlib 提供的回归和分类算法只能作用于由 LabeledPoint 构成的 RDD 上

  1. from pyspark.mllib.regression import LabeledPoint
  2. from pyspark.mllib.linalg import Vectors
  3.  
  4. # class pyspark.mllib.regression.LabeledPoint(label, features)
  5. classing = LabeledPoint(1, Vectors.dense([1, 3]))
  6. regression = LabeledPoint(2.5, Vectors.sparse(3, [2], [3]))
  7. print(classing) # (1.0,[1.0,3.0])
  8. print(regression) # (2.5,(3,[2],[3.0]))

Rating

这个数据类型主要用在 推荐算法 中,表示用户对某个产品的评分;

在输入推荐算法之前必须把数据集转换成由 Rating 构成的 RDD

Rating 类有 3 个参数:

第一个是 用户 ID,int 型;

第二个是 产品 ID,int 型;

第三个是 评分,double 型

  1. from pyspark.mllib.recommendation import Rating
  2.  
  3. r = Rating(1, 2, 5.0)
  4. print(r.user, r.product, r.rating) # (1, 2, 5.0)
  5. print(r[0], r[1], r[2]) # (1, 2, 5.0)

参考资料:

spark机器学一Mllib 数据抽象的更多相关文章

  1. Spark中ml和mllib的区别

    转载自:https://vimsky.com/article/3403.html Spark中ml和mllib的主要区别和联系如下: ml和mllib都是Spark中的机器学习库,目前常用的机器学习功 ...

  2. Spark学习之基于MLlib的机器学习

    Spark学习之基于MLlib的机器学习 1. 机器学习算法尝试根据训练数据(training data)使得表示算法行为的数学目标最大化,并以此来进行预测或作出决定. 2. MLlib完成文本分类任 ...

  3. 机器学*——K*邻算法(KNN)

    1 前言 Kjin邻法(k-nearest neighbors,KNN)是一种基本的机器学*方法,采用类似"物以类聚,人以群分"的思想.比如,判断一个人的人品,只需观察他来往最密切 ...

  4. 【机器学*】k-*邻算法(kNN) 学*笔记

    [机器学*]k-*邻算法(kNN) 学*笔记 标签(空格分隔): 机器学* kNN简介 kNN算法是做分类问题的.思想如下: KNN算法的思想总结一下:就是在训练集中数据和标签已知的情况下,输入测试数 ...

  5. 【机器学*】k*邻算法-03

    心得体会: 需要思考如何将现实对象转化为特征向量,设置特征向量时记住鸭子定律1 鸭子定律1 如果走路像鸭子.说话像鸭子.长得像鸭子.啄食也像鸭子,那它肯定就是一只鸭子 事物的外在特征就是事物本质的表现 ...

  6. 【机器学*】k*邻算法-02

    k邻*算法具体应用:2-2约会网站配对 心得体会: 1.对所有特征值进行归一化处理:将特征值单位带来的距离影响消除,使所有特征同权重--然后对不同的特征进行加权2.对于相互独立的特征,可以通过建立(特 ...

  7. SPARK快学大数据分析概要

    Spark 是一个用来实现快速而通用的集群计算的平台.在速度方面,Spark 扩展了广泛使用的MapReduce 计算模型,而且高效地支持更多计算模式,包括交互式查询和流处理.在处理大规模数据集时,速 ...

  8. Spark学习笔记——基于MLlib的机器学习

    使用MLlib库中的机器学习算法对垃圾邮件进行分类 分类的垃圾邮件的如图中分成4个文件夹,两个文件夹是训练集合,两个文件夹是测试集合 build.sbt文件 name := "spark-f ...

  9. spark:ML和MLlib的区别

    ML和MLlib的区别如下: ML是升级版的MLlib,最新的Spark版本优先支持ML. ML支持DataFrame数据结构和Pipelines,而MLlib仅支持RDD数据结构. ML明确区分了分 ...

随机推荐

  1. Ubuntu 14.04 下安装redis后运行redis-cli 报出redis Connection refused错误【已解决】

    在运行redis-cli运行后爆出错误,看了网上的都没有用例如:改ip,注释bind 127.0.0.1,或者是先运行./redis-server redis.conf,都没有用 只需要: 找到red ...

  2. HTML页面预览表格文件内容

    背景简介 在将一个表格文件上传到服务器上之前,JS读取表格文件并将文件内容输出到页面中 vue项目 第三方 exceljs 安装 npm install exceljs 插件使用 github 中文文 ...

  3. ICEM—奇葩

    原视频下载地址:https://yunpan.cn/cSsbI89zP9Z4K  访问密码 a287

  4. python 装饰器应用

    1 注册回调函数 下面这个示例展示了通过URL的路由来调用相关注册的函数示例: class MyApp(): def __init__(self): self.func_map = {} def re ...

  5. windows下xampp安装rabbitmq的PHP扩展AMQP

    windows上使用的php扩展为dll文件,首先去下载dll文件,可以到 https://pecl.php.net/package/amqp 选择对应的版本下载 下载压缩包解压后,把里面的两个dll ...

  6. Servlet的入门案例

    编写入门案例 1)编写java类,继承HttpServlet类 2)重新doGet和doPost方法 3)Servlet程序交给tomcat服务器运行!! 3.1 servlet程序的class码拷贝 ...

  7. 17. dashboard

    17. dashboard dashboard的安装步骤: wget https://raw.githubusercontent.com/kubernetes/dashboard/v2.0.0-bet ...

  8. app怎么获取package与active name

    1.aapt dump badging apk名称 2.adb logcat | grep START 或者 adb shell "logcat | grep START" 然后在 ...

  9. OpenLDAP管理命令详解

    一.OpenLDAP命令汇总 ldapsearch:搜索 OpenLDAP 目录树条目. ldapadd:通过 LDIF 格式,添加目录树条目. ldapdelete:删除 OpenLDAP 目录树条 ...

  10. 在线word转html

    http://www.docpe.com/word/word-to-html.aspx