人工智慧通識-程式設計-房屋建議租金機器學習演算法思路
歡迎關注我的專欄( つ•̀ω•́)つ【人工智慧通識】
需求:58租房網希望為房東使用者提供一個 建議租金 功能,當房東使用者釋出資訊之前,網站會提示他什麼樣的租金價位比較合理。我們需要用機器學習演算法從58租房以往的租房資訊資料集中找到規律,根據房東使用者輸入的各種資訊計算得到一個合理的租金價位。
資料集
請參考這兩個文章:
我們已經利用爬蟲技術從58租房網站爬取到了資料,並且儲存到了csv檔案中,其中包含了4000多條已有的租房資訊。
請到百度網盤下載使用 58suzhou_zufang_4k.csv
檔案:
連結: https://pan.baidu.com/s/1PkjnKxNLWhnd2RBURTrs-w 密碼:5a9n。
由於上面兩篇文章已經修正更新,您自己爬取的檔案可能與我這個不同,所以強烈建議使用我這個。
將下載的資料集放到程式碼目錄一起,我們使用 Anaconda
的JupyterNotebook編寫程式碼,讀取這個資料集:
import pandas as pd csvfile='58suzhou_zufang_4k.csv' df=pd.read_csv(csvfile) df[:3] #顯示前3條資訊
執行結果如下圖:

每一行資料都有這麼幾個特徵列:
Unamed title momey shi ting wei area add jjr
其中對租金影響最大的可能是房屋面積和房屋地址(好的地段租金會明顯貴很多),其他因素也或多或少會產生影響,甚至一些這裡沒有包含的資訊,比如樓層數、照片數量等。
為了簡化案例,我們不考慮其他因素。而且我們首先從都是數字組成的面積因素開始入手。
思路分析
前一篇文章中使用了下圖表示房屋面積和租金直接的關係:

我們把問題再簡化一下,只考慮y=ax的情況,這樣我們就只要找出a的值就可以了。
怎麼找呢?可以先假設a是1,然後增加一點點(比如0.1,這可以視作 學習率learn rate ),評估一下是否更合理了,如果的確更好了,就繼續增加,否則就減少,直到無論增加還是減少只會變得更糟,那麼此時就是最好了。
價值函式Cost
我們的問題於是就變成了怎麼評估的問題。看下圖:

這張圖上灰色的線表示y=ax,如果足夠完美的話所有藍色小點所代表的樣本都應該位於這條灰色的線上,滿足房租y等於a乘以面積x。
所以,圖上橙色線的絕對值相加越大,代表偏移越多,絕對值相加越小,也就越接近正確答案。
與其計算橙色線絕對值的和,不如直接計算橙色線平方的和,也就是 和方差 ,假設100個樣本列表S,即:
價值函式的程式碼是:
import math def getCost(a): cost=0 for n in range(10): item=df.loc[n] area=float(item['area']) offset=(a*area-float(item['money'])) cost+=math.pow(offset,2) return cost
訓練函式Train
我們使用一個初始值a=1,然後使用學習率learnRate=1來迴圈增加a,並計算(a+1)的價值newCost,如果這個新的價值比之前的價值lastCost大了,那就把learnRate乘以-1,這樣下次(a+learnRate)就會變小,以此類推,當價值函式來回震盪之後我們最終就能得到最佳值。
def train(): lastA = 1 lastCost = 0 learnRate = 1 for i in range(100): newA = lastA + learnRate newCost = getCost(newA) if newCost > lastCost: learnRate = learnRate * (-1) lastCost = newCost lastA = newA return newA train()
在上面cost函式只取10個樣本的時候,當使用lastA=1,learnRate=1,迴圈100次之後,得到的是39,如果learnRate=10,那麼得到的就是41,如果learnRate=2得到的就是37。當然,其中39是最好的,如果使用learnRate=0.1,迴圈1000次就可以得到更好的。——從此可以看出迴圈次數和學習率對最終結果的影響很大。
a=39意味著什麼?這代表著每平米會導致租金上升39元,因為y=ax。
如果把cost函式中的樣本數量增加到100個,得到的結果就變為35,或者34.8。這明顯是一個更加接近的數字,因為它有更大的樣本作為參照。
注意不要嘗試學習率0.1而只迴圈100次,因為那樣最多增加10,還不足夠增加到34。
後續文章我們繼續進一步分析這個思路的更多細節和改進優化方法。
歡迎關注我的專欄( つ•̀ω•́)つ【人工智慧通識】
每個人的智慧新時代
如果您發現文章錯誤,請不吝留言指正;
如果您覺得有用,請點喜歡;
如果您覺得很有用,歡迎轉載~
END