Gradio - 将“数字”值设置为 NaN

问题描述 投票:0回答:1

我正在用 Gradio 构建我的第一个界面,我遇到了一个问题。我用于训练我的 XGB 分类器的数据包含 NaN 值,我想在 Gradio 接口中启用 NaN 输入的可能性。至于现在我已经尝试将默认字段值设置为 NaN,但它不起作用。

接口代码: Ferr = gr.Number(label="Ferrytyna [ug/l]", value=float("NaN"))

错误信息: ValueError:数据的 DataFrame.dtypes 必须是 int、float、bool 或 category。当提供分类类型时,实验 DMatrix 参数

enable_categorical
必须设置为
True
。无效列:ferrytyna_krew_ug_l:对象

有人知道如何解决这个问题吗? 谢谢

nan gradio
1个回答
0
投票

您看到的错误消息表明 XGBoost 在将输入数据转换为 DataFrame 时无法处理输入数据中的 NaN 值。

一种解决方案是在将输入数据传递给 XGBoost 分类器之前对其进行预处理以处理 NaN 值。一种方法是用默认值替换 NaN 值,例如列的平均值或中值。

这是一个示例,说明如何使用 pandas 预处理输入数据以处理 NaN 值:

import pandas as pd
import gradio as gr
import xgboost as xgb

# Load your data into a pandas DataFrame
data = pd.read_csv('my_data.csv')

# Preprocess the data to handle NaN values
data = data.fillna(data.mean())

# Train your XGBoost classifier on the preprocessed data
X = data.drop('target', axis=1)
y = data['target']
model = xgb.XGBClassifier()
model.fit(X, y)

# Define your Gradio interface
def predict(ferrytyna):
    # preprocess input data to handle NaN values
    ferrytyna = ferrytyna if not pd.isna(ferrytyna) else data['ferrytyna_krew_ug_l'].mean()
    # make predictions using the pre-trained model
    prediction = model.predict([[ferrytyna]])
    return prediction[0]

iface = gr.Interface(fn=predict, inputs="number", outputs="label")
iface.launch()

在此示例中,我们将输入数据加载到 pandas DataFrame 中,并使用

fillna()
方法对其进行预处理,以将 NaN 值替换为列的平均值。然后,我们在预处理数据上训练 XGBoost 分类器。

predict()
函数中,我们使用
pd.isna()
data.mean()
预处理输入值ferrytyna以处理NaN值。然后我们使用预先训练的模型进行预测。

最后,我们定义 Gradio 接口,将

inputs
参数设置为
"number"
以接受数字输入,并将
outputs
参数设置为
"label"
以输出分类标签。我们使用
launch()
方法启动界面。

使用此代码,Gradio 接口将接受

ferrytyna
输入的 NaN 值,并在使用 XGBoost 模型进行预测之前使用列的平均值对其进行预处理。

© www.soinside.com 2019 - 2024. All rights reserved.