Pyspark特征工程--MinHashLSH

这篇具有很好参考价值的文章主要介绍了Pyspark特征工程--MinHashLSH。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

MinHashLSH

class pyspark.ml.feature.MinHashLSH(inputCol=None, outputCol=None, seed=None, numHashTables=1)

Jaccard 距离的 LSH 类

输入可以是密集或稀疏向量,但如果是稀疏的,则效率更高。 例如 Vectors.sparse(10, [(2, 1.0), (3, 1.0), (5, 1.0)]) 表示空间中有 10 个元素。 该集合包含元素 2、3 和 5。此外,任何输入向量必须至少有 1 个非零索引,并且所有非零值都被视为二进制“1”值

model.approxNearestNeighbors(dataset, key, numNearestNeighbors, distCol=‘distCol’):

给定一个大数据集和一个项目,大约找到与该项目最近距离的 k 个项目。 如果 outputCol 缺失,该方法将转换数据; 如果 outputCol 存在,它将使用它。 这允许在必要时缓存转换后的数据。

参数 :

dataset - 用于搜索键的最近邻居的数据集。

key – 表示要搜索的项目的特征向量。

numNearestNeighbors – 最近邻居的最大数量。

distCol – 输出列,用于存储每个结果行与键之间的距离。 如果未指定,则使用“distCol”作为默认值。

返回:

一个数据集,最多包含最接近键的 k 个项目。 添加一列“distCol”以显示每行与键之间的距离。

model.approxSimilarityJoin(datasetA, datasetB, threshold, distCol=‘distCol’):

连接两个数据集以近似找到距离小于阈值的所有行对。 如果 outputCol 缺失,该方法将转换数据; 如果 outputCol 存在,它将使用它。 这允许在必要时缓存转换后的数据.

参数:

datasetA – 要加入的数据集之一。

datasetB - 要加入的另一个数据集。

threshold – 行对距离的阈值。

distCol – 用于存储每对行之间距离的输出列。 如果未指定,则使用“distCol”作为默认值。

返回:

一个包含行对的连接数据集。 原始行位于“datasetA”和“datasetB”列中,并添加了“distCol”列以显示每对之间的距离。

01.初始化

from pyspark.sql import SparkSession
spark = SparkSession.builder.config("spark.Driver.host","192.168.1.4")\
    .config("spark.ui.showConsoleProgress","false")\
    .appName("MaxAbsScaler").master("local[*]").getOrCreate()

02.创建数据

from pyspark.ml.linalg import Vectors
from pyspark.sql.functions import col
data = [(0, Vectors.sparse(6, [0, 1, 2], [1.0, 1.0, 1.0]),),
        (1, Vectors.sparse(6, [2, 3, 4], [1.0, 1.0, 1.0]),),
        (2, Vectors.sparse(6, [0, 2, 4], [1.0, 1.0, 1.0]),)]
df = spark.createDataFrame(data, ["id", "features"])
df.show()
df.head(3)

​ 输出结果:

