iT邦幫忙

第 11 屆 iThome 鐵人賽

DAY 25
0
AI & Data

實實在在地學習人工智慧-基礎理論探討與經典案例實作系列 第 25

【Day 25】開始寫程式拉!房價預測實戰演練 -篩選資料拔除和切分出驗證集

  • 分享至 

  • xImage
  •  

祝大家雙十節快樂!連假愉快!
昨天提及了怎麼處理資料中不是float或者是int的方式,也順便提及encoding的方法,那下一步呢?之前在【Day 21】有提到「驗證集」的概念,它可以幫助我們獲得更好的準確率,讓我們在逼近最佳模型的時候能夠進行評估修正!但是,看了看資料夾(下面這張圖)
https://ithelp.ithome.com.tw/upload/images/20191010/20121049viYeuRZVuj.jpg
啊我的驗證集資料呢!?明顯的,資料提供者並沒有事先幫我們分好,所以我們必須自己切分囉~

train_test_split切分數據之小小程式熱身

來切分JOHN國的10筆資料!
id | price | sqft_living
------------- | ----------
1 | 500000 | 55
2 | 275000 | 27
3 | 360000 | 33
4 | 780000 | 70
5 | 145000 | 13
6 | 280000 | 26
7 | 860000 | 89
8 | 200000 | 21
9 | 90000 | 10
10 | 680000 | 67

import numpy as np
from sklearn.model_selection import train_test_split

x_data = np.array([55,27,33,70,13,26,89,21,10,67])
y_data = np.array([500000,275000,360000,780000,145000,280000,860000,200000,90000,680000])
print("x_data",x_data)
print("y_data",y_data)

X_train, X_test, y_train, y_test = train_test_split(x_data, y_data, test_size=0.2, random_state=0)
#X_train,X_test, y_train, y_test = model_selection.train_test_split(train_data,train_target,test_size=0.2, random_state=0)
#train_test_split的括號裡面,1.資料的x那些種類2.y的部分3.test的部分要佔全部資料的多少4.指定一個隨機種子,0的話就是隨機囉
#就是一種隨機切分資料的功能
#隨機種子相同的話,在另一個框框在跑一次一樣的code還是會出現相同的隨機數
print("X_train",X_train)
print("y_train",y_train)
print("X_test",X_test)
print("y_test",y_test)

輸出:

x_data [55 27 33 70 13 26 89 21 10 67]
y_data [500000 275000 360000 780000 145000 280000 860000 200000  90000 680000]
X_train [13 67 27 89 21 70 55 26]
y_train [145000 680000 275000 860000 200000 780000 500000 280000]
X_test [33 10]
y_test [360000  90000]

會看到因為我的test_size設成0.2,所以原本10筆資料被隨機切分成train有8筆,test則是2筆,這樣就切分成功拉!

繼續實戰演練

先拔掉相關細數小於0.6的傢伙

for i in df_train.columns: #查找原本資料中所有columns
    if i not in high_corr: #如果沒有相關係數大於0.6的話
        df_train = df_train.drop(i,axis=1) #就把它拔掉
print(df_train)

輸出:
https://ithelp.ithome.com.tw/upload/images/20191010/20121049uPK3Zuk9Ch.jpg
https://ithelp.ithome.com.tw/upload/images/20191010/20121049Ypy1KLv9T2.jpg
所以剩下的都是和SalePrice相關係數大於0.6的行們

先取出SalePrice

我們要先把SalePrice拿出來當作Y,才能用預測值跟真的Y(SalePrice)比較。什麼什麼,你不知道我在說什麼嗎?可以回去看【Day 06】,可以複習一下基礎的概念哦!那我們就來取出吧!

train_targets = df_train["SalePrice"].values #把SalePrice這行數值整個拉出來
train_data = df_train.drop(columns=["SalePrice"]) #刪除SalePrice這行
print(train_targets)
print("*"*50)
print(train_data)

輸出:
https://ithelp.ithome.com.tw/upload/images/20191010/20121049od4lOGKb2A.jpg

切分出驗證集

from sklearn.model_selection import train_test_split
X_train,X_validation,Y_trian,Y_validation = train_test_split(train_data, train_targets, test_size=0.2, random_state=0)
#X_train,X_test, y_train, y_test = model_selection.train_test_split(train_data,train_target,test_size=0.2, random_state=0)
#train_test_split的括號裡面,1.資料的x那些種類2.y的部分3.X_test的部分要佔全部資料的多少(我們這裡是驗證集唷)4.指定一個隨機種子,0的話就是隨機囉
#就是一種隨機切分資料的功能
#隨機種子相同的話,在另一個框框在跑一次一樣的code還是會出現相同的隨機數
print(X_train.shape)
print(Y_trian.shape)
print('*'*50)
print(X_validation.shape)
print(Y_validation.shape)
X_train_dataset = X_train.values #取出數值,轉換回list
X_validation_dataset = X_validation.values
print(X_train_dataset)

輸出:

(1168, 6)
(1168,)
**************************************************
(292, 6)
(292,)
[[   9 1822 1828 1828    3  774]
 [   5  894  894  894    1  308]
 [   5  876  964  964    2  432]
 ...
 [   6    0 1318 1902    2  539]
 [   7 1374 1557 1557    2  420]
 [   7 1195 1195 1839    2  486]]

明天就要進入資料處理的尾端囉,明天會講述些許的視覺化以及資料標準化的過程!繼續努力囉~


上一篇
【Day 24】開始寫程式拉!房價預測實戰演練 -兩種Encoding介紹和抓出消失的object並處置
下一篇
【Day 26】開始寫程式拉!房價預測實戰演練 -標準化介紹與實踐
系列文
實實在在地學習人工智慧-基礎理論探討與經典案例實作30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言