使用 Flask 部署機器學習模型

| | | | | | | | | | |

要使用它們來預測新數據,我們必須將其部署在 Internet 上,以便外部世界可以使用它。在本文中,我們將討論我們如何訓練機器學習模型,使用 Flask 在其上構建 Web 應用程序。

我們必須安裝許多將在此模型中使用的必要庫。使用 pip 安裝所有庫。

pip install pandas pip install numpy pip install sklearn 

決策樹 —
決策樹 —它是一種眾所周知的監督機器學習算法,因為它易於使用、彈性和靈活。我已經在 UCI 機器學習存儲庫中的成人數據集上實現了該算法。

檢索數據 —
您可以通過此鏈接檢索數據集。

獲取數據集並不是結束。我們必須對數據進行預處理,這意味著我們需要清除數據集。數據集清洗涉及去除缺失值、填充NA值等各種類型的過程。


# import dataset

導入 熊貓

導入代碼> numpy

from sklearn import 預處理


df = pandas.read_csv ( `adult.csv` )

df.head ()

輸出:

數據集預處理 —
它由 14 個屬性和一個類別標籤組成,表明一個人的年收入是少於還是多於 5 萬。這些屬性的範圍從一個人的年齡、工人階級標籤、關係狀態以及這個人所屬的種族。可以在此處找到有關所有屬性的信息。

首先,我們從數據中查找並刪除所有缺失值“Äã”。我們已經用此列中的眾數替換了缺失值“Äã”。還有許多其他方法可以替換缺失值,但這似乎是這種數據集類型的最佳選擇。


df = df.drop ([ `fnlwgt` , `educational- num` ], axis = 1 )

col_names = df.columns


for c in col_names:

df = df.replace ( "? " , numpy.NaN)

df = df. apply ( lambda x: x.fillna(x.value_counts().index [ 0 ]))

機器學習算法不能處理分類數據值。它只能處理數值。
為了將數據擬合到預測模型中,我們需要將分類值轉換為數值。在此之前,我們將評估是否需要對分類列進行任何轉換。

離散性 — 是使分類數據更準確和更有意義的常用方法。我們已將離散化應用於 marital_status 列,其中它們被縮小到僅已婚或未婚值。稍後,我們將在剩餘的數據列上應用標籤編碼器。此外,還有兩個冗餘列 {'教育 ', ' education-num '} ,所以我們刪除了其中一個。


df.replace ([ `離婚` , `已婚- AF-spouse` ,

`已婚公民配偶` , ` 已婚配偶缺席` ,

`未婚` , `分離` , `寡婦` ],

[ `離婚` , `已婚` , `已婚` , `已婚` ,

`未婚` , ` 未婚` , `未婚` ], inplace = True )


category_col = [ `workclass` , `race` , `教育` , `marital-status` , `職業` ,

`relationship` , `gender` , `native-country` , `收入` ]

labelEncoder = preprocessing.LabelEncoder ()


mapping_dict = {}

for col in category_col:

df [col] = labelEncoder. fit_transform (df [col])


le_name_mapping = dict ( zip (labelEncoder.classes_,

labelEncoder.transform (labelEncoder.classes_)))


mapping_dict [col] = le_name_mapping

打印 (mapping_dict)

輸出:

