iT邦幫忙

2024 iThome 鐵人賽

DAY 28
0
AI/ ML & Data

征服機器學習的終極秘技系列 第 28

Day 28 - 應用實作練習:模型預測

  • 分享至 

  • xImage
  •  

✨前言

我們在確認模型都訓練完後,接下來只要有任何新數據,即使沒有最終結果,我們也可以幫忙預測囉。以實作來說,我們只要有所有新病患的 input 檢查結果,就可以得到他是 Normal 還是 Abnormal 了🩺。

🕒預測過程的步驟

1) 數據準備:在進行預測之前,需要準備好新數據並將其整理成陣列。確保該陣列的順序與模型訓練時一致,以避免模型誤解數據,導致超出範圍的預測結果📊。例如,如果模型期望的輸入特徵順序是 [特徵1, 特徵2, 特徵3],那麼新的數據陣列必須以相同的順序 [特徵1, 特徵2, 特徵3] 排列。

在數據訓練集中,我們可以用以下程式碼確認參數順序:
X_train.columns
輸出結果為

Index(['Age', 'Billing Amount', 'Length of Stay', 'Gender_Male', 
       'Blood Type_A-', 'Blood Type_AB+', 'Blood Type_AB-', 'Blood Type_B+', 
       'Blood Type_B-', 'Blood Type_O+', 'Blood Type_O-', 
       'Medical Condition_Asthma', 'Medical Condition_Cancer', 
       'Medical Condition_Diabetes', 'Medical Condition_Hypertension', 
       'Medical Condition_Obesity', 'Insurance Provider_Blue Cross', 
       'Insurance Provider_Cigna', 'Insurance Provider_Medicare', 
       'Insurance Provider_UnitedHealthcare', 'Admission Type_Emergency', 
       'Admission Type_Urgent', 'Medication_Ibuprofen', 'Medication_Lipitor', 
       'Medication_Paracetamol', 'Medication_Penicillin'], 
      dtype='object')

此外,之前做過 One Hot Encoding 的那些特徵,都會用 True = 1、False=0 表示,例如,若病患血型為A- 型,則在 Blood Type_A- 欄位要輸入 1,其他血型的欄位則為 0。

假如我們新收案的病患數據如下:

  • 👤Age: 40 歲
  • 💵Billing Anount: 37000
  • 🛌Length of Stay: 20 天
  • 👨男性
  • 🩸血型為 O+ 型
  • 🎗️癌症
  • 🏥Insurance Provider: Medicare
  • 🚑Admission Type: Urgent
  • 💊Medication: Penicillin

則他的一維數據會變成 [40, 37000, 20, 1, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 1]

轉換陣列的方式為:

import numpy as np  
new_patient_data = np.array([[40, 37000, 20, 1, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 1] 
]) # 實際檢查數據如上面的一維數據 

2) 載入我們之前訓練好的模型和 scaler 的 pickle 檔,📥以確保新的數據進行相同的標準化或縮放處理。

import pickle 
# 載入模型 
with open('best_random_forest_model.pkl', 'rb') as model_file: 
    model = pickle.load(model_file) 

# 載入 scaler 
with open('scaler.pkl', 'rb') as scaler_file: 
    scaler = pickle.load(scaler_file) 

3) 數據縮放:使用載入的 scaler 對新數據進行縮放,以確保數據與訓練時的處理方式一致🔧。我們過去有縮放,因此測試的時候也是要縮放以免模型誤判。

# 對新數據進行縮放 
scaled_data = scaler.transform(new_patient_data)

4) 進行預測:使用載入的模型對縮放後的新病患數據進行預測🔮。

# 進行預測 
predictions = model.predict(scaled_data) 
print("預測結果:", predictions)

⚠️注意事項

  • 🔍數據品質:確保新數據的品質和格式與訓練數據一致,以提高預測準確性。
  • 📈模型評估:在應用模型預測之前,建議對模型在新數據上的表現進行評估,以確認其預測的可靠性。
  • 💪持續學習:隨著新數據的到來,考慮定期更新模型,這樣可以確保模型隨著時間的推移依然準確有效。

結論

模型預測是機器學習過程中的重要一步,它將訓練成果應用於實際情況。然而,單純的程式碼並不適合直接呈現給專業人員,因為他們通常不具備資訊背景💻。因此,我們需要將模型部署到一個用戶友好的介面,使專業人員能夠輕鬆輸入數據並獲得預測結果🌟。

進一步的部署不僅能夠提供方便的輸入方式,還可以隱藏數據轉換(如編碼)的複雜性,使整個過程更加簡潔明瞭。這樣的系統將能夠幫助醫療人員更好地理解預測結果,從而支持他們在臨床上的決策🩺。

https://www.memecreator.org/static/images/memes/4208062.jpg
[圖片來源:MeMeCreator]


上一篇
Day 27 - 應用實作練習:模型優化
下一篇
Day 29 - 應用實作練習:模型部署
系列文
征服機器學習的終極秘技30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言