PySpark数据分析基础:pyspark.mllib.regression机器学习回归核心类详解(一)+代码详解

简介: PySpark数据分析基础:pyspark.mllib.regression机器学习回归核心类详解(一)+代码详解

前言

PySpark数据分析基础系列文章更新有一段时间了,其中环境搭建和各个组件部署都已经完成。借此征文活动我将继续更新Pyspark这一大块内容的主体部分,也是十分重要且比较难懂不易编程的部分。在从事大数据计算以及分析的这段历程中,陪伴我最多的也就是anaconda和Jupyter了,当然此次演示还是用到这些工具,文章紧接此系列的上篇文章内容。若将来想要从事数据挖掘和大数据分析的相关职业,不妨可以关注博主和订阅博主的一些专栏,我将承诺每篇文章将用心纂写长期维护,尽可能输出毕生所学结合如今先有案例项目和技术将每个知识点都讲明白清楚。


希望读者看完能够在评论区提出错误或者看法,博主会长期维护博客做及时更新。


虽然我们讲的是Pyspark MLlib某个片段内容,但是是整个系列的第一次讲述Spark MLlib,所以首先还是对整Spark做一个简要的概述。


一、Spark MLlib


MLlib构建在Spark之上,是一个可扩展的机器学习库,它提供了一组统一的高级API,帮助用户创建和调整实用的机器学习管道。MLBase分为四部分:MLlib、MLI、ML Optimizer和MLRuntime。


   ML Optimizer会选择它认为最适合的已经在内部实现好了的机器学习算法和相关参数,来处理用户输入的数据,并返回模型或别的帮助分析的结果;

   MLI 是一个进行特征抽取和高级ML编程抽象的算法实现的API或平台;

   MLlib是Spark实现一些常见的机器学习算法和实用程序,包括分类、回归、聚类、协同过滤、降维以及底层优化,该算法可以进行可扩充; MLRuntime 基于Spark计算框架,将Spark的分布式计算应用到机器学习领域。

PySpark可以直接调用spark几乎大部分的函数和接口,操作代码十分方便。根据机器学习的需要,spark有一整个机器学习的包可以调用,类似python的sklearn一样。调用相关函数即可实现对应功能,而且在分布式基础之上计算能力会更加卓越。


二、回归类


1.LabeledPoint


该类用于添加或者构建数据集测试非常好用,该类可以生成一条带有特征和标签的数据集。


函数语法:

LabeledPoint(label: float, features: Iterable[float])

参数说明:

  • label:接收int类型,指定数据的标签
  • features:可以接收pyspark.mllib.linalg.Vector或者是数组。

使用实例:

data = [
    LabeledPoint(0.0, [0.0, 1.0,2.0]),
    LabeledPoint(1.0, [1.0, 0.0,2.0]),
]


这样就创建了一个小型数据集,可以通过random加上循环构建出随机测试数据集。

2.LinearModel


生成一个具有系数向量和截距的线性模型。


函数语法:

LinearModel(weights: pyspark.mllib.linalg.Vector, intercept: float)

参数说明:

  • weights:接收pyspark.mllib.linalg.Vector或者是数组,指定权重。
  • intercept:接收float类型,为该模型计算的截距。

使用实例:

lrm = LinearModel([0.2,0.5,0.8],intercept=0.2)

这个函数没有子方法,实际运用起来也很少,几乎用处不大。


3.LinearRegressionModel


生成一个由最小二乘拟合得出的线性回归模型。python的线性拟合都是依据最小二乘法来拟合的。


函数语法:

LinearRegressionModel(weights: pyspark.mllib.linalg.Vector, intercept: float)

和线性模型的参数一样:


  • label:接收int类型,指定数据的标签
  • features:可以接收pyspark.mllib.linalg.Vector或者是数组。


但是该函数拥有三个子方法:

  • load(sc, path):登陆一个LinearRegressionModel模型。
  • predict(x):预测给定向量或包含自变量值的向量RDD的因变量值。
  • save(x):保存一个LinearRegressionModel模型。


load方法


load(sc: pyspark.context.SparkContext, path: str)

参数说明:


sc:输入指定的SparkContext。

path:输入指定的路径名称。

sameModel = LinearRegressionModel.load(sc, path)

predict方法


语法:

predict(x: Union[VectorLike, pyspark.rdd.RDD[VectorLike]]) → Union[float, pyspark.rdd.RDD[float]]


预测给定向量或包含自变量值的向量RDD的因变量值。


参数说明:


x:输入向量以及RDD数据或者是小数加上RDD数据

lrm = LinearRegressionModel([0.2],intercept=3)
lrm.predict([0.2])