{`workclass`: {`?`: 0, `Federal-gov`: 1, `Local-gov`: 2, “從未工作”:3,“私人”:4,“自僱公司”:5,“自僱非公司”:6,“州政府”:7,“無薪”: 8},`race`: {`Amer-Indian-Eskimo`:0,`Asian-Pac-Islander`:1,`Black`:2,`Other`:3,`White`:4},`教育`:{` 10th`:0,`11th`:1,`12th`:2,`1-4th`:3,`5-6th`:4,`7-8th`:5,`9th`:6,`Assoc- acdm `:7,`Assoc-voc`:8,`單身漢`:9,`博士學位`:10,`HS-grad`:11,`Masters`:12,`Preschool`:13,`Prof-school` : 14, `Some-college`: 15}, `marital-status`: {`Divorced`: 0,` Married-AF-spouse`: 1,` Married-civ-spouse `: 2,` 已婚-配偶-缺席`:3,`未婚`:4,`分居`:5,`喪偶`:6},`職業`:{`? `:0,`Adm-clerical`:1,`Armed-Forces`:2,`Craft-repair`:3,`Exec-managerial`:4,`Farming-fishing`:5,`Handlers-cleaners`: 6,“機器操作檢查”:7,“其他服務”:8,“私人住宅服務”:9,“專業教授”:10,“保護服務”:11,“銷售”: 12, `技術支持`: 13, `交通運輸`: 14} , `關係`: {`丈夫`: 0, `非家庭成員`: 1, `其他親戚`: 2, `自己的-child`: 3, `未婚`: 4, `妻子`: 5} , `gender`: { `Female`: 0, `Male`: 1}, `native-country`: {`?`: 0, “柬埔寨”:1,“加拿大”:2,“中國”:3,“哥倫比亞”:4,“古巴”:5,“多米尼加共和國”:6,“厄瓜多爾”:7,“薩爾瓦多”: 8,“英格蘭”:9,“法國”:10,“德國”:11,“希臘”:12,“危地馬拉”:13,“海地”:14,“荷蘭-荷蘭”:15,“洪都拉斯”: 16,“香港”:17,“匈牙利”:18,“印度”:19,“伊朗”:20,“愛爾蘭”:21,“意大利”:22,“牙買加”:23,“日本”:24, “老撾”:25,“墨西哥”:26,“尼加拉瓜”:27,“美國外圍(關島-USVI-etc)”:28,“秘魯”:29,“菲律賓”:30,“波蘭”:31 , `葡萄牙`: 32, `波多黎各` : 33, `蘇格蘭`: 34, `南方` : 35, `台灣`: 36, `泰國`: 37, `特立納達& Tobago`: 38, `United-States`: 39, `Vietnam`: 40, `Yugos lavia`: 41}, `income`: { `50K`: 1}}


擬合模型 —
經過預處理,數據準備好傳輸到機器學習算法。然後我們通過剝離帶有屬性的標籤來分割數據。我們現在將數據集分成兩部分,一部分用於訓練,另一部分用於測試。這是通過 train_test_split () sklearn 函數實現的。


from sklearn。model_selection import train_test_split

from sklearn.tree import DecisionTreeClassifier

from sklearn.metrics import accuracy_score


X = df.values ,Äã,Äã[:, 0 : 12 ]

Y = df.values ,Äã,Äã[:, 12 ]

< /td>

這裡我們使用了dec ision樹分類器作為預測模型。我們已經為訓練部分提供了用於訓練模型的數據。
訓練完成後,我們通過提供一些數據來測試模型來驗證模型的準確性。
因此,我們達到了準確度約 84%。現在,為了將這個模型與新的未知數據一起使用,我們需要保存模型,以便以後可以預測值。為此,我們在 Python 中使用了 Pickle ,這是一種強大的算法,用於序列化和反序列化 Python 對象的結構。


X_train, X_test, y_train, y_test = train_test_split(

X, Y, test_size = 0.3 code> , random_state = 100 )


dt_clf_gini = DecisionTreeClassifier (標準 = "gini" ,

random_state = 100 ,

max_depth = 5 ,

min_samples_leaf = 5 )


dt_clf_gini.fit (X_train, y_train)

y_pred_gini = dt_clf_gini.predict (X_test)


print ( "Desicion Tree using Gini Index Accuracy is" ,

accuracy_score (y_test, y_pred_gini) * 100 )

輸出:

使用基尼指數準確度為 83.13031016480704 的決策樹 

現在,注入 —
燒瓶 —它是一個基於 Python 的微框架,用於開發小型網站。 Flask 非常容易使用 Python 構建 Restful API。至此,我們開發了一個model.pkl模型,可以根據各種數據屬性預測數據類。類標籤 — 薪水 > = 50K 或 < 50K .
現在我們將設計一個 Web 應用程序,用戶將在其中輸入所有屬性值,然後模型將接收數據,基於給模型的訓練,模型將預測已提供數據的人的薪水應該是多少。

