一个向量(1.0,0.0,3.0)它有2中表示的方法

密集:[1.0,0.0,3.0]    其和一般的数组无异

稀疏:(3,[0,2],[1.0,3.0])     其表示的含义(向量大小,序号,值)   序号从0开始

本地向量和矩阵

本地向量(Local Vector)存储在单台机器上,索引采用0开始的整型表示,值采用Double类型的值表示。Spark MLlib中支持两种类型的矩阵,分别是密度向量(Dense Vector)和稀疏向量(Spasre Vector),密度向量会存储所有的值包括零值,而稀疏向量存储的是索引位置及值,不存储零值,在数据量比较大时,稀疏向量才能体现它的优势和价值。下面给出其应用示例:

import org.apache.spark.mllib.linalg.{Vector, Vectors}//密度矩阵,零值也存储
scala> val dv: Vector = Vectors.dense(1.0, 0.0, 3.0) dv: org.apache.spark.mllib.linalg.Vector = [1.0,0.0,3.0] // 创建稀疏矩阵,指定元素的个数、索引及非零值,数组方式 scala> val sv1: Vector = Vectors.sparse(3, Array(0, 2), Array(1.0, 3.0)) sv1: org.apache.spark.mllib.linalg.Vector = (3,[0,2],[1.0,3.0]) // 创建稀疏矩阵,指定元素的个数、索引及非零值,采用序列方式 scala> val sv2: Vector = Vectors.sparse(3, Seq((0, 1.0), (2, 3.0))) sv2: org.apache.spark.mllib.linalg.Vector = (3,[0,2],[1.0,3.0])

本地矩阵(Local Matrix)指的也是存储于单台机器上的数据结构,本地矩阵采用整体的行列序号存取元素,本地矩阵也有密度矩阵(Dense Matrix)、稀疏矩阵(Sparse Matrix)两种存储方法,其使用代码如下:

//密度矩阵的存储
scala> import org.apache.spark.mllib.linalg.{Matrix, Matrices}
import org.apache.spark.mllib.linalg.{Matrix, Matrices} //创建一个密度矩阵 scala> val dm: Matrix = Matrices.dense(3, 2, Array(1.0, 3.0, 5.0, 2.0, 4.0, 6.0)) dm: org.apache.spark.mllib.linalg.Matrix = 1.0 2.0 3.0 4.0 5.0 6.0 