511ae1f0273042aea27855ddf2542f58.png

save方法


语法:


save(sc: pyspark.context.SparkContext, path: str)


保存一个LinearRegressionModel模型。


4.LinearRegressionWithSGD


生成一个使用随机梯度下降训练无正则化的线性回归模型。


SGD的含义就是Stochastic Gradient Descent (SGD),随机梯度下降。该模型通过train方法训练。


train方法

classmethod train(data: pyspark.rdd.RDD[pyspark.mllib.regression.LabeledPoint],
                  iterations: int = 100, 
                  step: float = 1.0, 
                  miniBatchFraction: float = 1.0, 
                  initialWeights: Optional[VectorLike] = None,
                  regParam: float = 0.0,
                  regType: Optional[str] = None,
                  intercept: bool = False,
                  validateData: bool = True,
                  convergenceTol: float = 0.001) 
 → pyspark.mllib.regression.LinearRegressionModel

使用随机梯度下降(SGD)训练线性回归模型解决了最小二乘回归公式:

gif.gif

的均方误差。数据矩阵有n行,输入RDD保存A的行集合,每个行都有相应的右侧标签y。


参数说明:


data:接收类型为Pyspark.RDD。指定训练用到的数据集,可以是LabeledPoint的RDD。

iterations:接收类型为int,指定迭代次数。

step:接收类型为float,SGD中使用的阶跃参数,默认为1.0。

miniBatchFraction:接收类型为float,用于每次SGD迭代的数据部分,默认为1.0.

initialWeights:接收类型为pyspark.mllib.linalg.Vector,指定初始权重。

regParam:接收类型为float,为正则化参数。默认为0.0.

regType:接收类型为str,用于训练模型的正则化子类型。

使用l1正则化:“l1”

使用l2正则化:“l2”

若为None则表示无正则化(默认)

intercept:接收类型为bool,指示是否使用训练数据的增强表示(即是否激活偏差特征)。(默认值:False)

validateData:接收类型为bool,指示算法是否应在训练前验证数据。(默认值:True)

convergenceTol:接收类型为float,决定迭代终止的条件。(默认值:0.001)

data = [
    LabeledPoint(0.0, [0.0]),
    LabeledPoint(1.0, [1.0]),
    LabeledPoint(3.0, [2.0]),
    LabeledPoint(2.0, [3.0])
]
lrm = LinearRegressionWithSGD.train(sc.parallelize(data), iterations=10,initialWeights=np.array([1.0]))
lrm.predict(np.array([0.0]))

499e5d96d8a84b4eb29c6fffc65b8c03.png

同样化为SparseVector也是一样:

data = [
    LabeledPoint(0.0, SparseVector(1, {0: 0.0})),
    LabeledPoint(1.0, SparseVector(1, {0: 1.0})),
    LabeledPoint(3.0, SparseVector(1, {0: 2.0})),
    LabeledPoint(2.0, SparseVector(1, {0: 3.0}))
]
lrm = LinearRegressionWithSGD.train(sc.parallelize(data), iterations=10,initialWeights=np.array([1.0]))
lrm.predict(np.array([0.0]))

5c5f1ae0a7bd409da20b85cbd2d0bbaa.png

