如何使用 TF-IDF 训练 xgboost

时间:2021-03-10 19:05:18

标签: python machine-learning xgboost

我正在尝试训练模型对短文本进行分类。我执行以下操作:

from sklearn.feature_extraction.text import TfidfVectorizer
tfidf = TfidfVectorizer(max_features=1000)
train['vector']=vectorizer.fit_transform(train['item_name'])
train=train.drop('item_name',axis=1)
y=train.category_id
train=train.drop('category_id',axis=1)
X_train, X_test, y_train, y_test = train_test_split(train,y, test_size=0.10,stratify=y,random_state=42)
import xgboost as xgb
xgb_model = xgb.XGBClassifier()
xgb_model.fit(X_train, y_train)

但我收到一个错误:

<块引用>

ValueError:数据的 DataFrame.dtypes 必须是 int、float、bool 或 categorical。什么时候 提供了分类类型,DMatrix 参数 enable_categorical 必须设置为 True.vector

1 个答案:

答案 0 :(得分:0)

<块引用>

当提供分类类型时,DMatrix 参数 enable_categorical 必须设置为 True.vector

您应该仅使用 XGBClassifier 转换结果训练 TfidfVectorizer。现在,您还传递了原始未矢量化的文本句子,这会导致上述 ValueError 出现。

最简单的解决方案是建立一个两步管道:

pipeline = Pipeline([
  ("vectorizer", TfidfVectorizer()),
  ("classifier", XGBClassifier())
])
pipeline.fit(X_train, y_train)

但是,请注意 XGBoost 估计器对稀疏数据矩阵的解释与常规 Scikit-Learn 估计器不同。为了获得正确/有意义的结果,您还应该将稀疏数据矩阵转换为密集数据矩阵。

Training Scikit-Learn based TF(-IDF) plus XGBoost pipelines