iT邦幫忙

2018 iT 邦幫忙鐵人賽
DAY 9
0

Loading & exploring house sale data

今天要來實作一個跟回歸分析相關的題目,我們將引用課程提供的房價訊息(King County data),其位於美國西雅圖

我們將用這個資料來做回歸預測房價

首先我們必須先引入 Graph Lab

import graphlab

接著導入房價的資料(home_data.gl),我們也可以透過graphlab來讓資料視覺化

seles = graphlab.SFrame('/home/user/nylon7/machine_learning/week1/home_data.gl/')
seles
seles.show(view="Scatter Plot",x="sqft_living",y="price")
id date price bedrooms bathrooms sqft_living sqft_lot floors waterfront view condition grade sqft_above sqft_basement yr_built yr_renovated zipcode lat long sqft_living15
7129300520 2014-10-13 00:00:00+00:00 221900 3 1 1180 5650 1 0 0 3 7 1180 0 1955 0 98178 47.51123398 -122.25677536 1340.0
6414100192 2014-12-09 00:00:00+00:00 538000 3 2.25 2570 7242 2 0 0 3 7 2170 400 1951 1991 98125 47.72102274 -122.3188624 1690.0
5631500400 2015-02-25 00:00:00+00:00 180000 2 1 770 10000 1 0 0 3 6 770 0 1933 0 98028 47.73792661 -122.23319601 2720.0
2487200875 2014-12-09 00:00:00+00:00 604000 4 3 1960 5000 1 0 0 5 7 1050 910 1965 0 98136 47.52082 -122.39318505 1360.0
1954400510 2015-02-18 00:00:00+00:00 510000 3 2 1680 8080 1 0 0 3 8 1680 0 1987 0 98074 47.61681228 -122.04490059 1800.0
7237550310 2014-05-12 00:00:00+00:00 1225000 4 4.5 5420 101930 1 0 0 3 11 3890 1530 2001 0 98053 47.65611835 -122.00528655 4760.0
1321400060 2014-06-27 00:00:00+00:00 257500 3 2.25 1715 6819 2 0 0 3 7 1715 0 1995 0 98003 47.30972002 -122.32704857 2238.0
2008000270 2015-01-15 00:00:00+00:00 291850 3 1.5 1060 9711 1 0 0 3 7 1060 0 1963 0 98198 47.40949984 -122.31457273 1650.0
2414600126 2015-04-15 00:00:00+00:00 229500 3 1 1780 7470 1 0 0 3 7 1050 730 1960 0 98146 47.51229381 -122.33659507 1780.0
3793500160 2015-03-12 00:00:00+00:00 323000 3 2.5 1890 6560 2 0 0 3 7 1890 0 2003 0 98038 47.36840673 -122.0308176 2390.0

我們可以發現,這張圖大部分的情況都符合我們直覺的反應,房子地坪越大,價格越高

https://ithelp.ithome.com.tw/upload/images/20171227/20107448uQDsLYhPzk.png

Splitting the data into training and test sets

接著我們想要建立一個回歸的模型,所以最重要的是,我們要先處理測試集與訓練集

所以我們必須把資料分成測試集與訓練集

我們呼叫隨機分布函數(random_split())

#.8 意味著 80%訓練集/20%測試集
train_data,test_data = seles.random_split(.8,seed=0)

Learning a simple regression model to predict house prices from house size

有了測試集與訓練集之後,接下來就是建立回歸模型(在這次的課程當中只會先用內建的演算法)

# 預測目標為"價格",特徵為"房子大小"
sqft_model = graphlab.linear_regression.create(train_data,target='price',features=['sqft_living'])

我們將得到一個圖表,它使用的演算法為Newton's method(graphlab 除非指定否則會自動選擇)
https://ithelp.ithome.com.tw/upload/images/20171227/20107448lfi1TcVBDi.png

Evaluating error (RMSE) of the simple model

我們可以從測試集裡面取得平均的價格

接著可以從之前建立的模型呼叫它的評估函數,它會返回一些資料告訴我們擬合的狀況

print test_data['price'].mean()
#543,000
print sqft_model.evaluate(test_data)
#{'max_error': 4130610.392309714, 'rmse': 255224.89364924902}

此例的西雅圖均價為543,000

測試資料的最大誤差為410萬,我們可以從中推敲一定有一個房子的資料是異常,導致這個模型預測的不夠精確

RMSE(方均根差)是種在測量數值之間差異的量度

Visualizing predictions of simple model with Matplotlib

接下來我們要顯示我們的預測

import matplotlib.pyplot as plt

#用test_data作為參數,房子大小為X軸價格為Y軸,並以dot表示每一個測試
#接著是預測的線,房子大小依然為X軸,Y軸則為預測價格,並以'-'來繪製
plt.plot(test_data['sqft_living'],test_data['price'],'.',
         test_data['sqft_living'],sqft_model.predict(test_data),'-')

https://ithelp.ithome.com.tw/upload/images/20171227/20107448SrD2RMfw4f.jpg

後記

還有一半還沒完成,今天錯估了形勢,以為已經安裝成功,結果沒想到爆出這種錯誤,還好有線上的jupyter可用
https://ithelp.ithome.com.tw/upload/images/20171227/20107448V7ankAzxpD.png

不只如此,用makedown畫那張房價資料圖,讓我差點崩潰QQ

Reference:


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

尚未有邦友留言

立即登入留言