+---+--------------------+
| id|            features|
+---+--------------------+
|  0|(6,[0,1,2],[1.0,1...|
|  1|(6,[2,3,4],[1.0,1...|
|  2|(6,[0,2,4],[1.0,1...|
+---+--------------------+

[Row(id=0, features=SparseVector(6, {0: 1.0, 1: 1.0, 2: 1.0})),
 Row(id=1, features=SparseVector(6, {2: 1.0, 3: 1.0, 4: 1.0})),
 Row(id=2, features=SparseVector(6, {0: 1.0, 2: 1.0, 4: 1.0}))]

03.MinHashLSH转换

from pyspark.ml.feature import MinHashLSH
mh = MinHashLSH(inputCol="features", outputCol="hashes", seed=12345)
model = mh.fit(df)
model.transform(df).show()
model.transform(df).head(3)

​ 输出结果:

+---+--------------------+----------------+
| id|            features|          hashes|
+---+--------------------+----------------+
|  0|(6,[0,1,2],[1.0,1...|[[6.17966841E8]]|
|  1|(6,[2,3,4],[1.0,1...|[[1.33824602E8]]|
|  2|(6,[0,2,4],[1.0,1...|[[9.10790854E8]]|
+---+--------------------+----------------+

[Row(id=0, features=SparseVector(6, {0: 1.0, 1: 1.0, 2: 1.0}), hashes=[DenseVector([617966841.0])]),
 Row(id=1, features=SparseVector(6, {2: 1.0, 3: 1.0, 4: 1.0}), hashes=[DenseVector([133824602.0])]),
 Row(id=2, features=SparseVector(6, {0: 1.0, 2: 1.0, 4: 1.0}), hashes=[DenseVector([910790854.0])])]

04.构造另一个数据

data2 = [(3, Vectors.sparse(6, [1, 3, 5], [1.0, 1.0, 1.0]),),
         (4, Vectors.sparse(6, [2, 3, 5], [1.0, 1.0, 1.0]),),
         (5, Vectors.sparse(6, [1, 2, 4], [1.0, 1.0, 1.0]),)]
df2 = spark.createDataFrame(data2, ["id", "features"])
df2.show()

​ 输出结果:

+---+--------------------+
| id|            features|
+---+--------------------+
|  3|(6,[1,3,5],[1.0,1...|
|  4|(6,[2,3,5],[1.0,1...|
|  5|(6,[1,2,4],[1.0,1...|
+---+--------------------+

05.查看approxNearestNeighbors属性

key = Vectors.sparse(6, [1, 2], [1.0, 1.0])
model.approxNearestNeighbors(df2, key, 1).show()

​ 输出结果:

+---+--------------------+----------------+-------------------+
| id|            features|          hashes|            distCol|
+---+--------------------+----------------+-------------------+
|  5|(6,[1,2,4],[1.0,1...|[[6.17966841E8]]|0.33333333333333337|
+---+--------------------+----------------+-------------------+

06.查看approxSimilarityJoin结果

model.approxSimilarityJoin(df, df2, 0.6, distCol="JaccardDistance").select(
    col("datasetA.id").alias("idA"),
    col("datasetB.id").alias("idB"),
    col("JaccardDistance")).show()

​ 输出结果:文章来源地址https://www.toymoban.com/news/detail-659905.html

+---+---+---------------+
|idA|idB|JaccardDistance|
+---+---+---------------+
|  0|  5|            0.5|
|  1|  4|            0.5|
+---+---+---------------+

到了这里,关于Pyspark特征工程--MinHashLSH的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 每个 AI/ML 工程师都应该知道的 Gen AI 框架和工具!

    在快速发展的技术领域,生成式人工智能是一股革命性的力量,它改变了开发人员和AI/ML工程师处理复杂问题和创新的方式。本文深入探讨了生成式 AI 的世界,揭示了对每个开发人员都至关重要的框架和工具。 LangChain 由 Harrison Chase 开发并于 2022 年 10 月首次亮相,是一个开

    2024年01月22日
    浏览(51)
  • 神经网络基础-神经网络补充概念-55-为什么是ML策略

    “ML策略”(Machine Learning Strategies)是指在解决机器学习问题时,采取的一系列方法、技巧和策略。选择适当的ML策略对于获得高质量的模型和结果非常重要。以下是为什么要考虑ML策略的一些原因: 问题适应性:不同的机器学习问题可能需要不同的策略。ML策略允许您根据问

    2024年02月11日
    浏览(40)
  • 深度学习笔记(四)——使用TF2构建基础网络的常用函数+简单ML分类实现

    文中程序以Tensorflow-2.6.0为例 部分概念包含笔者个人理解,如有遗漏或错误,欢迎评论或私信指正。 截图和程序部分引用自北京大学机器学习公开课 1、张量处理类 强制数据类型转换: 查找数据中的最小值和最大值: 上一行例子中是对整个张量查找,也按照一定的方向查找

    2024年01月16日
    浏览(44)
  • 【ML】分类问题

    classification :根据已知样本特征,判断输入样本属于哪种已知样本类。 常用入门案例:垃圾邮件检测、图像分类、手写数字识别、考试通过预测。 分类问题和回归问题的明显区别: 分类问题的结果是非连续型标签,回归输出结果是连续型数值。

    2024年02月05日
    浏览(37)
  • 「ML 实践篇」模型训练

    在训练不同机器学习算法模型时,遇到的各类训练算法大多对用户都是一个黑匣子,而理解它们实际怎么工作,对用户是很有帮助的; 快速定位到合适的模型与正确的训练算法,找到一套适当的超参数等; 更高效的执行错误调试、错误分析等; 有助于理解、构建和训练神经

    2023年04月16日
    浏览(55)
  • ML:2-2-1 Tensorflow

    【吴恩达p60-61】 继续看手写数字识别的例题 第一步,我们上周学习了。 第二步,让Tensorflow去编译模型。最重要的一步是通过指定你想使用的loss函数。(这里我们会用BinaryCrossentropy) 第三步,使用fit函数告诉Tensorflow将在第一步中指定的model,和第二步中指定的cost function拟合

    2024年01月18日
    浏览(27)
  • ML+LLMs:利用LLMs大语言模型赋能或者结合ML机器学习算法进行具体应用的简介、具体案例之详细攻略

    ML+LLMs:利用LLMs大语言模型赋能或者结合ML机器学习算法进行具体应用的简介、具体案例之详细攻略 目录 利用LLMs赋能或者结合ML算法进行具体应用的简介

    2024年02月09日
    浏览(51)
  • 因果推断4--Causal ML(个人笔记)

    目录 1 安装教程及官方文档 1.1 pip安装 1.2 API文档 1.3 代码仓库 2 Uplift模型与主要方法介绍 2.1 发放代金券 2.2 多treatment 2.3 实验方法 3 causalml.inference.tree module 3.1 UpliftTreeClassifier 3.2 UpliftRandomForestClassifier 3.3 CausalRandomForestRegressor 4 待补充 5 问题 pip install causalml https://causalml.r

    2024年02月12日
    浏览(38)
  • 【ML】了解 LightGBM 参数(以及如何调整)

    我已经使用lightGBM一段时间了。这是我解决大多数结构化数据问题的首选算法。令人敬畏的功能列表很长,如果您还没有,我建议您看一下。 但我一直很想了解哪些参数对性能影响最大,以及我应该如何调整 lightGBM 参数以充分利用它。 我想我应该做一些研究,更多地了解

    2024年02月05日
    浏览(36)
  • XGBoost基本介绍(机器学习ML神器)

    介绍: XGBoost整体思想就是直接把损失函数和正则项加起来合成一个整体的损失函数,对这个损失函数求二阶导,得到最终的obj,通过obj计算得到一个分数,这个分数越小越好,最终通过obj计算得到的分数确定了树的结构和整个强学习器的分数。所以XGBoost不是通过拟合残差实

    2024年02月05日
    浏览(29)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包