使用 Streamlit 部署 XGBoost 模型的详细指南代码编写

训练模型

首先,我们需要训练一个xgboot预测模型,以下是训练模型的代码示例:

import pandas as pd
import xgboost as xgb
import pickle
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split

# 加载示例数据
data = load_iris()
X = pd.DataFrame(data.data, columns=data.feature_names)
y = pd.Series(data.target)

# 拆分数据集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

# 训练 XGBoost 模型
model = xgb.XGBClassifier(use_label_encoder=False, eval_metric='mlogloss')
model.fit(X_train, y_train)

# 保存模型为 pkl 文件
with open('xgboost_model.pkl', 'wb') as file:
    pickle.dump(model, file)

print("模型已保存为 xgboost_model.pkl")

部署模型

接下来,我们将加载训练好的模型并在 Streamlit 中进行部署。以下是相关代码:

import streamlit as st  # 导入 Streamlit 库,用于创建 Web 应用
import pandas as pd  # 导入 Pandas 库,用于数据处理
import pickle  # 导入 pickle 库,用于加载已训练的模型
import os  # 导入 os 库,用于处理文件路径
import shap  # 导入 SHAP 库,用于解释模型

# 加载模型
# 获取当前文件的目录
current_dir = os.path.dirname(os.path.abspath(__file__))
# 组合当前目录与模型文件名,生成模型的完整路径
model_path = os.path.join(current_dir, 'xgboost_model.pkl')
# 打开并加载模型
with open(model_path, 'rb') as file:
    model = pickle.load(file)  # 使用 pickle 加载模型文件

# 设置 Streamlit 应用的标题
st.title("XGBoost 模型预测")

# 在侧边栏中输入特征
st.sidebar.header("输入特征")  # 侧边栏的标题
# 使用滑动条接收花萼长度,设置范围为 0.0 到 10.0,默认值为 5.0
sepal_length = st.sidebar.slider("花萼长度 (cm)", min_value=0.0, max_value=10.0, value=5.0, step=0.1)
# 使用滑动条接收花萼宽度,设置范围为 0.0 到 10.0,默认值为 5.0
sepal_width = st.sidebar.slider("花萼宽度 (cm)", min_value=0.0, max_value=10.0, value=5.0, step=0.1)
# 使用滑动条接收花瓣长度,设置范围为 0.0 到 10.0,默认值为 5.0
petal_length = st.sidebar.slider("花瓣长度 (cm)", min_value=0.0, max_value=10.0, value=5.0, step=0.1)
# 使用滑动条接收花瓣宽度,设置范围为 0.0 到 10.0,默认值为 5.0
petal_width = st.sidebar.slider("花瓣宽度 (cm)", min_value=0.0, max_value=10.0, value=5.0, step=0.1)

# 创建输入数据框,将输入的特征整理为 DataFrame 格式
input_data = pd.DataFrame({
    'sepal length (cm)': [sepal_length],
    'sepal width (cm)': [sepal_width],
    'petal length (cm)': [petal_length],
    'petal width (cm)': [petal_width]
})

# 添加预测按钮,用户点击后进行模型预测
if st.button("预测"):
    prediction = model.predict(input_data)  # 使用加载的模型进行预测
    st.write(f"预测结果: {prediction[0]}")

    # 计算 SHAP 值
    explainer = shap.Explainer(model)  # 或者使用 shap.TreeExplainer(model) 来计算树模型的 SHAP 值
    shap_values = explainer(input_data)

    # 提取单个样本的 SHAP 值和期望值
    sample_shap_values = shap_values[0]  # 提取第一个样本的 SHAP 值
    expected_value = explainer.expected_value[0]  # 获取对应输出的期望值

    # 创建 Explanation 对象
    explanation = shap.Explanation(
        values=sample_shap_values[:, 0],  # 选择特定输出的 SHAP 值
        base_values=expected_value,
        data=input_data.iloc[0].values,
        feature_names=input_data.columns.tolist()
    )

    # 保存为 HTML 文件
    shap.save_html("shap_force_plot.html", shap.plots.force(explanation, show=False))

    # 在 Streamlit 中显示 HTML
    st.subheader("模型预测的力图")
    with open("shap_force_plot.html") as f:
        st.components.v1.html(f.read(), height=600)

本地编码与测试

在本地环境中,确保模型能正确运行。您需要将模型保存为 .pkl 格式,并生成 requirements.txt 文件。可以通过以下命令生成:

# 生成当前环境中的所有已安装包的列表
pip freeze > requirements.txt

如果只想生成当前项目实际使用的包,可以使用:

# 只生成当前项目实际使用的包
pip install pipreqs
pipreqs /path/to/your/project

运行以下命令以启动 Streamlit 应用:

streamlit run stream_app.py

网页端部署与测试

依赖包的安装

部署到网页端时,确保网络环境良好。常见的错误多是由于 requirements.txt 中的包安装失败。

  • 安装 Cython:确保 Cython 已安装,可以在 requirements.txt 中添加 Cython
  • 使用二进制包安装:为避免编译问题,可以在 requirements.txt 中添加 scikit-learn --only-binary :all:

示例 requirements.txt 文件:

Cython
pandas==2.2.3
scikit_learn==1.3.1
scikit-learn --only-binary :all:
streamlit==1.30.0
xgboost==2.1.1

部署步骤

登录到 Streamlit 网页端。

点击右上角的 Create app ,会出现下图所示页面。

点击Yup, I have an app,会出现下述页面,需要选在需要部署的代码路径等。这里需要确保你的代码已经保存在 github 仓库中。

选择好需要部署的代码文件之后,点击Deploy之后,会出现正在部署的页面,需要等待一会(有可能会有报错信息,通常是依赖的库出现问题,或者代码中一些不兼容的问题等)。如果需要查看部署的详细过程,可以点击右下角的Manage App,如下图右边所示,会有详细的部署过程显示,同时当报错后也会有报错提示信息。

部署成功之后就会出现下述页面

对于这个模型而言,我们在左侧调整输入特征之后,点击右侧的预测就可以看到最后的预测结果出现。

调试成功之后,我们可以分享相应的链接给读者查看。

Streamlit (dlxgboostapp.streamlit.app)

在部署XGBoost 模型到 Streamlit 应用时,以下是一些重要的注意事项,以确保顺利进行:

  • 确保您的 Python 环境中安装了所有必要的库,特别是 streamlitxgboostshap 和 pandas。可以使用 requirements.txt 文件来管理依赖项。
  • 在代码中加载模型时,确保文件路径正确。如果模型文件与应用代码不在同一目录,需调整路径。
  • 确保用户输入的特征格式与训练模型时一致。例如,特征名称和数据类型应完全匹配。
  • 在计算 SHAP 值时,确认使用正确的解释器,如 shap.Explainer 或 shap.TreeExplainer,以适配您的模型类型。
  • 确保在稳定的网络环境下进行网页端部署,避免因网络问题导致的依赖项安装失败。
  • 部署过程中可能会遇到依赖包安装失败或代码兼容性问题。建议及时查看 Streamlit 的控制台输出,以获取详细的错误信息。
  • 在设计应用界面时,确保用户输入方便,并提供清晰的反馈信息,例如预测结果和图形可视化。

欢迎关注微信公众号: “ 菜鸟的人工智能之路” ,持续更新数据处理相关。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值