在Spark MLLib中,稀疏矩阵采用的是Compressed Sparse Column (CSC) 格式进行矩阵的存储,具体参见(http://www.tuicool.com/articles/A3emmqi)对稀疏矩阵存储的介绍,例如


//下列矩阵1.0 0.0 4.00.0 3.0 5.0 2.0 0.0 6.0 如果采用稀疏矩阵存储的话,其存储信息包括: 实际存储值: [1.0, 2.0, 3.0, 4.0, 5.0, 6.0]`, 矩阵元素对应的行索引:rowIndices=[0, 2, 1, 0, 1, 2]` 列起始位置索引: `colPointers=[0, 2, 3, 6]`. scala> val sparseMatrix= Matrices.sparse(3, 3, Array(0, 2, 3, 6), Array(0, 2, 1, 0, 1, 2), Array(1.0, 2.0, 3.0, 4.0, 5.0, 6.0)) sparseMatrix: org.apache.spark.mllib.linalg.Matrix = 3 x 3 CSCMatrix (0,0) 1.0 (2,0) 2.0 (1,1) 3.0 (0,2) 4.0 (1,2) 5.0 (2,2) 6.0

2. 带类标签的特征向量(Labeled point)

Labeled point是Spark MLlib中最重要的数据结构之一,它在无监督学习算法中使用十分广泛,它也是一种本地向量,只不过它提供了类的标签,对于二元分类,它的标签数据为0和1,而对于多类分类,它的标签数据为0,1,2,…。它同本地向量一样,同时具有Sparse和Dense两种实现方式,例如:

scala> import org.apache.spark.mllib.regression.LabeledPoint import org.apache.spark.mllib.regression.LabeledPoint // LabeledPoint第一个参数是类标签数据,第二参数是对应的特征数据 //下面给出的是其密度向量实现方式 scala> val pos = LabeledPoint(1.0, Vectors.dense(1.0, 0.0, 3.0)) pos: org.apache.spark.mllib.regression.LabeledPoint = (1.0,[1.0,0.0,3.0]) // LabeledPoint的稀疏向量实现方式 scala> val neg = LabeledPoint(0.0, Vectors.sparse(3, Array(0, 2), Array(1.0, 3.0))) neg: org.apache.spark.mllib.regression.LabeledPoint = (0.0,(3,[0,2],[1.0,3.0]))

LabeledPoint的稀疏向量实现方式在实际中应用最为广泛,这是因为某一特征的维度可能达到上千,而这其中又存在大量对后期训练无益的零值特征信息,如果对所有的零值特征都进行存储的话,会浪费大量的存储空间,因此实际中常常使用稀疏的实现方式,使用的是LIBSVM格式:label index1:value1 index2:value2 …进行特征标签及特征的存储与读取。

scala> val examples: RDD[LabeledPoint] = MLUtils.loadLibSVMFile(sc, "/data/sample_data.txt")

摘自:http://blog.csdn.net/lovehuangjiaju/article/details/48297921

转载于:https://www.cnblogs.com/bonelee/p/7814081.html

spark 类标签的稀疏 特征向量相关推荐

  1. R语言生成螺旋形(spirals)仿真数据实战:螺旋线型线性不可分数据集、螺旋线型不可分数据集可视化、为散点图中的每个数据点添加类标签信息

    R语言生成螺旋形(spirals)仿真数据实战:螺旋线型线性不可分数据集.螺旋线型不可分数据集可视化.为散点图中的每个数据点添加类标签信息 目录

  2. python将数据集分成训练样本和类标签

    这里假设 类标签为largeDoses, smallDoses, didntLike三类,假设训练样本有三个特征属性,类标签放在数据集的最后一列 import numpy as npdef file2 ...

  3. html中无语义的标签,HTML语义类标签都有哪些?

    HTML标签可以分为很多种,比如: 文档元信息类: 语义类: 媒体替换类: 链接类等等. 虽然这部分知识看起来简单,没有什么深奥的东西,但是却非常多,因此只能是"入门简单,精通困难" ...

  4. html5学习系列之klm类标签

    一.旧标签: (1)<kbd>标签 作用:定义键盘文本,已经被废弃. (2)<label>标签 作用:为inout元素定义标注,特别之处在于它为鼠标用户改进了可用性,如果用户在 ...

  5. html插入图像标签是什么,初学HTML 常见的标签(三) 插入类标签

    第三篇博客, 这次说的是插入链接类标签, 我们平常在网页中经常能看到蓝色的链接类标签, 或者是一张图片, 一个电邮, 这些都是插入链接类的标签起的作用. 链接标签 链接标签可实现超链接, 它在网页中是 ...

  6. 鸟巢目标检测图像数据集(1000多张高清原图;YOLO,VOC两类标签)

    下载地址: 鸟巢目标检测图像数据集(1000多张高清原图:YOLO,VOC两类标签,网盘下载链接)

  7. html5学习系列之hi类标签

    旧标签: (1)<head>标签 作用:所有头部元素的容器,必须包含文档的标题(title), 可以包含脚本.格式.meta信息以及其他更多的信息 元素内部包含: <title> ...

  8. 03-CSS操作--CSS操作规范(书写技巧)+通栏布局+标签的注意事项+三大类标签+边距合并问题+图文混排+图像签名+水平居中+垂直居中

    一.CSS操作规范 1.CSS书写技巧 (1)最外层是一个<div id="bigDiv">,将所有元素都包进去 (2)去除<body>的外边距(body{ ...

  9. 将数据集类标签数字化

    将数据集类标签数字化 (一)该数据集类标签在最后一列(直接数字化标签) //打开旧文件 f = open('dataset/datingTestSet.txt','r',encoding='utf-8 ...

最新文章

  1. python redis订阅_python实现 redis订阅与发布
  2. python词云代码简单_Python 简单实现标签词云
  3. Electrification
  4. leetcode 676. Implement Magic Dictionary | 676. 实现一个魔法字典(DFS+Trie 前缀树)
  5. Cookie 与Session 的区别
  6. jQuery初识之安装与语法简介
  7. 从零开始理解JAVA事件处理机制(3)
  8. 【java】Applet窗口小程序的应用
  9. 基于visual Studio2013解决C语言竞赛题之1033数字交换
  10. 小米机器狗CyberDog
  11. R中ggplot2绘图学习笔记
  12. window location href 手机端无法跳转_JavaScriptBOM__History_location(二十)
  13. python数据清洗 - Numpy库
  14. xp系统无法从补丁服务器获取补丁,怎么获取到xp系统的微软补丁_微软补丁获取方法 - 驱动管家...
  15. JDK下载、安装与配置
  16. 无法搜索到对方电脑共享的文件
  17. 华硕电脑改光驱启动计算机,华硕笔记本怎么在BIOS里设置从光驱开启重装系统...
  18. vue.js — 安装Webpake创建一个完整的项目并上传至码云
  19. 计算机控制技术课程配套教材习题解答(第4、5章)
  20. LeNet——训练和预测篇

热门文章

  1. java 复合_Java复合语句的使用方法详解
  2. linux快速还原oracle,linux下恢复误删除oracle的数据文件
  3. gta5结局杀老崔我哭了_都已经2020年了,怎么还有人在买GTA5?
  4. mysql 启动 failed to start_Linux下启动MySQL提示“mysql deamon failed to start”错误的解决办法...
  5. php 将二维数组合并,PHP二维数组合并排重的两种方式
  6. 数据库优化实例以及优化的小技巧
  7. Android中的任务栈
  8. html自动兼容像素密度,解决 HTML Canvas 元素在高像素密度/高分辨率屏幕上显示模糊的问题...
  9. dell服务器 稳定性,设计优秀管理方便 戴尔R710服务器评测
  10. 万年历插件软件测试,万年历软件测试报告