国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

使用機器學習預測天氣(第三部分神經(jīng)網(wǎng)絡)

mrcode / 2051人閱讀

摘要:概述這是使用機器學習預測平均氣溫系列文章的最后一篇文章了,作為最后一篇文章,我將使用的開源機器學習框架來構(gòu)建一個神經(jīng)網(wǎng)絡回歸器。請注意,我把這個聲明推廣到整個機器學習的連續(xù)體,而不僅僅是神經(jīng)網(wǎng)絡。

概述

??這是使用機器學習預測平均氣溫系列文章的最后一篇文章了,作為最后一篇文章,我將使用google的開源機器學習框架tensorflow來構(gòu)建一個神經(jīng)網(wǎng)絡回歸器。關于tensorflow的介紹、安裝、入門,請自己google,這里就不做講述。

??這篇文章我主要講解一下幾點:

了解人工神經(jīng)網(wǎng)絡理論

tensorflow高級API:Estimators

構(gòu)建DNN模型預測天氣

人工神經(jīng)網(wǎng)絡基礎理論

??上一篇文章主要講解了如何構(gòu)建線性回歸模型(這是最基礎的機器學習算法)來預測內(nèi)布拉斯加州林肯市每天的平均氣溫。線性回歸模型非常有效,并且可以被用于數(shù)值化(比如分類)、預測(比如預測天氣)。線性回歸算法也比較與局限性,它要求數(shù)據(jù)之間具有線性關系。
??針對于非線性關系的場景,數(shù)據(jù)挖掘和機器學習有數(shù)不清的算法來處理。近些年最火的要數(shù)神經(jīng)網(wǎng)絡算法了,它可以處理機器學習領域的好多問題。神經(jīng)網(wǎng)絡算法具備線性和非線性學習算法的能力。
??神經(jīng)網(wǎng)絡受到大腦中的生物神經(jīng)元的啟發(fā),它們在復雜的交互網(wǎng)絡中工作,根據(jù)已經(jīng)收集的信息的歷史來傳輸,收集和學習信息。我們感興趣的計算神經(jīng)網(wǎng)絡類似于大腦的神經(jīng)元,因為它們是接收輸入信號(數(shù)字量)的神經(jīng)元(節(jié)點)的集合,處理輸入并將處理后的信號發(fā)送給其他下游代理 網(wǎng)絡。 信號作為通過神經(jīng)網(wǎng)絡的數(shù)字量的處理是一個非常強大的特征,不限于線性關系。
??在這個系列中,我一直關注一種稱為監(jiān)督學習的特定類型的機器學習,也就說說訓練的數(shù)據(jù)結(jié)果是已知的,根據(jù)歷史已知的輸入和輸出,預測未來的輸入對應的輸出。 此外,預測的類型是數(shù)值的真實值,這意味著我們使用的是回歸預測算法。
??從圖形上看,類似于本文中描述的神經(jīng)網(wǎng)絡如圖:

上面描述的神經(jīng)網(wǎng)絡在最左邊包含一個輸入層,即圖中的x1和x2,這兩個特征是神經(jīng)網(wǎng)絡輸入值。這兩個特征被輸入到神經(jīng)網(wǎng)絡中,通過被稱為隱藏層的兩層神經(jīng)元進行處理和傳輸。這個描述顯示了兩個隱藏層,每層包含三個神經(jīng)元(節(jié)點)。 該信號然后離開神經(jīng)網(wǎng)絡,并作為單個數(shù)值預測值匯總在輸出層。
??讓我花一點時間來解釋箭頭背后的含義,箭頭表示數(shù)據(jù)在層間從一個節(jié)點到另一個節(jié)點的傳輸處理。 每個箭頭代表一個數(shù)值的數(shù)學變換,從箭頭的底部開始,然后乘以特定于該路徑特定的權(quán)重。 一個圖層中的每個節(jié)點將以這種方式得到一個值。 然后匯總所有在節(jié)點收斂的值。 這個就是我之前提到的神經(jīng)網(wǎng)絡的線性操作。