目录
相关文章
|
2月前
|
机器学习/深度学习 数据采集 数据挖掘
实战派教学:掌握Scikit-learn,轻松实现数据分析与机器学习模型优化!
【10月更文挑战第4天】Scikit-learn凭借高效、易用及全面性成为数据科学领域的首选工具,简化了数据预处理、模型训练与评估流程,并提供丰富算法库。本文通过实战教学,详细介绍Scikit-learn的基础入门、数据预处理、模型选择与训练、评估及调优等关键步骤,助你快速掌握并优化数据分析与机器学习模型。从环境搭建到参数调优,每一步都配有示例代码,便于理解和实践。
100 2
|
21天前
|
机器学习/深度学习 数据采集 算法
机器学习在医疗诊断中的前沿应用,包括神经网络、决策树和支持向量机等方法,及其在医学影像、疾病预测和基因数据分析中的具体应用
医疗诊断是医学的核心,其准确性和效率至关重要。本文探讨了机器学习在医疗诊断中的前沿应用,包括神经网络、决策树和支持向量机等方法,及其在医学影像、疾病预测和基因数据分析中的具体应用。文章还讨论了Python在构建机器学习模型中的作用,面临的挑战及应对策略,并展望了未来的发展趋势。
70 1
|
1月前
|
机器学习/深度学习 数据采集 人工智能
探索机器学习:从理论到Python代码实践
【10月更文挑战第36天】本文将深入浅出地介绍机器学习的基本概念、主要算法及其在Python中的实现。我们将通过实际案例,展示如何使用scikit-learn库进行数据预处理、模型选择和参数调优。无论你是初学者还是有一定基础的开发者,都能从中获得启发和实践指导。
46 2
|
1月前
|
机器学习/深度学习 数据采集 人工智能
揭秘AI:机器学习的魔法与代码
【10月更文挑战第33天】本文将带你走进AI的世界,了解机器学习的原理和应用。我们将通过Python代码示例,展示如何实现一个简单的线性回归模型。无论你是AI新手还是有经验的开发者,这篇文章都会给你带来新的启示。让我们一起探索AI的奥秘吧!
|
2月前
|
数据采集 移动开发 数据可视化
模型预测笔记(一):数据清洗分析及可视化、模型搭建、模型训练和预测代码一体化和对应结果展示(可作为baseline)
这篇文章介绍了数据清洗、分析、可视化、模型搭建、训练和预测的全过程,包括缺失值处理、异常值处理、特征选择、数据归一化等关键步骤,并展示了模型融合技术。
97 1
模型预测笔记(一):数据清洗分析及可视化、模型搭建、模型训练和预测代码一体化和对应结果展示(可作为baseline)
|
2月前
|
机器学习/深度学习 并行计算 数据挖掘
R语言是一种强大的统计分析工具,广泛应用于数据分析和机器学习领域
【10月更文挑战第21天】R语言是一种强大的统计分析工具,广泛应用于数据分析和机器学习领域。本文将介绍R语言中的一些高级编程技巧,包括函数式编程、向量化运算、字符串处理、循环和条件语句、异常处理和性能优化等方面,以帮助读者更好地掌握R语言的编程技巧,提高数据分析的效率。
55 2
|
2月前
|
机器学习/深度学习 人工智能 算法
揭开深度学习与传统机器学习的神秘面纱:从理论差异到实战代码详解两者间的选择与应用策略全面解析
【10月更文挑战第10天】本文探讨了深度学习与传统机器学习的区别,通过图像识别和语音处理等领域的应用案例,展示了深度学习在自动特征学习和处理大规模数据方面的优势。文中还提供了一个Python代码示例,使用TensorFlow构建多层感知器(MLP)并与Scikit-learn中的逻辑回归模型进行对比,进一步说明了两者的不同特点。
88 2
|
2月前
|
机器学习/深度学习 算法 数据挖掘
从零到精通:Scikit-learn在手,数据分析与机器学习模型评估不再难!
【10月更文挑战第4天】在数据科学领域,模型评估是连接理论与实践的桥梁,帮助我们理解模型在未知数据上的表现。对于初学者而言,众多评估指标和工具常令人困惑。幸运的是,Scikit-learn 这一强大的 Python 库使模型评估变得简单。本文通过问答形式,带你逐步掌握 Scikit-learn 的评估技巧。Scikit-learn 提供了丰富的工具,如交叉验证、评分函数(准确率、精确率、召回率、F1 分数)、混淆矩阵和 ROC 曲线等。
43 1
|
3月前
|
机器学习/深度学习 算法 数据挖掘
Python数据分析革命:Scikit-learn库,让机器学习模型训练与评估变得简单高效!
在数据驱动时代,Python 以强大的生态系统成为数据科学的首选语言,而 Scikit-learn 则因简洁的 API 和广泛的支持脱颖而出。本文将指导你使用 Scikit-learn 进行机器学习模型的训练与评估。首先通过 `pip install scikit-learn` 安装库,然后利用内置数据集进行数据准备,选择合适的模型(如逻辑回归),并通过交叉验证评估其性能。最终,使用模型对新数据进行预测,简化整个流程。无论你是新手还是专家,Scikit-learn 都能助你一臂之力。
152 8
|
3月前
|
机器学习/深度学习 数据可视化 数据挖掘
数据可视化大不同!Python数据分析与机器学习中的Matplotlib、Seaborn应用新视角!
在数据科学与机器学习领域,数据可视化是理解数据和优化模型的关键。Python凭借其强大的可视化库Matplotlib和Seaborn成为首选语言。本文通过分析一份包含房屋面积、卧室数量等特征及售价的数据集,展示了如何使用Matplotlib绘制散点图,揭示房屋面积与售价的正相关关系;并利用Seaborn的pairplot探索多变量间的关系。在机器学习建模阶段,通过随机森林模型展示特征重要性的可视化,帮助优化模型。这两个库在数据分析与建模中展现出广泛的应用价值。
51 2