租房也有套路?基于多元线性回归,为你预测租赁价格

点击上方关注,All in AI中国

上一次,我使用Neo4j浏览器中的简单线性回归为德克萨斯州奥斯汀的短期租赁创建了模型。(链接:https://towardsdatascience.com/graphs-and-linear-regression-734d1446e9cd) 在这篇文章中,我演示了如何通过一些小的调整,使同一组用户定义的过程创建一个具有多个独立变量的线性回归模型。这被称为多元线性回归。

租房也有套路?基于多元线性回归,为你预测租赁价格

我们之前使用短期租赁列表上的总房间数来预测其每晚的价格。然而,显然还有其他可能影响价格的因素。例如,一个靠近热门旅游区的距离可能会极大地影响其价值。让我们再看一下下面这个数据模型,考虑可以使用哪些额外信息来预测租赁价格。

租房也有套路?基于多元线性回归,为你预测租赁价格

由于我们没有收到地址,因此很难分析相对于奥斯汀最受欢迎目的地的位置。但是请考虑(:Review) - [:REVIEWS] - >(:Listing)关系。在我之前的文章中,我将我的数据集限制为仅包含至少有一次客户评论的房源列表。我这样做是为了消除可能定价不可靠的市场新品,并且它大大提高了我的模型的适应性。现在,让我们更深入一点,使用列表的评论数量以及它的房间数量来预测每晚价格。

请注意,我并没有真正统计上的理由来假设评论的数量会影响上市价格,主要是为了演示如何创建一个具有多个自变量的模型。

背景知识

在我们回到奥斯汀租赁市场之前,将回顾多元线性回归的重要细节。请记住,在简单线性回归中,我们希望使用单个自变量"x"的值来预测因变量"y"的值。不同之处在于,在多元线性回归中,我们使用多个自变量(x1,x2,...,xp)来预测y,而不是仅一个自变量。

多元线性回归的视觉理解有点复杂,它取决于自变量的数量(p)。这仅仅只是简单线性回归的一个实例:如果p = 1,(x1,y)数据点位于标准的二维坐标系(带有x和y轴)上。线性回归通过最适合数据的点得到直线。

租房也有套路?基于多元线性回归,为你预测租赁价格

如果p = 2,则这些(x1,x2,y)数据点位于三维坐标系(具有x,y和z轴)中,在多次线性回归找到最适合数据点的平面。

租房也有套路?基于多元线性回归,为你预测租赁价格

对于更多的自变量,视觉理解更抽象。对于p个独立变量,数据点(x1,x2,x3 ......,xp,y)存在于p + 1维空间中。真正重要的是线性模型(p维)可以用p + 1系数β0,β1,...,βp表示,因此y近似为方程y =β0+β1* x1 +β2* x2 + ... +βp* xp。

你需要知道这些

多元线性回归有两种类型:普通最小二乘法(OLS)(https://www.albert.io/blog/key-assumptions-of-ols-econometrics-review/)和广义最小二乘法(GLS)(https://www.statlect.com/fundamentals-of-statistics/generalized-least-squares)。两者之间的主要区别在于,OLS假设任意两个自变量之间没有很强的相关性,GLS通过转换数据,然后使用OLS来构建具有转换数据的模型来处理相关的自变量。

这些过程使用OLS的方法。因此,要构建成功的模型,首先应该考虑变量之间的关系。将卧室和住宿作为两个独立的自变量包含在一起可能不是一个好主意,因为卧室数量和容纳的客人数量可能具有很强的正相关性。另一方面,评论数量和房间数量之间没有明确的逻辑关系。对于定量的分析,需要选择自变量,使每对都具有接近零的Pearson相关系数(见下文)。(https://www.spss-tutorials.com/pearson-correlation-coefficient/)

多个LR在行动

好吧,让我们看看一组在Neo4j中构建的多元线性回归模型的查询。

建立

下载并安装最新的线性回归版本中的jar文件。(https://github.com/neo4j-graph-analytics/ml-models/releases/latest)运行:从Neo4j浏览器中播放http://guides.neo4j.com/listings并按照导入查询创建Will的短期租赁列表图表。有关安装线性回归程序和导入Austin租赁数据集的更全面指南,请参阅我之前的帖子。

拆分训练和测试数据

导入数据集并安装后,我们将数据集拆分为75:25(training:testing)样本。让我们从上次的最终模型开始构建,并且只考虑至少有一次客户评论的列表。标签75%:Train。

租房也有套路?基于多元线性回归,为你预测租赁价格

添加:Test标签到剩余的25%。

租房也有套路?基于多元线性回归,为你预测租赁价格

量化相关性

如果你想知道自变量之间的Pearson相关性,请使用函数regression.linear.correlation(List first,List second)。该函数的List 输入之一包含来自许多列表的聚合"评论数"数据,并且通过聚合来自每个列表的关系来计算每个"评论数"。我们不能在同一次查询中执行两个级别的聚合(collect(count(r)))。 因此,我们必须执行两次查询。

首先在数据集列表中存储num_reviews。

租房也有套路?基于多元线性回归,为你预测租赁价格

然后从所有列表中收集(num_reviews,rooms)数据并计算相关性。

租房也有套路?基于多元线性回归,为你预测租赁价格

租房也有套路?基于多元线性回归,为你预测租赁价格

Pearson相关系数在[-1,1]范围内,0表示无相关,1表示完全正相关,-1表示完全负相关。评论的数量和房间数量的相关性为-0.125,表明负相关非常弱。对于这种小的相关性,OLS是一种可以接受的方法,因此我们可以继续使用该模型。你可以阅读以下有关解释相关系数的更多信息。(https://www.dummies.com/education/math/statistics/how-to-interpret-a-correlation-coefficient-r/)

初始化模型

我们称之为相同的创建过程,但现在我们的模型框架是"多重"而不是"简单",自变量的数量是2而不是1。

租房也有套路?基于多元线性回归,为你预测租赁价格

添加训练数据

以与简单线性回归相同的格式添加已知数据。只需将另一个条目(评论数)添加到自变量列表中。

租房也有套路?基于多元线性回归,为你预测租赁价格

训练模型

我们必须训练模型,以便在接受测试数据或进行预测之前计算线参数(βi),确定系数(R²)等。如果你忘记了此步骤,然后尝试添加测试数据或进行预测,那么你的模型则会首先自动地进行训练。

租房也有套路?基于多元线性回归,为你预测租赁价格

注意,在调用训练程序之后,你仍然可以添加更多训练数据。在测试新模型之前,你只需要再次进行训练!

添加测试数据

分析模型在看不见的数据上的表现。请记住,添加测试数据时,需要使用附加参数"test"作为过程regression.linear.add的输入。

租房也有套路?基于多元线性回归,为你预测租赁价格

测试模型

现在已经添加了所有的测试数据,调用测试程序来计算测量值(在下面的testInfo中),以便我们分析模型的性能。

租房也有套路?基于多元线性回归,为你预测租赁价格

租房也有套路?基于多元线性回归,为你预测租赁价格

你还可以随时调用info过程返回有关模型的信息。

租房也有套路?基于多元线性回归,为你预测租赁价格

让我们来看看调整后的R²。这个值类似于我在上一篇文章中提到的R²,但它经过调整,以便随着自变量被添加到模型中,调整后的R²不会增加,除非模型的改进有许多偶然性。因此,当我们将多元线性回归模型(有两个独立变量)与先前模型(只有一个自变量)进行比较时,调整后的R²是衡量成功的更好方法。

我们通常寻找大于0.6,但接近1的R²值来表示更好的线性拟合。在这里,训练调整R²= 0.517并调整测试R²= 0.556。上一次,我们的R²值分别为0.500和0.559,用于训练和测试。使用多元线性回归创建的模型比上次训练数据的简单回归模型稍微好一点,对测试数据也大致相同。

退一步

在Neo4j,我和我的同事们正面临着这样的问题:机器学习和人工智能在图形数据库属于什么位置?这个问题有几个答案,其中没有一个是"正确"的答案。在我之前的文章中,我演示了如何在图中的数据上构建一个简单的机器学习模型,以避免导出到另一个软件。在这篇文章中,出现了另一个有趣的方面:能够使用图形结构中固有存储的数据构建模型。通过计算每个列表上的(:Review) - [:REVIEWS] - >(:Listing)关系的数量,我们能够轻松地检索"评论数量"的数据。在这方面,图形数据库增加了我们可以轻松访问的数据类型,以便构建机器学习模型。

展望未来,我很想探索机器学习模型如何更有效地利用数据集的图形结构来学习和预测。

总结

以下是使用itgression.linear进行多线性回归的程序调整的一个快速列表:

  • 在regression.linear.create期间指定模型类型“Multiple”
  • 在regression.linear.create中指定自变量的数量
  • 没有用于测试或训练数据的regression.linear.remove方法
  • 你无法使用regression.linear.copy将训练数据从一个模型复制到另一个模型
  • 在测试、分析或预测之前,你应该通过调用regression.linear.train来训练模型
  • 查看调整后的R²,以更准确地比较具有不同数量的自变量的模型
  • regression.linear.data返回模型的参数,而不是byte[]序列化。因此,你不能使用regression.linear.load
租房也有套路?基于多元线性回归,为你预测租赁价格

编译出品


分享到:


相關文章: