iT邦幫忙

第 11 屆 iT 邦幫忙鐵人賽

DAY 28
0
Google Developers Machine Learning

ML Study Jam -機器學習系列 第 28

Day 28 The science of neural networks part 2 (神經網路小實驗)

Art and Science of Machine Learning

The science of neural networks part 2

Lab: Neural Networks Playground

再來介紹實際運用Neural Networks能達到多大的效用這邊我們利用tensorflow playground來做實驗

  1. 首先針對中間與外圍分布的數據來測試看看

    • 只用兩個x1、x2作為特徵來進行分類,結果會發現不論跑再久也分不出來
      https://ithelp.ithome.com.tw/upload/images/20190928/20120289OipiozyUIC.png
    • 再來我們先假設我們不知道數據的特性不用feature cross的概念,利用Neural Networks直接訓練試試看,神奇的事情發生了,竟然分開來了
      https://ithelp.ithome.com.tw/upload/images/20190928/20120289DlZYMKj4wd.png
  2. 好吧大家一定還是對它還有存疑,那下面這個實驗我特徵全部給它來使用看看啊

    • 大家會看到結果還是一樣特徵再多若是不符合數據的特性還是沒有辦法分類
      https://ithelp.ithome.com.tw/upload/images/20190928/20120289FEqgjzzgFP.png
    • 那我們加入Neural Networks來看看吧,又有一件神奇的事情發生,竟然又分開了,這到底是甚麼神奇的東西
      https://ithelp.ithome.com.tw/upload/images/20190928/20120289BcSPB8SA79.png

就如同我前一天所講的,每個神經元都是你的小幫手會幫你記住所有資訊,讓你可以不用那麼累,所以它只要負責圖中的一小部分,如果有相關資訊的話可以互相告知讓大家都知道,有點像是學校的模範生跟帶領大家進步讓全校成績都變好的概念。


Using Neural Networks to build ML model

前面說了那麼多關於神經網路的優點,沒錯今天就是要來建造屬於我們自己的神經網路了,這次使用的是DNNRegressor,看到這個名詞就知道我們要做關於回歸的模型,題目是有關於房價分析的中位數,一樣先創建、notebooks接著切換至training-data-analyst > courses > machine_learning > deepdive > 05_artandscience > labs打開c_neuralnetwork.ipynb,開始進行實驗。

  1. 首先先匯入相關的套件與檔案math、shutil、numpy、pandas、tensorflow等,接著去獲取數據

    • 利用head()、describe()來看數據內的資料是否正去與正確
      https://ithelp.ithome.com.tw/upload/images/20190928/2012028970Bc45UlWB.pnghttps://ithelp.ithome.com.tw/upload/images/20190928/20120289d7VaLZ8SSW.png
    • 依照我們自己的需求來增加特徵,這邊增加了一人幾間房、臥室、擁有幾間屋子等參數
      https://ithelp.ithome.com.tw/upload/images/20190928/20120289NrfCF9mKwq.png
    • 接著要把可能重複的資料拿掉這邊使用drop()參數把總房間與臥室、人口、戶口的資訊拿掉,確保資料不重複
      https://ithelp.ithome.com.tw/upload/images/20190928/20120289jsmIs099v3.png
  2. 接著就是最重要的一步,就是要去定義相關的參數以及分配數據

    • 首先我們要先定義需要的參數以及資料做篩選的動作,這邊選擇我們的特徵為房屋年齡、收入、一人幾間房、臥室、擁有幾間屋子與經緯度同時限制其範圍,並透過key()來查看是否正確
    featcols['longitude'] = tf.feature_column.bucketized_column(tf.feature_column.numeric_column('longitude'), np.linspace(-124.3, -114.3, 5).tolist())
    featcols['latitude'] = tf.feature_column.bucketized_column(tf.feature_column.numeric_column('latitude'), np.linspace(32.5, 42, 10).tolist())
    

    https://ithelp.ithome.com.tw/upload/images/20190928/201202899YxiHLm2Xn.png

    • 第二步進行切分數據的動作這邊的分配是80% train_data、20% test_data,同時要記得加入輸出資料夾位置、BATCH_SIZE
    msk = np.random.rand(len(data)) < 0.8
    train = data[msk]
    eval = data[~msk]
    
    BATCH= xxx
    OUTDIR = 'xxx'
    
    • 第三步就是要建立train、test的輸入function,x就是我們剛剛上面設定的參數,y則是我們希望的到的目標房屋中位數記得我們之前講的這邊要除上一個係數確保資料單位相近
    train_input_fn = 
    (x = train輸入 , y = train輸出/SCALE ,num_epochs = none, batch_size = BATCH, shuffle = True)
    eval_input_fn = 
    (x = eval輸入, y = eval輸出/SCALE, num_epochs = 1, batch_size = eval輸入, shuffle=False)
    
  3. 終於來到我們的最後一步了,就是建造我們的neural network model

    • 我們先建造一個標準的線性回歸模型與加入neural network作為比較,設定優化器與相關參數後開始訓練,我們可以看到最後平均Loss數值大約在0.58091左右
    myopt = tf.train.FtrlOptimizer(learning_rate = 0.01) 
    estimator = tf.estimator.LinearRegressor
    (model_dir = output_dir, feature_columns = featcols.values(),optimizer = myopt)
    

    https://ithelp.ithome.com.tw/upload/images/20190928/201202898a2YLeYu5I.pnghttps://ithelp.ithome.com.tw/upload/images/20190928/20120289zMYrDSJ26V.png

    • 依照同樣的參數加入hidden layer與dropout來試試看,可以發現到數據差非常多,平均Loss數值大約在0.43271095左右,足足低了0.1以上的結果,相較於上面下降的結果沒有那麼劇烈
    myopt = tf.train.FtrlOptimizer(learning_rate = 0.01) 
    estimator = tf.estimator.DNNRegressor
    (model_dir = output_dir,hidden_units = [100, 50, 20],feature_columns = featcols.values(),optimizer = myopt,dropout = 0.1)    
    

    https://ithelp.ithome.com.tw/upload/images/20190928/20120289WSey4flNDK.png
    https://ithelp.ithome.com.tw/upload/images/20190928/201202899kbGM4p8zh.png


上一篇
Day 27 The science of neural networks part 1 (關於神經網路的那些事)
下一篇
Day 29 Embeddings (嵌入架構)
系列文
ML Study Jam -機器學習30

尚未有邦友留言

立即登入留言