概述

随着组织创建更多样化、更以用户为中心的数据产品和服务,对机器学习的需求也越来越大,机器学习可用于开发个性化、推荐和预测性见解。Apache Spark机器学习库(MLlib)允许数据科学家专注于他们的数据问题和模型,而不是解决围绕分布式数据的复杂性(如基础设施、配置等)。

在本教程模块中,您将学习如何:

我们还提供样的笔记本您可以导入它来访问和运行模块中包含的所有代码示例。

加载样例数据

开始使用机器学习的最简单的方法是使用一个示例Databricks数据集/ databricks-datasets在Databricks工作区中可访问的文件夹。例如,要访问比较城市人口与房屋销售中位数价格的文件,可以访问该文件/ databricks-datasets /样本/ population-vs-price / data_geo.csv

#自动推断数据的模式data = Spark .read.format(" CSV ") .option("header", "true") .option("inferSchema", "true") .load("/ databicks -datasets/samples/population-vs-price/data_geo.csv") data. Cache() #缓存数据,以便更快地重用

若要以表格格式查看此数据,而不是将此数据导出到第三方工具,可以使用显示()命令在你的Databricks笔记本。

显示器(数据)

为ML算法准备和可视化数据

在监督学习中——比如回归算法——你通常定义一个标签和一组特征。在这个线性回归示例中,标签是2015年的销售价格中位数,特征是2014年的人口估计。也就是说,您使用特征(种群)来预测标签(销售价格)。

首先删除缺少值的行,重命名特征列和标签列,将空格替换为_

Data = Data .dropna() #删除缺少值的行exprs = [col(列).alias(列。在data.columns中替换(' ','_'))

为了简化特征的创建,注册一个UDF来将特征(2014_Population_estimate)列向量转换为aVectorUDT键入并将其应用到列。

从pyspark.ml.linalg导入矢量,VectorUDT spark.udf。register("oneElementVec", lambda d: Vectors.dense([d]), returnType=VectorUDT()) tdata = data.select(*exprs).selectExpr("oneElementVec(2014_Population_estimate) as features", "2015_median_sales_price as label")

然后显示新的DataFrame:

显示器(tdata)

运行线性回归模型

在本节中,您将使用不同的正则化参数运行两个不同的线性回归模型,以确定这两个模型中的任何一个基于总体(特征)预测销售价格(标签)的效果如何。

构建模型

#从pyspark.ml.regression导入线性回归类导入线性回归#定义线性回归算法lr =线性回归()#使用不同的正则化参数modelA = lr拟合2个模型。fit(data, {lr. regparam:0.0}) modelB = lr. regparam。fit(数据,{lr.regParam: 100.0})

使用该模型,您还可以使用变换()函数,它添加了一个新的预测列。例如,下面的代码采用第一个模型(modelA),并根据特征(总体)向您显示标签(原始销售价格)和预测(预测销售价格)。

#做出预测predictionsA = model .transform(data) display(predictionsA)

评估模型

为了评估回归分析,计算均方根误差使用RegressionEvaluator.下面是用于计算这两个模型及其输出的Python代码。

from pyspark.ml.evaluation import RegressionEvaluator evaluator = RegressionEvaluator(metricName="rmse") rmse = evaluator.evaluate(predictionsA) print("ModelA:均方根误差=" + str(rmse)) # ModelA:均方根误差= 128.602026843 predictionsB = ModelB .transform(data) rmse = evaluator.evaluate(predictionsB) print("ModelB:均方根误差=" + str(rmse)) # ModelB:均方根误差= 129.496300193

可视化模型

与许多机器学习算法的典型情况一样,您希望将散点图可视化。由于Databricks支持pandas和ggplot,下面的代码使用pandas DataFrame (pydf)和ggplot创建一个线性回归图来显示散点图和两个回归模型。

导入numpy, pandas和ggplot Import numpy为np from pandas Import * from ggplot Import * #创建Python DataFrame pop = data。Map (lambda p: (p.features[0])).collect()价格=数据。map(lambda p: (p.label)).collect() predA = predictionsA.select("预测")。map(lambda r: r[0]).collect() predB = predictionsB.select("预测")。map(lambda r: r[0]).collect() #创建Pandas数据帧pydf = DataFrame({'pop':pop,'price':price,'predA':predA, 'predB':predB})可视化模型#创建散点图和两个回归模型(缩放指数)使用ggplot p = ggplot(pydf, aes('pop','price')) + geom_point(color='blue') + geom_line(pydf, aes('pop','predA'), color='red') + geom_line(pydf, aes('pop','predB'), color='green') + scale_x_log10() + scale_y_log10() display(p)

我们还提供样的笔记本您可以导入它来访问和运行模块中包含的所有代码示例。