??在每個節(jié)點上進行求和之后,將一個特殊的非線性函數(shù)應用到總和上,這在上面的圖像中被描述為Fn(...)。 這種將非線性特征引入神經(jīng)網(wǎng)絡的特殊功能稱為激活功能。 激活函數(shù)所帶來的這種非線性特性賦予了多層神經(jīng)網(wǎng)絡以其功能。 如果不是將非線性加入到過程中,則所有層都將有效地代數(shù)地組合成一個常數(shù)運算,其中包括將輸入乘以某個平坦系數(shù)值(即線性模型)。
好吧,這一切都很好,但是這怎么轉(zhuǎn)化為學習算法呢? 那么最直接的答案就是評估正在進行的預測,即模型“y”的輸出,到實際預期值(目標),并對權(quán)重進行一系列調(diào)整,以改善整體 預測準確性。
??在回歸機器學習算法的世界中,通過使用成本(又名“損失”或“客觀”)函數(shù)(即平方誤差之和(SSE))評估準確性。 請注意,我把這個聲明推廣到整個機器學習的連續(xù)體,而不僅僅是神經(jīng)網(wǎng)絡。 在前面的文章中,普通最小二乘算法完成了這一工作,它發(fā)現(xiàn)了使誤差平方和(即最小二乘)最小化的系數(shù)組合。
??我們的神經(jīng)網(wǎng)絡回歸器會做同樣的事情。 它將迭代訓練數(shù)據(jù)提取特征值,計算成本函數(shù)(使用SSE),并以最小化成本函數(shù)的方式調(diào)整權(quán)重。 通過算法迭代推送特征的過程和評估如何根據(jù)成本函數(shù)來調(diào)整權(quán)重。
??模型優(yōu)化算法在構(gòu)建魯棒神經(jīng)網(wǎng)絡中非常重要。 例如通過網(wǎng)絡體系結(jié)構(gòu)(即寬度和深度)饋送,然后根據(jù)成本函數(shù)進行評估,調(diào)整權(quán)重。 當優(yōu)化器函數(shù)確定權(quán)重調(diào)整不會導致成本函數(shù)計算代價的變化,該模型被認為是“學習”。

TensorFlow Estimator API

??tensorflow由好幾個部分組成,其中最常用的是Core API,它為用戶提供了一套低級別的API來定義和訓練使用符號操作的任何機器學習算法。這也是TensorFlow的核心功能,雖然Core API能應對大多數(shù)的應用場景,但我更關注Estimator API。
??TensorFlow團隊開發(fā)了Estimator API,使日常開發(fā)人員可以更方便地使用該庫。這個API提供了訓練模型、評估模型、以及和Sci-Kit庫相似的對未知數(shù)據(jù)的預測接口,這是通過實現(xiàn)各種算法的通用接口來實現(xiàn)的。另外,構(gòu)建在高級API中的是機器學習最佳實踐,抽象和可伸縮性的負載。
??所有這些機器學習的優(yōu)點使得基礎Estimator類中實現(xiàn)的一套工具以及多個預先封裝的模型類型,降低了使用TensorFlow的入門門檻,因此可以應用于日常問題。通過抽象出諸如編寫訓練循環(huán)或處理會話之類的問題,開發(fā)人員能夠?qū)W⒂诟匾氖虑椋缈焖賴L試多個模型和模型架構(gòu),以找到最適合他們需要的模型。
??在這篇文章中,我將介紹如何使用非常強大的深度神經(jīng)網(wǎng)絡估計器之一DNN Regressor。

建立一個DNNRegressor來預測天氣

??我們先導入一些我們需要用到的庫。

import pandas as pd  
import numpy as np  
import tensorflow as tf  
from sklearn.metrics import 
explained_variance_score,   
    mean_absolute_error, 
    median_absolute_error
from sklearn.model_selection import train_test_split  

我們來處理一下數(shù)據(jù),所有的數(shù)據(jù)我都放在了Github上,大家可以去查閱clone。

# read in the csv data into a pandas data frame and set the date as the index
df = pd.read_csv("end-part2_df.csv").set_index("date")

# execute the describe() function and transpose the output so that it doesn"t overflow the width of the screen
df.describe().T  


# execute the info() function
df.info()
  
