当前位置: 首页 > news >正文

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

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

1. 机器学习算法尝试根据训练数据(training data)使得表示算法行为的数学目标最大化,并以此来进行预测或作出决定。

2. MLlib完成文本分类任务步骤:

(1)首先用字符串RDD来表示你的消息

(2)运行MLlib中的一个特征提取(feature extraction)算法来把文本数据转换为数值特征(适合机器学习算法处理);该操作会返回一个向量RDD。

(3)对向量RDD调用分类算法(比如逻辑回归);这步会返回一个模型对象,可以使用该对象对新的数据点进行分类。

(4)使用MLlib的评估函数在测试数据集上评估模型。

3. MLlib包含的主要数据类型:

  • Vector
  • LabeledPoint
  • Rating
  • 各种Model类

4. 操作向量

  • 向量有两种:稠密向量和稀疏向量
    • 稠密向量:把所有维度的值存放在一个浮点数数组中
    • 稀疏向量:只把各维度的非零值存储下来
    • 优先考虑稀疏向量,也是关键的优化手段
  • 创建向量的方式在各语言上有一些细微差别

5. 算法

  • 特征提取
    • TF-IDF(词频——逆文档频率)使用用来从文本文档(例如网页)中生成特向量的简单方法。
    • MLlib用两个算法来计算TF-IDF:Hashing和IDF,都在mllib.feature包内。
    • 缩放,大多数要考虑特征向量中各元素的幅值,并且在特征缩放调整为平等对待时表现最好。
    • 正规化,在准备输入数据时,把向量正规化为长度1。使用Normalizer类可以实现。
    • Word2Vec是一个基于神经网络的文本特征算法,可以用来将数据传给许多下游算法。
  • 统计
  • 分类和归类
    • 分类与回归是监督学习的两种形式。
    • 监督学习是指算法尝试使用有标签的训练数据根据对象的特征预测结果。
    • 在分类中,预测出的变量是离散的。
    • 在回归中,预测出的变量是连续的。
    • MLlib中包含许多分类与回归算法:如简单的线性算法以及决策树和森林算法。
  • 聚类
    • 聚类算法是一种无监督学习任务,用于将对象分到具有高度相似性的聚类中。
    • 聚类算法主要用于数据探索(查看一个新数据集是什么样子)以及异常检测(识别与任意聚类都相聚较远的点)。
    • MLlib中包含两个聚类中流行的K-means算法,以及一个叫做K-means||的变种,可以提供为并行环境提供更好的初始化策略。
  • 协同过滤与推荐
    • 协同过滤是一种根据用户对各种产品的交互与评分来推荐新产品的推荐系统技术。
    • 交替最小二乘(ALS),会为每个用户和产品都设一个特征向量,这样用户向量和产品向量的点积就接近于他们的得分。
  • 降维
    • 主成分分析(PCA)
      • PCA会把特征映射到低位空间,让数据在低维空间表示的方差最大化,从而忽略一些无用的维度。
      • 要计算这种映射,我们要构建出正规化的相关矩阵,并使用这个矩阵的奇异向量和奇异值。
      • 与最大的一部分奇异值相对应的奇异向量可以用来重建原始数据的主要成分。
//Scala中的PCA

import org.apache.spark.mllib.linalg.Matrix
import org.apache.spark.mllib.linalg.distributed.RowMatrix

val points:RDD[Vector]=//...
val mat:RowMatrix = new RowMatrix(points)
val pc:Matrix = mat.computerPrincipalComponents(2)

//将点投影到低维空间中
val projected = mat.nultiply(pc).rows

//在投影出的二维数据上训练k-means模型
val model = KMeans.train(projected,10)
  • 降维
    • 奇异值分解
      • MLlib也提供底层的奇异值分解(简称SVD)原语。

转载于:https://www.cnblogs.com/lanzhi/p/6467780.html

相关文章:

  • zabbix在centos6下的编译安装
  • C语言 百炼成钢1
  • 【Linux】环境变量设置
  • Apache安装教程
  • 数众数
  • Struts的属性驱动和模型驱动
  • 基于OpenResty的Lua Web框架lor0.0.2预览版发布
  • RHCA CL220实战系列(一)之KVM部署CloudForms
  • C 指针函数
  • 使用visualvm的插件btrace的一个例子
  • 在java程序中访问windows有用户名和密码保护的共享目录
  • expect 自动登录
  • ImportError No module named setuptools解决
  • Drill官网文档翻译五:连接到数据源
  • 如何使用 OAuth 2.0 将 LinkedIn 集成入 iOS 应用
  • css布局,左右固定中间自适应实现
  • JavaScript新鲜事·第5期
  • Java编程基础24——递归练习
  • Next.js之基础概念(二)
  • Python中eval与exec的使用及区别
  • quasar-framework cnodejs社区
  • Sass 快速入门教程
  • ⭐ Unity 开发bug —— 打包后shader失效或者bug (我这里用Shader做两张图片的合并发现了问题)
  • Unix命令
  • 从地狱到天堂,Node 回调向 async/await 转变
  • 番外篇1:在Windows环境下安装JDK
  • 分享一个自己写的基于canvas的原生js图片爆炸插件
  • 资深实践篇 | 基于Kubernetes 1.61的Kubernetes Scheduler 调度详解 ...
  • ​插件化DPI在商用WIFI中的价值
  • ​创新驱动,边缘计算领袖:亚马逊云科技海外服务器服务再进化
  • (14)目标检测_SSD训练代码基于pytorch搭建代码
  • (52)只出现一次的数字III
  • (C语言)二分查找 超详细
  • (Spark3.2.0)Spark SQL 初探: 使用大数据分析2000万KF数据
  • (第27天)Oracle 数据泵转换分区表
  • (二)Eureka服务搭建,服务注册,服务发现
  • (分布式缓存)Redis持久化
  • (附源码)ssm经济信息门户网站 毕业设计 141634
  • (附源码)ssm捐赠救助系统 毕业设计 060945
  • (附源码)小程序儿童艺术培训机构教育管理小程序 毕业设计 201740
  • (六) ES6 新特性 —— 迭代器(iterator)
  • (译) 函数式 JS #1:简介
  • (转载)Linux 多线程条件变量同步
  • ***微信公众号支付+微信H5支付+微信扫码支付+小程序支付+APP微信支付解决方案总结...
  • *_zh_CN.properties 国际化资源文件 struts 防乱码等
  • .NET Framework 服务实现监控可观测性最佳实践
  • .net on S60 ---- Net60 1.1发布 支持VS2008以及新的特性
  • .NET 应用启用与禁用自动生成绑定重定向 (bindingRedirect),解决不同版本 dll 的依赖问题
  • .NET(C#) Internals: as a developer, .net framework in my eyes
  • .NET/C# 判断某个类是否是泛型类型或泛型接口的子类型
  • .net经典笔试题
  • .pyc文件是什么?
  • ::什么意思
  • @Transactional 详解
  • [ C++ ] STL_vector -- 迭代器失效问题