logo
Loading...

訓練集測試集名詞解釋定義 - Cupoy

# 訓練資料需要 train_X, train_Y / 預測輸出需要 ids(識別每個預測值), t...

訓練集測試集名詞解釋定義

2020/03/02 下午 11:24
機器學習共學討論版
江柏勳
觀看數:10
回答數:3
收藏數:0

# 訓練資料需要 train_X, train_Y / 預測輸出需要 ids(識別每個預測值), test_X
# 在此先抽離出 train_Y 與 ids, 而先將 train_X, test_X 該有的資料合併成 df, 先作特徵工程

想問ids 、test_X作用是(像我懂train data就是訓練用的),是指用這些數據來測試結果是否如同預期,而測試的數據稱為text_X?

然後在這邊抽離指定的數據(像範例就是SalesPrice)意義何在?,最後甚麼是特徵工程?

回答列表

  • 2020/03/03 上午 02:47
    張維元 (WeiYuan)
    贊同數:2
    不贊同數:0
    留言數:1

    嗨,柏勳


    總體來說是這樣,ids 是 training data 的 id,我們會先將 training data 分成 train_X 跟 train_Y,然後將 train_X, test_X 合併起來做特徵工程,最後再利用  ids 把 train_X 跟 train_Y 合併回來。特徵工程指的是在模型之前的資料前處理,例如 Normalize 之類的。


    如果這個回答對你有幫助請主動點選「有幫助」的按鈕,也可以追蹤我的GITHUB帳號。若還有問題的話,也歡迎繼續再追問或者把你理解的部分整理上來,我都會提供你 Review 和 Feedback 😃😃😃

  • 2020/03/03 下午 09:53
    李子明
    贊同數:2
    不贊同數:0
    留言數:2

    圖中分享一個我之前整理的筆記,但我不確定是不是對的,有任何錯誤再麻煩務必指導 ^^"

    你的train_X與train_Y分別對應到圖中的dx與dy,機器學習的目的是為了找到TheRule,但基本上不太可能找得到的,通常找到的會是近似解,也就是RuleRE,這是一個帶上RE誤差的解。


    這個RuleRE是由dd訓出來的,所以在很努力訓的情況下,我們完全做得到讓dy等於DY(比如dd有一萬個元素,那就用一萬個判斷,case by case的處理),但這裡的dd只是DD的一個子集而已,所以當dy完全等於DY不見得是件好事,因為這很有可能是一種叫做「overfitting」的現象,一個簡單避免overfitting的方式就是使用不存在於dd中的test_X來使用RuleRE進行推論,然後由結果來確定這個RuleRE是overfitting的。


    範例七的例子是房價預測,所以目的就是為了預測出房價,不把SalesPrice抽離的話,答案就在裡面了,這對聰明的機器學習模型是很不利的,因為肯定會overfitting。


    每種機器學習模型都有自己的獨特性,當我們把「最適當的數據」輸入給機器學習模型進行訓練時,我們就可以較好的得到較佳的結果。我們把「原始數據整理成最適當的數據」這個步驟就是特徵工程。

  • 2020/03/05 下午 08:23
    Matthew Huang
    贊同數:1
    不贊同數:0
    留言數:0

    這邊整理一下思緒。


    1.我們需要知道,嚴謹的監督式學習會需要三份資料,訓練集(training set)、驗證集(validation set)和測試集(test set),但常見狀況下會只有訓練集(training set)和測試集(test set)。而每一份資料都會有相應的特徵(X)和目標(y),所以我們可以自然的推敲出train_X、train_y、val_X、val_y、test_X、test_Y。


    2. df_train是由81個特徵所組成的一份資料,用來作為模型訓練時使用,絕大部分特徵都是作為train_X,只有1個特徵被定義為train_Y(也就是'SalePrice')。


    3. df_test是用來作為測試模型時使用。但這份資料跟df_train相比後會發現df_test沒有'SalePrice'這一行,也因此df_test只有80個特徵。這會有什麼問題呢,其實問題不大,因為我們仍然擁有製作test_X的所有必要條件,因此可以讓模型根據test_X去推測相應的房價,只可惜因為原始資料df_test沒有'SalePrice',所以我們無法透過test_y知道到底模型的測試誤差是多少,也就是說不知道模型是否有過適、欠適或者棒棒der。


    根據TA的回饋,可以知道這段代碼後續應該是要開始進行特徵工程(或者數據清洗等等之類的),但因為本堂課篇幅有限所以後半段內容就掐掉了,不過還是可以介紹一下這段內容:


    1.  對訓練集df_train的'SalePrice'取log1p,得到train_Y。log1p可以防止log(0)=爆炸的情形發生。

    2.  將測試集df_test中每筆案件的流水號'Id'定義為ids(1461~2919)

    3.  把df_train裡面的'Id'、'SalePrice'砍掉,所以訓練集只剩81-2=79個特徵

    4.  把df_test裡面的'Id'砍掉,所以訓練集只剩80-1=79個特徵

    5. 將訓練集和測試集合併為大數據集df

    我猜接下來是

    6. 對df進行特徵工程或者數據清洗

    7. 根據ids得知原先df_test的數據長度,因此可以很容易的將大數據集df分解回到df_train(1-1460)、df_test(1461-2919)。如果沒有ids,就會跟當兵時洗衣袋沒有寫名子,內褲被鄰兵穿走的情形發生。

    8. 完全保留或者部分保留df_train的所有特徵,並且命名為train_X

    9. 同上一條,我們可以輕易得到由df_test產生的test_X


    PS1. 至於val_X、val_y呢,我猜各位看到這邊腦袋也炸了我就不講了。好啦就是從train_X、train_y再拆出[真-train_X、真-train_y]、[val_X、val_y]。

    PS2. 而test_y則是和開頭提到的一樣,因為原數據沒有提供所以也就沒有這東西了。

    PS3. 然後上述這些都跟Day007的練習題毫無相關呵呵。