Index: 997 entries, 2015-01-04 to 2017-09-27  
Data columns (total 39 columns):  
meantempm          997 non-null int64  
maxtempm           997 non-null int64  
mintempm           997 non-null int64  
meantempm_1        997 non-null float64  
meantempm_2        997 non-null float64  
meantempm_3        997 non-null float64  
meandewptm_1       997 non-null float64  
meandewptm_2       997 non-null float64  
meandewptm_3       997 non-null float64  
meanpressurem_1    997 non-null float64  
meanpressurem_2    997 non-null float64  
meanpressurem_3    997 non-null float64  
maxhumidity_1      997 non-null float64  
maxhumidity_2      997 non-null float64  
maxhumidity_3      997 non-null float64  
minhumidity_1      997 non-null float64  
minhumidity_2      997 non-null float64  
minhumidity_3      997 non-null float64  
maxtempm_1         997 non-null float64  
maxtempm_2         997 non-null float64  
maxtempm_3         997 non-null float64  
mintempm_1         997 non-null float64  
mintempm_2         997 non-null float64  
mintempm_3         997 non-null float64  
maxdewptm_1        997 non-null float64  
maxdewptm_2        997 non-null float64  
maxdewptm_3        997 non-null float64  
mindewptm_1        997 non-null float64  
mindewptm_2        997 non-null float64  
mindewptm_3        997 non-null float64  
maxpressurem_1     997 non-null float64  
maxpressurem_2     997 non-null float64  
maxpressurem_3     997 non-null float64  
minpressurem_1     997 non-null float64  
minpressurem_2     997 non-null float64  
minpressurem_3     997 non-null float64  
precipm_1          997 non-null float64  
precipm_2          997 non-null float64  
precipm_3          997 non-null float64  
dtypes: float64(36), int64(3)  
memory usage: 311.6+ KB  

??請注意,我們剛剛記錄下了1000個氣象數(shù)據(jù)記錄,并且所有的特征都是數(shù)字性質(zhì)的。 另外,由于我們在第一篇文章中的努力工作,所有記錄都是完整的,因為它們不缺少任何值(沒有非空值)。
??現(xiàn)在我將刪除“mintempm”和“maxtempm”這兩列,因為它們對幫助我們預測平均溫度毫無意義。 我們正在試圖預測未來,所以我們顯然不能掌握有關未來的數(shù)據(jù)。 我還將從目標(y)中分離出特征(X)。

# First drop the maxtempm and mintempm from the dataframe
df = df.drop(["mintempm", "maxtempm"], axis=1)

# X will be a pandas dataframe of all columns except meantempm
X = df[[col for col in df.columns if col != "meantempm"]]

# y will be a pandas series of the meantempm
y = df["meantempm"]  

??和所有監(jiān)督機器學習應用程序一樣,我將把我的數(shù)據(jù)集分成訓練集和測試集。 但是,為了更好地解釋訓練這個神經(jīng)網(wǎng)絡的迭代過程,我將使用一個額外的數(shù)據(jù)集,我將其稱為“驗證集合”。 對于訓練集,我將利用80%的數(shù)據(jù),對于測試和驗證集,它們將分別為剩余數(shù)據(jù)的10%。為了分解這些數(shù)據(jù),我將再次使用Scikit Learn 庫的train_test_split()函數(shù)。

# split data into training set and a temporary set using sklearn.model_selection.traing_test_split
X_train, X_tmp, y_train, y_tmp = train_test_split(X, y, test_size=0.2, random_state=23)  
# take the remaining 20% of data in X_tmp, y_tmp and split them evenly
X_test, X_val, y_test, y_val = train_test_split(X_tmp, y_tmp, test_size=0.5, random_state=23)

X_train.shape, X_test.shape, X_val.shape  
print("Training instances   {}, Training features   {}".format(X_train.shape[0], X_train.shape[1]))  
print("Validation instances {}, Validation features {}".format(X_val.shape[0], X_val.shape[1]))  
print("Testing instances    {}, Testing features    {}".format(X_test.shape[0], X_test.shape[1]))  
Training instances   797, Training features   36  
Validation instances 100, Validation features 36  
Testing instances    100, Testing features    36  

