iT邦幫忙

2024 iThome 鐵人賽

DAY 15
0
生成式 AI

從 0 到 1 學習生成式 AI 模型建立以及 Prompt 技巧系列 第 15

第 15 天:模型訓練第十步|模型部署

  • 分享至 

  • xImage
  •  

終於來到最後一個步驟了,當我們辛辛苦苦的訓練出了模型,就是要來實際使用它來玩玩看啦!因為我們要跟他互動終究還是一個 UI 介面來使用,所以我們就簡單的做了一個讓我們輸入的方式就好,如果會寫前端的話就可以嘗試弄一個好看的介面來玩玩看

from google.colab import files
import joblib
import pandas as pd
import numpy as np
from IPython.display import display
import ipywidgets as widgets

# 加載模型和預處理器
best_xgb = joblib.load('xgboost_house_price_model.joblib')
preprocessor = joblib.load('preprocessor.joblib')

def predict_house_price(location, area, age, is_new):
    input_data = pd.DataFrame({
        '位置': [location],
        '房屋面積(坪)': [area],
        '房齡(年)': [age],
        '是否新房': [1 if is_new else 0]
    })
    
    # 計算單位面積價格(這裡使用平均值,可能需要更精確的計算方法)
    avg_price = df_cleaned[df_cleaned['位置'] == location]['房價(萬)'].mean()
    input_data['單位面積價格'] = avg_price / area
    
    # 計算位置相關的統計特徵
    input_data['位置平均房價'] = df_cleaned[df_cleaned['位置'] == location]['房價(萬)'].mean()
    input_data['位置房價標準差'] = df_cleaned[df_cleaned['位置'] == location]['房價(萬)'].std()
    
    # 應用預處理器
    processed_data = preprocessor.transform(input_data)
    
    # 進行預測
    prediction = best_xgb.predict(processed_data)
    
    # 轉換回原始尺度
    prediction = np.exp(prediction) - 1
    
    return prediction[0]

# 創建輸入界面
location_widget = widgets.Dropdown(
    options=['松山區', '大安區', '信義區', '中山區', '大同區'],
    description='位置:',
    disabled=False,
)

area_widget = widgets.FloatText(
    value=30,
    description='面積(坪):',
    disabled=False
)

age_widget = widgets.IntText(
    value=10,
    description='房齡(年):',
    disabled=False
)

is_new_widget = widgets.Checkbox(
    value=False,
    description='是否新房',
    disabled=False
)

output_widget = widgets.Output()

def on_button_clicked(b):
    with output_widget:
        output_widget.clear_output()
        price = predict_house_price(
            location_widget.value, 
            area_widget.value, 
            age_widget.value,
            is_new_widget.value
        )
        print(f"預測房價: {price:.2f} 萬元")

button = widgets.Button(description="預測房價")
button.on_click(on_button_clicked)

# 顯示界面
display(location_widget, area_widget, age_widget, is_new_widget, button, output_widget)

實際執行出來的效果就會像這樣:
https://ithelp.ithome.com.tw/upload/images/20240823/20168835XQeyKMVGtq.png
恭喜撒花~ 我們真的從 0 到 1 創造出一個訓練模型啦!(但我實測坪數越大反而越便宜,代表訓練還有得調整 QQ)

很開心能出生在這個時代,以一個非工程背景的人來說,我雖然學過機器學習,但就是對他的概念和原理比較熟悉,程式碼要完全獨自寫完真的太難了,但透過 AI 的輔助就可以真的把想法落實,就證明現在是一個「有想法+實踐」就有機會創造你想像的產品的時代

不過除了掌握工具,「學習怎麼使用工具」也是一門學問,與 AI 溝通最常見的技巧就是「優化 Prompt」,接下來我們就來學習怎麼跟 AI 互動吧!


上一篇
第 14 天:模型訓練第九步|模型評估
下一篇
第 16 天:與 AI 溝通的方式:Prompt
系列文
從 0 到 1 學習生成式 AI 模型建立以及 Prompt 技巧30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言