HTML 表單 —
要從各種屬性預測收入,我們首先需要收集數據(新的屬性值),然後使用我們上面建立的決策樹模型來預測收入是否會超過 50K 或更少。因此,為了收集數據,我們創建了一個 HTML 表單,其中包含從每個屬性中選擇的所有不同選項。在這裡,我們只使用 HTML 創建了一個簡單的表單。如果想讓表單更具交互性,可以這樣做。


" html "

< body >

< h3 >收入預測表< / h3 >


< div >

< form action = "/result" method = "POST" >

< label for = “年齡” >年齡< / 標籤 >

< 輸入 type = "text" id = "age" name = "age" & gt ;

< br >

< label for = "w_class" "工薪階層< / 標籤 >

< select id = "w_class" name = "w_class" <代碼類="普通">>

< 選項 value = “0” >聯邦政府/ 選項 >

< 選項 value = “1” >地方政府< / 選項 >

< 選項 value = “2”>從未工作過/ 選項 >

< 選項 value = “3”>私人< / 選項 >

< 選項 value = “4” >自僱公司/ 選項 >

< 選項 value = “5”> Self-emp-not-inc "/ 選項 >

< 選項 value = “6” >州政府/ 選項 >

< 選項 value = “7” >無償< / 選項 >

< / 選擇 >

< br >

< label for = "edu" >教育< / 標籤 >

< select id = "edu" name = "edu" <代碼類="普通">>

< 選項 value = “0” >第 10 位/ 選項 >

< 選項 value = “1” > 11 號/ 選項 >

< 選項 value = “2”> 12 號/ 選項 >

< 選項 value = “3”>第 1-4 號 "/ 選項 >

< 選項 value = “4” > 5-6日< / 選項 >

< 選項 value = “5”> 7-8號/ 選項 >

< 選項 value = “6” > 9th < / 選項 >

< 選項 value = “7” > Assoc-acdm "/ 選項 >

< 選項 value = “8” > Assoc-voc "/ 選項 >

< 選項 value = “9”>學士< / 選項 >

< 選項 value = “10”>博士學位< / 選項 >

< 選項 value = “11”> HS-grad < / 選項 >

< 選項 value = “12”>大師< / 選項 >

< 選項 value = “13”>學前班/ 選項 >

< 選項 value = “14”> Prof-School "/ 選項 >

< 選項 value = “15”> 16 - Some-college "/ 選項 >

< / 選擇 >

< br >

< label for = “martial_stat” >婚姻狀況 < / 標籤 >

< select id = "martial_stat" name = "martial_stat" <代碼類="普通">>

< 選項 value = “0” >離婚< / 選項 >

< 選項 value = “1” >已婚/ 選項 >

< 選項 value = “2”>未婚< / 選項 >

< / 選擇 >

< br >

code class="plain">>離婚< / 選項 >

< 選項 value = "1"

Shop

Learn programming in R: courses

$

Best Python online courses for 2022

$

Best laptop for Fortnite

$

Best laptop for Excel

$

Best laptop for Solidworks

$

Best laptop for Roblox

$

Best computer for crypto mining

$

Best laptop for Sims 4

$

Latest questions

NUMPYNUMPY

psycopg2: insert multiple rows with one query

12 answers

NUMPYNUMPY

How to convert Nonetype to int or string?

12 answers

NUMPYNUMPY

How to specify multiple return types using type-hints

12 answers

NUMPYNUMPY

Javascript Error: IPython is not defined in JupyterLab

12 answers


Wiki

Python OpenCV | cv2.putText () method

numpy.arctan2 () in Python

Python | os.path.realpath () method

Python OpenCV | cv2.circle () method

Python OpenCV cv2.cvtColor () method

Python - Move item to the end of the list

time.perf_counter () function in Python

Check if one list is a subset of another in Python

Python os.path.join () method