当前位置: 首页 > 科技观察

使用PySparkML构建机器学习模型

时间:2023-03-18 15:04:34 科技观察

Spark是一个开源框架,专门用于交互式查询、机器学习和实时工作负载,而PySpark是一个用于在Python中使用Spark的库。PySpark是一种出色的语言,可用于大规模执行探索性数据分析、构建机器学习管道以及为数据平台创建ETL。如果您已经熟悉Python和Pandas等库,PySpark是学习创建更具可扩展性的分析和管道的绝佳语言。这篇文章的目的是展示如何使用PySpark构建机器学习模型。Conda创建python虚拟环境conda将几乎所有的工具和第三方包都作为包进行管理,甚至包括python和conda本身。Anaconda是一个打包集合,里面预装了conda、某个版本的python、各种packages等。1、安装Anaconda。打开命令行输入conda-V查看是否安装,当前conda版本。通过Anaconda安装默认版本的Python,3.6对应Anaconda3-5.2,5.3之后的所有版本都是python3.7。(https://repo.anaconda.com/archive/)2.conda常用命令1)查看安装了哪些包condalist2)查看当前存在哪些虚拟环境condaenvlistcondainfo-e3)查看更新当前condacondaupdateconda3.Python创建一个虚拟环境condacreate-nyour_env_namepython=x.xanaconda命令创建一个虚拟环境,python版本为x.x,名称为your_env_name。your_env_name文件可以在Anaconda安装目录下的envs文件下找到。4.激活或切换虚拟环境打开命令行输入python--version查看当前python版本。Linux:sourceactivateyour_env_namWindows:activateyour_env_name5.在虚拟环境中安装附加包condainstall-nyour_env_name[package]6。关闭虚拟环境(即退出当前环境,回到PATH环境默认的python版本)deactivateenv_name#或`activateroot`切换回Linux下的根环境:sourcedeactivate7.删除虚拟环境condaremove-nyour_env_name--all8。删除环境时钟的某个包condaremove--name$your_env_name$package_name9.设置国内镜像http://Anaconda.org的服务器在国外。安装多个包时,conda的下载速度往往很慢。清华TUNA镜像源有Anaconda仓库的镜像,在conda配置中添加即可:#添加Anaconda的TUNA镜像condaconfig--addchannelshttps://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/#设置搜索时显示频道地址condaconfig--setshow_channel_urlsyes10.恢复默认镜像condaconfig--remove-keychannels安装PySparkPySpark的安装过程和其他python包(如Pandas、Numpy、scikit-learn)一样简单。一件重要的事情是,首先确保你的机器上安装了java。然后你可以在你的jupyternotebook上运行PySpark。探索数据我们使用糖尿病数据集,该数据集与来自美国国家糖尿病、消化和肾脏疾病研究所的糖尿病疾病相关。分类目标是预测患者是否患有糖尿病(是/否)。从pyspark.sql导入SparkSessionspark=SparkSession.builder.appName('ml-diabetes').getOrCreate()df=spark.read.csv('diabetes.csv',header=True,inferSchema=True)df.printSchema()该数据集由几个医学预测变量和一个目标变量Outcome组成。预测变量包括患者的妊娠次数、BMI、胰岛素水平、年龄等。Pregnencies:妊娠次数Glucose:2小时内口服葡萄糖耐量试验的血糖浓度BloodPressure:舒张压(mmHg)SkinThickness:三头肌皮褶厚度(mm)胰岛素:2小时血清胰岛素(muU/ml)BMI:体重指数(体重kg/(身高m)2)diabespedigreefunction:糖尿病谱系函数Age:年龄(岁)结果:类变量(0或1)输入变量:葡萄糖、血压、BMI、年龄、妊娠、胰岛素、皮肤厚度、糖尿病谱系函数。输出变量:结果。看看前五个观察结果。Pandas数据帧比SparkDataFrame.show()更漂亮。importpandasaspdpd.DataFrame(df.take(5),columns=df.columns).transpose()在PySpark中,您可以使用Pandas的DataFrame和toPandas()显示数据。df.toPandas()检查类是否完全平衡!df.groupby('Outcome').count().toPandas()描述性统计numeric_features=[t[0]fortindf.dtypesift[1]=='int']df.select(numeric_features)\。describe()\.toPandas()\.transpose()自变量之间的相关性frompandas.plottingimportscatter_matrixnumeric_data=df.select(numeric_features).toPandas()axs=scatter_matrix(numeric_data,figsize=(8,8));#旋转轴标签并删除轴ticksn=len(numeric_data.columns)foriinrange(n):v=axs[i,0]v.yaxis.label.set_rotation(0)v.yaxis.label。set_ha('right')v.set_yticks(())h=axs[n-1,i]h.xaxis.label.set_rotation(90)h.set_xticks(())数据准备和特征工程这部分,我们将删除不必要的列并填充缺失值。最后,为机器学习模型选择特征。这些功能将分为训练和测试部分。pyspark.sql.functionsimportisnull,when,count,coldf.select([count(when(isnull(c),c)).alias(c)forcindf.columns]).show()缺少数据处理这个数据集很棒,没有任何缺失值。删除不必要的列VectorAssembler-将多个列组合成向量列的特征转换器。#使用VectorAssembler组合所有特征required_features=['Glucose','BloodPressure','BMI','Age']frompyspark.ml.featureimportVectorAssemblerassembler=VectorAssembler(inputCols=required_features,outputCol='features')transformed_data=assembler.transform(dataset)transformed_data.show()现在特征到向量的转换已经完成。训练和测试拆分将数据随机拆分为训练和测试集,并为可重复性设置种子。(training_data,test_data)=transformed_data.randomSplit([0.8,0.2],seed=2020)print("训练数据集总数:"+str(training_data.count()))print("测试数据集总数:"+str(test_data.count()))训练数据集总数:620测试数据集数量:148机器学习模型构建随机森林分类器随机森林是一种用于分类和回归的监督学习算法。但是,它主要用于分类问题。众所周知,森林是由树木组成的,树木越多,森林就越茂盛。同样,随机森林算法在数据样本上创建决策树,然后从每个样本中得到预测,最后通过投票选出最佳方案。这是一种比单个决策树更好的集成方法,因为它通过对结果进行平均来减少过度拟合。从pyspark.ml.classificationimportRandomForestClassifierrf=RandomForestClassifier(labelCol='Outcome',featuresCol='features',maxDepth=5)model=rf.fit(training_data)rf_predictions=model.transform(test_data)pyspark.ml.evaluationimportMulticlassClassificationEvaluatormulti_evaluator=MulticlassClassificationEvaluator(labelCol='Outcome',metricName='accuracy')print('RandomForestclassifierAccuracy:',multi_evaluator.evaluate(rf_predictions))树被广泛使用是因为它们易于解释、处理分类特征、扩展到多类分类设置,不需要特征缩放,并且能够捕获非线性和特征相互作用。从pyspark.ml.classification导入DecisionTreeClassifierdt=DecisionTreeClassifier(featuresCol='features',labelCol='Outcome',maxDepth=3)dtModel=dt.fit(training_data)dt_predictions=dtModel.transform(test_data)dt_predictions.select('Glucose','BloodPressure','BMI','Age','Outcome').show(10)评估决策树模型frompyspark.ml.evaluationimportMulticlassClassificationEvaluatormulti_evaluator=MulticlassClassificationEvaluator(labelCol='Outcome',metricName='accuracy')print('DecisionTreeAccuracy:',multi_evaluator.evaluate(dt_predictions))决策树准确性:0.78767Logistic回归模型Logistic回归是当因变量为二分(二元)时执行的适当回归分析。与所有回归分析一样,逻辑回归是一种预测分析。逻辑回归用于描述数据并解释因二元变量与一个或多个名义、有序、区间或比率水平自变量之间的关系。当因变量(目标)是分类变量时,使用逻辑回归。frompyspark.ml.classificationimportLogisticRegressionlr=LogisticRegression(featuresCol='features',labelCol='Outcome',maxIter=10)lrModel=lr.fit(training_data)lr_predictions=lrModel.transform(test_data)评估我们的逻辑回归模型。frompyspark.ml.evaluationimportMulticlassClassificationEvaluatormulti_evaluator=MulticlassClassificationEvaluator(labelCol='Outcome',metricName='accuracy')print('LogisticRegressionAccuracy:',multi_evaluator.evaluate(lr_predictions))逻辑回归模型8梯度提升模型8分类器7准确度:7梯度提升是一种用于回归和分类问题的机器学习技术,它生成一个预测模型作为弱预测模型(通常是决策树)的集合。frompyspark.ml.classificationimportGBTClassifiergb=GBTClassifier(labelCol='Outcome',featuresCol='features')gbModel=gb.fit(training_data)gb_predictions=gbModel.transform(test_data)评估我们的梯度提升树分类器。frompyspark.ml.evaluationimportMulticlassClassificationEvaluatormulti_evaluator=MulticlassClassificationEvaluator(labelCol='Outcome',metricName='accuracy')print('Gradient-boostedTreesAccuracy:',multi_evaluator.evaluate(gb_predictions))Gradient-boostedTreesAccuracy:',multi_evaluator.evaluate(gb_predictions))是数据科学家学习的一种很好的语言,因为它支持可扩展的分析和ML管道。如果您已经熟悉Python和Pandas,那么您的大部分知识都可以应用于Spark。总之,我们已经了解了如何使用PySpark构建机器学习应用程序。我们尝试了三种算法,梯度提升在我们的数据集上表现最好。