【问题标题】:How to check if the model object is Xgboost or not in python如何在python中检查模型对象是否是Xgboost
【发布时间】:2023-03-22 14:55:01
【问题描述】:

我正在尝试评估模型对象是否为 xgboost,如果不是则引发错误

import pandas as pd
import xgboost as xgb
from sklearn.datasets import load_boston
from sklearn.model_selection import train_test_split
from sklearn.metrics import mean_squared_error

boston = load_boston()
X = pd.DataFrame(boston.data, columns=boston.feature_names)
y = pd.Series(boston.target)
regressor = xgb.XGBRegressor(
    n_estimators=100,
    reg_lambda=1,
    gamma=0,
    max_depth=3
)

regressor.fit(X, y)


type(regressor)


我尝试使用以下两种条件但失败了 第一种方法

if type(regressor) == 'xgboost.sklearn.XGBRegressor':
    print("Xgboost Model")


第二种方法

if not isinstance(regressor,XGBRegressor):
    raise TypeError("wrong input ")

我需要为 xgboost 评估模型对象,无论它是分类器还是回归器,它都应该检查两者的条件

【问题讨论】:

    标签: python scikit-learn xgboost


    【解决方案1】:

    您可以考虑(首选):

    if isinstance(regressor, xgb.sklearn.XGBRegressor) or isinstance(regressor, xgb.sklearn.XGBClassifier):
        print("Xgboost Model")
    else:
        raise TypeError("wrong input")
    

    或者,根据您的评论:

    if regressor.__class__.__name__ in ['XGBRegressor', 'XGBClassifier']:
        print("Xgboost Model")
    else:
        raise TypeError("wrong input")
    

    【讨论】:

    • 还有其他方法吗,因为 xgb 将取决于其他人使用别名进行导入,我需要更多可以被所有人使用的通用解决方案
    • 考虑到你的 cmets 我也会这样做X.__class__.__name__ == 'DataFrame'。不过你不妨查一下stackoverflow.com/questions/14808945/…
    猜你喜欢
    • 2015-06-19
    • 2020-06-18
    • 1970-01-01
    • 1970-01-01
    • 2021-10-05
    • 2011-11-05
    • 1970-01-01
    • 2022-01-27
    • 1970-01-01
    相关资源
    最近更新 更多