iT邦幫忙

2018 iT 邦幫忙鐵人賽
DAY 10
0

Inspecting the model coefficients learned

sqft_model.get('coefficients')
name index value stderr
(intercept) None -43814.8902666 5047.42632188
sqft_living None 280.360245938 2.21700145099

我們可以從之前的模型去得到這些係數(權重)

  • 截距:直線與x相交的地方
  • 斜率:單位面積的價格,每一平方要花多少錢

Exploring other features of the data

我們已經做了一些簡單的回歸,如果你還記得,其實先前的資料還有許多的特徵

#將要新增的特徵,新增到list當中
my_features = ['bedrooms','bathrooms','sqft_living','sqft_lot','floors','zipcode']
sales[my_features].show

https://ithelp.ithome.com.tw/upload/images/20171228/20107448shsz6cxuYe.png

我們可以輕易地從中得知一些訊息

  • 大部份的房子都是三間臥室
  • 至於浴室在美國有個有特殊的規定,如果是套房的浴室算1個、不在套房內的(不含淋浴設備)算0.5個、如果是不再套房內的浴室(有淋浴沒浴缸)算0.75個(到底是三小= =)
  • 大部份房子都是一層樓

接下來我想對某些特徵做出對應的視覺化

#BoxWhisker Plot將會顯示兩個特徵之間的關係
#我想看看門牌與價格的關聯(我曾聽說掛上中正區的門牌50萬起跳、明明萬華就在隔壁)
sales.show(view='BoxWhisker Plot',x='zipcode',y='price')

https://ithelp.ithome.com.tw/upload/images/20171228/20107448iwijDkcVwC.jpg

我們可以看到zipcode中98039的價格非常的誇張,記住這個數字,接下來將會揭曉

Learning a model to predict house prices from more features

上面舉了一個郵政區號對價格的影響,但是這正確嗎?照理說臥室數量、衛浴數量也會對價格產生影響吧?

所以我們必須新增更多的特徵嗎?為了要驗證這件事情,我們只要在新增一個回歸把我們的特徵通通加進去在做比較即可

my_features_model = graphlab.linear_regression.create(train_data,target='price',features=my_features)

https://ithelp.ithome.com.tw/upload/images/20171228/20107448PnD1wolV1R.jpg

接著同樣衡量模型的結果

print sqft_model.evaluate(test_data)
# {'max_error': 4142275.367360657, 'rmse': 255188.09204898693}
print my_features_model.evaluate(test_data)
# {'max_error': 3500449.806693536, 'rmse': 179356.3725536438}

只取坪數大小為特徵的最大誤差約為400萬,而加入我選定的特徵最大的愈差約為350萬

方均根差從255000下降到179000,顯而易見的是加入更多資料可以降低更多的誤差率

Applying learned models to predict price of an average house

接下來讓我們使用我們的模型來實際的預測我們的房價,我們從訓練集中隨意擷取一間房子

house1 = sales[sales['id'] == '5309101200']
# price:620000
id date price bedrooms bathrooms sqft_living sqft_lot floors view condition grade sqft_above sqft_basement yr_built yr_renovated zipcode lat long sqft_living15 sqft_lot15
5309101200 2014-06-05 00:00:00+00:00 620000 4 2.25 2400 5350 1.5 0 4 7 1460 940 1929 0 98117 47.67632376 -122.37010126 1250.0 4880.0

接著間兩個模型都代入

print sqft_model.predict(house1)
# [630004.8234759354]
print my_features_model.predict(house1)
# [720058.291038626]

從結果來看未必增加越多特徵可以得到接近正確數字的解,有時候針對某些特定的房子,簡單的模型反而會表現得比複雜的模型好

不過一般情況下,越多特徵其表現應該是越精確的

Applying learned models to predict price of two fancy houses

house2 = sales[sales['id'] == '1925069082']
# price:2200000
id date price bedrooms bathrooms sqft_living sqft_lot floors view condition grade sqft_above sqft_basement yr_built yr_renovated zipcode lat long sqft_living15 sqft_lot15
1925069082 2015-05-11 00:00:00+00:00 2200000 5 4.25 4640 22703 2 4 5 8 2860 1780 1952 0 98052 47.63925783 -122.09722322 3140.0 14200.0

這間房在2015-05-11被售出,4640平方公尺,遠比之前那間大很多

print sqft_model.predict(house2)
[1261846.2617304123]

print my_features_model.predict(house2)
# [720058.291038626]
[1451243.0229620067]

這次的結果顯示了,就比較合乎預期,模型2的預測比模型1來的優秀,但是即便如此還是離現實中有一段差距

在課程中教授揭露了這間房子是位於海邊的度假房

所以可以想見

即便你增加了更多的特徵,還是可能因為缺少關鍵特徵而使得預測結果離真實數據有極大誤差

後記

感謝我的同伴提供了此等神物給我,讓我不用在用語法畫到手斷掉XD

markdown table editor 顧名思義,幫你自動產生語法表格的好物

接下來同樣會順著課程繼續往下做,我猜這門課應該到20天左右我就能跟完

最近上班都忙到比較晚(太遜),導致寫出來稿的品質都很差QQ

不過接下來會有比較長的假期,還好是單身狗,所以我會努力利用假期,讓文章品質越來越好的(握拳)

Reference:


上一篇
[day 8] 回歸分析-實作(上)
下一篇
[day 10] 分類-實作
系列文
到底是在learning什麼拉30

尚未有邦友留言

立即登入留言