構(gòu)建神經(jīng)網(wǎng)絡模型時要采取的第一步是實例化tf.estimator.DNNRegressor()類。類的構(gòu)造函數(shù)有多個參數(shù),但我將重點關注以下參數(shù):

feature_columns:一種類似列表的結(jié)構(gòu),包含要輸入到模型中的要素的名稱和數(shù)據(jù)類型的定義

hidden_??units:一個類似列表的結(jié)構(gòu),包含神經(jīng)網(wǎng)絡數(shù)量寬度和深度的定義

optimizer:tf.Optimizer子類的一個實例,在訓練期間優(yōu)化模型的權(quán)重;它的默認值是AdaGrad優(yōu)化器。

activation_fn:激活功能,用于在每一層向網(wǎng)絡引入非線性;默認是ReLU

model_dir:要創(chuàng)建的目錄,其中包含模型的元數(shù)據(jù)和其他檢查點保存

我將首先定義一個數(shù)字特征列的列表。要做到這一點,我使用tf.feature_column.numeric_column()函數(shù)返回一個FeatureColumn實例。

feature_cols = [tf.feature_column.numeric_column(col) for col in X.columns] 

??使用定義的特性列,我現(xiàn)在可以實例化DNNRegressor類并將其存儲在回歸變量中。 我指定我想要一個有兩層深度的神經(jīng)網(wǎng)絡,其中兩層的寬度都是50個節(jié)點。 我還指出,我希望我的模型數(shù)據(jù)存儲在一個名為tf_wx_model的目錄中。

regressor = tf.estimator.DNNRegressor(feature_columns=feature_cols,  
                                      hidden_units=[50, 50],
                                      model_dir="tf_wx_model")
INFO:tensorflow:Using default config.  
INFO:tensorflow:Using config: {"_tf_random_seed": 1, "_save_checkpoints_steps": None, "_save_checkpoints_secs": 600, "_model_dir": "tf_wx_model", "_log_step_count_steps": 100, "_keep_checkpoint_every_n_hours": 10000, "_save_summary_steps": 100, "_keep_checkpoint_max": 5, "_session_config": None}  

接下來我想要做的是定義一個可重用的函數(shù),這個函數(shù)通常被稱為“輸入函數(shù)”,我將調(diào)用wx_input_fn()。 這個函數(shù)將被用來在訓練和測試階段將數(shù)據(jù)輸入到我的神經(jīng)網(wǎng)絡中。有許多不同的方法來建立輸入函數(shù),但我將描述如何定義和使用一個基于tf.estimator.inputs.pandas_input_fn(),因為我的數(shù)據(jù)是在一個pandas數(shù)據(jù)結(jié)構(gòu)。

def wx_input_fn(X, y=None, num_epochs=None, shuffle=True, batch_size=400):  
    return tf.estimator.inputs.pandas_input_fn(x=X,
                                               y=y,
                                               num_epochs=num_epochs,
                                               shuffle=shuffle,
                                               batch_size=batch_size)

??請注意,這個wx_input_fn()函數(shù)接受一個必選參數(shù)和四個可選參數(shù),然后將這些參數(shù)交給TensorFlow輸入函數(shù),專門用于返回的pandas數(shù)據(jù)。 這是TensorFlow API一個非常強大的功能。函數(shù)的參數(shù)定義如下:

X:輸入要輸入到三種DNNRegressor接口方法中的一種(訓練,評估和預測)

y:X的目標值,這是可選的,不會被提供給預測調(diào)用

num_epochs:可選參數(shù)。 當算法在整個數(shù)據(jù)集上執(zhí)行一次時,就會出現(xiàn)一個新紀元。

shuffle:可選參數(shù),指定每次執(zhí)行算法時是否隨機選擇數(shù)據(jù)集的批處理(子集)

batch_size:每次執(zhí)行算法時要包含的樣本數(shù)

