租房也有套路?基於多元線性回歸,爲你預測租賃價格

點擊上方關注,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
租房也有套路?基於多元線性迴歸,為你預測租賃價格

編譯出品


分享到:


相關文章: