最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會員登陸 & 注冊

Python中基于網(wǎng)格搜索算法優(yōu)化的深度學習模型分析糖尿病數(shù)據(jù)

2021-04-02 09:20 作者:拓端tecdat  | 我要投稿

原文鏈接:http://tecdat.cn/?p=12693

?

介紹

在本教程中,我們將討論一種非常強大的優(yōu)化(或自動化)算法,即網(wǎng)格搜索算法。它最常用于機器學習模型中的超參數(shù)調(diào)整。我們將學習如何使用Python來實現(xiàn)它,以及如何將其應用到實際應用程序中,以了解它如何幫助我們?yōu)槟P瓦x擇最佳參數(shù)并提高其準確性。

先決條件

要遵循本教程,您應該對Python或其他某種編程語言有基本的了解。您最好也具有機器學習的基本知識,但這不是必需的。除此之外,本文是初學者友好的,任何人都可以關注。

安裝

要完成本教程,您需要在系統(tǒng)中安裝以下庫/框架:

?

  1. Python 3

  2. NumPy

  3. Pandas

  4. Keras

  5. Scikit-Learn

?

它們的安裝都非常簡單-您可以單擊它們各自的網(wǎng)站,以獲取各自的詳細安裝說明。通常,可以使用pip安裝軟件包:

$ pip install numpy pandas tensorflow keras scikit-learn

如果遇到任何問題,請參考每個軟件包的官方文檔。

什么是網(wǎng)格搜索?

網(wǎng)格搜索本質上是一種優(yōu)化算法,可讓你從提供的參數(shù)選項列表中選擇最適合優(yōu)化問題的參數(shù),從而使“試驗和錯誤”方法自動化。盡管它可以應用于許多優(yōu)化問題,但是由于其在機器學習中的使用而獲得最廣為人知的參數(shù),該參數(shù)可以使模型獲得最佳精度。

假設您的模型采用以下三個參數(shù)作為輸入:

  1. 隱藏層數(shù)[2,4]

  2. 每層中的神經(jīng)元數(shù)量[5,10]

  3. 神經(jīng)元數(shù)[10,50]

如果對于每個參數(shù)輸入,我們希望嘗試兩個選項(如上面的方括號中所述),則總計總共2 ^3?= 8個不同的組合(例如,一個可能的組合為[2,5,10])。手動執(zhí)行此操作會很麻煩。

現(xiàn)在,假設我們有10個不同的輸入?yún)?shù),并且想為每個參數(shù)嘗試5個可能的值。每當我們希望更改參數(shù)值,重新運行代碼并跟蹤所有參數(shù)組合的結果時,都需要從我們這邊進行手動輸入。網(wǎng)格搜索可自動執(zhí)行該過程,因為它僅獲取每個參數(shù)的可能值并運行代碼以嘗試所有可能的組合,輸出每個組合的結果,并輸出可提供最佳準確性的組合。

網(wǎng)格搜索實施

讓我們將網(wǎng)格搜索應用于實際應用程序。討論機器學習和數(shù)據(jù)預處理這一部分不在本教程的討論范圍之內(nèi),因此我們只需要運行其代碼并深入討論Grid Search的引入部分即可。

我們將使用Pima印度糖尿病數(shù)據(jù)集,該數(shù)據(jù)集包含有關患者是否基于不同屬性(例如血糖,葡萄糖濃度,血壓等)的糖尿病信息。使用Pandas?read_csv()方法,您可以直接從在線資源中導入數(shù)據(jù)集。

以下腳本導入所需的庫:

  1. from sklearn.model_selection import GridSearchCV, KFold

  2. from keras.models import Sequential

  3. from keras.layers import Dense, Dropout

  4. from keras.wrappers.scikit_learn import KerasClassifier

  5. from keras.optimizers import Adam

  6. import sys

  7. import pandas as pd

  8. import numpy as np

以下腳本導入數(shù)據(jù)集并設置數(shù)據(jù)集的列標題。

df = pd.read_csv(data_path, names=columns)

讓我們看一下數(shù)據(jù)集的前5行:

df.head()

輸出:

?

如你所見,這5行都是用來描述每一列的標簽,因此它們對我們沒有用。我們將從刪除這些非數(shù)據(jù)行開始,然后將所有NaN值替換為0:

  1. for col in columns:

  2. df[col].replace(0, np.NaN, inplace=True)


  3. df.dropna(inplace=True) # Drop all rows with missing values

以下腳本將數(shù)據(jù)分為變量和標簽集,并將標準化應用于數(shù)據(jù)集:

  1. # Transform and display the training data

  2. X_standardized = scaler.transform(X)


以下方法創(chuàng)建了我們簡單的深度學習模型:

  1. def create_model(learn_rate, dropout_rate):

  2. # Create model

  3. model = Sequential()

  4. model.add(Dense(8, input_dim=8, kernel_initializer='normal', activation='relu'))

  5. model.add(Dropout(dropout_rate))

  6. model.add(Dense(4, input_dim=8, kernel_initializer='normal', activation='relu'))

  7. model.add(Dropout(dropout_rate))

  8. model.add(Dense(1, activation='sigmoid'))


  9. # Compile the model

  10. adam = Adam(lr=learn_rate)

  11. model.compile(loss='binary_crossentropy', optimizer=adam, metrics=['accuracy'])

  12. return model

這是加載數(shù)據(jù)集,對其進行預處理并創(chuàng)建您的機器學習模型所需的所有代碼。因為我們只對看到Grid Search的功能感興趣,所以我沒有進行訓練/測試拆分,我們將模型擬合到整個數(shù)據(jù)集。

在下一節(jié)中,我們將開始了解Grid Search如何通過優(yōu)化參數(shù)使生活變得更輕松。

在沒有網(wǎng)格搜索的情況下訓練模型

在下面的代碼中,我們將隨機決定或根據(jù)直覺決定的參數(shù)值創(chuàng)建模型,并查看模型的性能:


  1. model = create_model(learn_rate, dropout_rate)


輸出:

  1. Epoch 1/1

  2. 130/130 [==============================] - 0s 2ms/step - loss: 0.6934 - accuracy: 0.6000

正如看到的,我們得到的精度是60.00%。這是相當?shù)偷摹?/p>

使用網(wǎng)格搜索優(yōu)化超參數(shù)

如果不使用Grid Search,則可以直接fit()在上面創(chuàng)建的模型上調(diào)用方法。但是,要使用網(wǎng)格搜索,我們需要將一些參數(shù)傳遞給create_model()函數(shù)。此外,我們需要使用不同的選項聲明我們的網(wǎng)格,我們希望為每個參數(shù)嘗試這些選項。讓我們分部分進行。

首先,我們修改create_model()函數(shù)以接受調(diào)用函數(shù)的參數(shù):


  1. # Create the model

  2. model = KerasClassifier(build_fn=create_model, verbose=1)

現(xiàn)在,我們準備實現(xiàn)網(wǎng)格搜索算法并在其上擬合數(shù)據(jù)集:


  1. # Build and fit the GridSearchCV

  2. grid = GridSearchCV(estimator=model, param_grid=param_grid,

  3. cv=KFold(random_state=seed), verbose=10)


輸出:

Best: 0.7959183612648322, using {'batch_size': 10, 'dropout_rate': 0.2, 'epochs': 10, 'learn_rate': 0.02}

在輸出中,我們可以看到它為我們提供了最佳精度的參數(shù)組合。

可以肯定地說,網(wǎng)格搜索在Python中非常容易實現(xiàn),并且在人工方面節(jié)省了很多時間。您可以列出所有您想要調(diào)整的參數(shù),聲明要測試的值,運行您的代碼,而不必理會。您無需再輸入任何信息。找到最佳參數(shù)組合后,您只需將其用于最終模型即可。

結論

總結起來,我們了解了什么是Grid Search,它如何幫助我們優(yōu)化模型以及它帶來的諸如自動化的好處。此外,我們學習了如何使用Python語言在幾行代碼中實現(xiàn)它。為了了解其有效性,我們還訓練了帶有和不帶有Grid Search的機器學習模型,使用Grid Search的準確性提高了19%。


Python中基于網(wǎng)格搜索算法優(yōu)化的深度學習模型分析糖尿病數(shù)據(jù)的評論 (共 條)

分享到微博請遵守國家法律
赤水市| 云浮市| 安多县| 拉萨市| 章丘市| 巴马| 即墨市| 平武县| 苍南县| 云梦县| 子长县| 辽宁省| 万载县| 广昌县| 中方县| 陕西省| 深圳市| 莱阳市| 黄骅市| 双柏县| 龙川县| 宝山区| 漯河市| 睢宁县| 孟津县| 宝山区| 上杭县| 大关县| 神池县| 儋州市| 科尔| 于都县| 达州市| 彰化市| 长沙县| 庄浪县| 平潭县| 项城市| 大方县| 清涧县| 竹北市|