??通過定義我們的輸入函數(shù),我們現(xiàn)在可以訓練我們基于訓練數(shù)據(jù)集上的神經(jīng)網(wǎng)絡。 對于熟悉TensorFlow高級API的讀者,您可能會注意到我對自己的模型的培訓方式有點不合常規(guī)。至少從TensorFlow網(wǎng)站上的當前教程和網(wǎng)絡上的其他教程的角度來看。通常情況下,您將看到如下所示的內(nèi)容。

regressor.train(input_fn=input_fn(training_data, num_epochs=None, shuffle=True), steps=some_large_number)

.....
lots of log info  
....

然后,作者將直接展示evaluate()函數(shù),并且?guī)缀鯖]有提示它在做什么或為什么存在這一行代碼。

regressor.evaluate(input_fn=input_fn(eval_data, num_epochs=1, shuffle=False), steps=1)

.....
less log info  
....

在此之后,假設所有的訓練模型都是完美的,他們會直接跳到執(zhí)行predict()函數(shù)。

predictions = regressor.predict(input_fn=input_fn(pred_data, num_epochs=1, shuffle=False), steps=1)  

??我希望能夠提供一個合理的解釋,說明如何訓練和評估這個神經(jīng)網(wǎng)絡,以便將這個模型擬合或過度擬合到訓練數(shù)據(jù)上的風險降到最低。因此,我們不再拖延,讓我定義一個簡單的訓練循環(huán),對訓練數(shù)據(jù)進行訓練,定期對評估數(shù)據(jù)進行評估。

evaluations = []  
STEPS = 400  
for i in range(100):  
    regressor.train(input_fn=wx_input_fn(X_train, y=y_train), steps=STEPS)
    evaluations.append(regressor.evaluate(input_fn=wx_input_fn(X_val,
                                                               y_val,
                                                               num_epochs=1,
                                                               shuffle=False)))
INFO:tensorflow:Create CheckpointSaverHook.  
INFO:tensorflow:Saving checkpoints for 1 into tf_wx_model/model.ckpt.  
INFO:tensorflow:step = 1, loss = 1.11335e+07  
INFO:tensorflow:global_step/sec: 75.7886  
INFO:tensorflow:step = 101, loss = 36981.3 (1.321 sec)  
INFO:tensorflow:global_step/sec: 85.0322  
... A WHOLE LOT OF LOG OUTPUT ...
INFO:tensorflow:step = 39901, loss = 5205.02 (1.233 sec)  
INFO:tensorflow:Saving checkpoints for 40000 into tf_wx_model/model.ckpt.  
INFO:tensorflow:Loss for final step: 4557.79.  
INFO:tensorflow:Starting evaluation at 2017-12-05-13:48:43  
INFO:tensorflow:Restoring parameters from tf_wx_model/model.ckpt-40000  
INFO:tensorflow:Evaluation [1/1]  
INFO:tensorflow:Finished evaluation at 2017-12-05-13:48:43  
INFO:tensorflow:Saving dict for global step 40000: average_loss = 10.2416, global_step = 40000, loss = 1024.16  
INFO:tensorflow:Starting evaluation at 2017-12-05-13:48:43  
INFO:tensorflow:Restoring parameters from tf_wx_model/model.ckpt-40000  
INFO:tensorflow:Finished evaluation at 2017-12-05-13:48:43  
INFO:tensorflow:Saving dict for global step 40000: average_loss = 10.2416, global_step = 40000, loss = 1024.16  

??上面的循環(huán)迭代了100次。 在循環(huán)體中,我調(diào)用了回歸器對象的train()方法,并將其傳遞給了我的可重用的wx_input_fn(),后者又通過了我的訓練功能集和目標。 我有意地將默認參數(shù)num_epochs等于None,基本上這樣說:“我不在乎你通過訓練集多少次,只是繼續(xù)訓練算法對每個默認batch_size 400”(大約一半的訓練 組)。 我還將shuffle參數(shù)設置為默認值True,以便在訓練時隨機選擇數(shù)據(jù)以避免數(shù)據(jù)中的任何順序關系。 train()方法的最后一個參數(shù)是我設置為400的步驟,這意味著訓練集每個循環(huán)將被批處理400次。
??這給了我一個很好的時間以更具體的數(shù)字來解釋一個epoch的意義。 回想一下,當一個訓練集的所有記錄都通過神經(jīng)網(wǎng)絡訓練一次時,就會出現(xiàn)一個epoch。 所以,如果我們的訓練集中有大約800(準確的說是797)個記錄,并且每個批次選擇400個,那么每兩個批次我們就完成了一個時間。 因此,如果我們遍歷整個訓練集100個迭代400個步驟,每個批次大小為400(每個批次的一個半個時間),我們得到:

(100 x 400 / 2) = 20,000 epochs

??現(xiàn)在你可能想知道為什么我為循環(huán)的每次迭代執(zhí)行和evaluate()方法,并在列表中捕獲它的輸出。 首先讓我解釋一下每次train()方法被觸發(fā)時會發(fā)生什么。它隨機選擇一批訓練記錄,并通過網(wǎng)絡推送,直到做出預測,并為每條記錄計算損失函數(shù)。 然后根據(jù)計算出的損失根據(jù)優(yōu)化器的邏輯調(diào)整權(quán)重,這對于減少下一次迭代的整體損失的方向做了很好的調(diào)整。 一般而言,只要學習速率足夠小,這些損失值隨著時間的推移而逐漸下降。
??然而,經(jīng)過一定數(shù)量的這些學習迭代之后,權(quán)重開始不僅受到數(shù)據(jù)整體趨勢的影響,而且還受到非實際的噪聲在所有實際數(shù)據(jù)中的繼承。 在這一點上,網(wǎng)絡受到訓練數(shù)據(jù)特性的過度影響,并且變得無法推廣關于總體數(shù)據(jù)的預測。這與我之前提到的高級TensorFlow API許多其他教程不足之處有關。 在訓練期間周期性地打破這一點非常重要,并評估模型如何推廣到評估或驗證數(shù)據(jù)集。 通過查看第一個循環(huán)迭代的評估輸出,讓我們花些時間看看evaluate()函數(shù)返回的結(jié)果。

evaluations[0]  
{"average_loss": 31.116383, "global_step": 400, "loss": 3111.6382}

正如你所看到的,它輸出的是平均損失(均方誤差)和訓練中的步驟的總損失(平方誤差和),這一步是第400步。 在訓練有素的網(wǎng)絡中,你通常會看到一種趨勢,即訓練和評估損失或多或少地平行下降。 然而,在某個時間點的過度配置模型中,實際上在過擬合開始出現(xiàn)的地方,驗證訓練集將不再看到其evaluate()方法的輸出降低。 這是你想停止進一步訓練模型的地方,最好是在變化發(fā)生之前。
??現(xiàn)在我們對每個迭代都有一個評估集合,讓我們將它們作為訓練步驟的函數(shù)來繪制,以確保我們沒有過度訓練我們的模型。 為此,我將使用matplotlib的pyplot模塊中的一個簡單的散點圖。

import matplotlib.pyplot as plt  
%matplotlib inline

# manually set the parameters of the figure to and appropriate size
plt.rcParams["figure.figsize"] = [14, 10]

loss_values = [ev["loss"] for ev in evaluations]  
training_steps = [ev["global_step"] for ev in evaluations]

plt.scatter(x=training_steps, y=loss_values)  
plt.xlabel("Training steps (Epochs = steps / 2)")  
plt.ylabel("Loss (SSE)")  
plt.show()  

??從上面的圖表看來,在所有這些迭代之后,我并沒有過度配置模型,因為評估損失從來沒有呈現(xiàn)出朝著增加價值的方向的顯著變化?,F(xiàn)在,我可以安全地繼續(xù)根據(jù)我的剩余測試數(shù)據(jù)集進行預測,并評估模型如何預測平均天氣溫度。
??與我已經(jīng)演示的其他兩種回歸方法類似,predict()方法需要input_fn,我將使用可重用的wx_input_fn()傳遞input_fn,將測試數(shù)據(jù)集交給它,將num_epochs指定為None,shuffle為False,因此它將依次送入所有的數(shù)據(jù)進行測試。
??接下來,我做一些從predict()方法返回的dicts迭代的格式,以便我有一個numpy的預測數(shù)組。然后,我使用sklearn方法explain_variance_score(),mean_absolute_error()和median_absolute_error()來預測數(shù)組,以測量預測與已知目標y_test的關系。

pred = regressor.predict(input_fn=wx_input_fn(X_test,  
                                              num_epochs=1,
                                              shuffle=False))
predictions = np.array([p["predictions"][0] for p in pred])

print("The Explained Variance: %.2f" % explained_variance_score(  
                                            y_test, predictions))  
print("The Mean Absolute Error: %.2f degrees Celcius" % mean_absolute_error(  
                                            y_test, predictions))  
print("The Median Absolute Error: %.2f degrees Celcius" % median_absolute_error(  
                                            y_test, predictions))
INFO:tensorflow:Restoring parameters from tf_wx_model/model.ckpt-40000  
The Explained Variance: 0.88  
The Mean Absolute Error: 3.11 degrees Celcius  
The Median Absolute Error: 2.51 degrees Celcius  

我已經(jīng)使用了與上一篇文章有關的線性回歸技術相同的指標,以便我們不僅可以評估這個模型,還可以對它們進行比較。 正如你所看到的,這兩個模型的表現(xiàn)相當類似,更簡單的線性回歸模型略好一些。然而,你可以通過修改學習速率,寬度和深度等參數(shù)來優(yōu)化機器學習模型。

總結(jié)

??本文演示了如何使用TensorFlow高級API Estimator子類DNNRegressor。并且,我也描述了神經(jīng)網(wǎng)絡理論,他們是如何被訓練的,以及在過程中認識到過度擬合模型的危險性的重要性。
??為了演示這個建立神經(jīng)網(wǎng)絡的過程,我建立了一個模型,能夠根據(jù)本系列第一篇文章收集的數(shù)字特征預測第二天的平均溫度。寫這些文章的目的不是為了建立一個非常好的模型預測天氣,我的目標是:

演示從數(shù)據(jù)收集,數(shù)據(jù)處理,探索性數(shù)據(jù)分析,模型選擇,模型構(gòu)建和模型評估中進行分析(機器學習,數(shù)據(jù)科學,無論...)項目的一般過程。

演示如何使用兩個流行的Python庫StatsModels和Scikit Learn來選擇不違反線性回歸技術關鍵假設的有意義的功能。

演示如何使用高級別的TensorFlow API,并直觀地了解所有這些抽象層下正在發(fā)生的事情。

討論與過度擬合模型相關的問題。

解釋試驗多個模型類型以最好地解決問題。

相關文章

使用機器學習預測天氣第二部分
使用機器學習預測天氣第一部分
英文原文

來獲取我更多有趣的博文

原文地址:http://www.bugcode.cn/mlweath...

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/41204.html

相關文章

  • 使用機器學習預測天氣(第一部分)

    摘要:概述本章是使用機器學習預測天氣系列教程的第一部分,使用和機器學習來構(gòu)建模型,根據(jù)從收集的數(shù)據(jù)來預測天氣溫度。數(shù)據(jù)類型是機器學習領域經(jīng)常會用到的數(shù)據(jù)結(jié)構(gòu)。 概述 ??本章是使用機器學習預測天氣系列教程的第一部分,使用Python和機器學習來構(gòu)建模型,根據(jù)從Weather Underground收集的數(shù)據(jù)來預測天氣溫度。該教程將由三個不同的部分組成,涵蓋的主題是: 數(shù)據(jù)收集和處理(本文)...

    liukai90 評論0 收藏0
  • 使用機器學習預測天氣(第二部分)

    摘要:為了建立線性回歸模型,我要用到里非常重要的兩個機器學習相關的庫和。使用逐步回歸建立一個健壯的模型一個強大的線性回歸模型必須選取有意義的重要的統(tǒng)計指標的指標作為預測指標。 概述 ??這篇文章我們接著前一篇文章,使用Weather Underground網(wǎng)站獲取到的數(shù)據(jù),來繼續(xù)探討用機器學習的方法預測內(nèi)布拉斯加州林肯市的天氣??上一篇文章我們已經(jīng)探討了如何收集、整理、清洗數(shù)據(jù)。這篇文章我們...

    gecko23 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<