我正在尝试训练模型对短文本进行分类。我执行以下操作:
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
答案 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