scikit-learn - 如何使用 LGBM 特征重要性和 Tfidf 矢量化器获取重要词?
问题描述
我正在研究一个 Kaggle 数据集,该数据集使用商品的描述和其他属性来预测商品的价格。这是比赛的链接。作为实验的一部分,我目前仅使用商品的描述来预测其价格。描述是自由文本,我使用 sklearn 的 Tfidf 向量化器,将二元组和最大特征设置为 60000 作为 lightGBM 模型的输入。
训练后,我想知道预测价格最有影响力的代币。我认为 lightGBM 的feature_importance
方法可以给我这个。这将返回一个 60000 暗淡的 numpy 数组,我可以使用它的索引从 Tfidf 的矢量化器的词汇字典中检索令牌。
这是代码:
vectorizer = TfidfVectorizer(ngram_range=(1,2), max_features=60000)
x_train = vectorizer.fit_transform(train_df['text'].values.astype('U'))
x_valid = vectorizer.transform(valid_df['text'].values.astype('U'))
idx2tok = {v: k for k, v in vectorizer.vocabulary_.items()}
features = [f'token_{i}' for i in range(len(vectorizer.vocabulary_))]
get_tok = lambda x, idxmap: idxmap[int(x[6:])]
lgb_train = lgb.Dataset(x_train, y_train)
lgb_valid = lgb.Dataset(x_valid, y_valid, reference=lgb_train)
gbm = lgb.train(lgb_params, lgb_train, num_boost_round=10, valid_sets=[lgb_train, lgb_valid], early_stopping_rounds=10, verbose_eval=True)
然而,模型训练后,当我调用 训练后gbm.feature_importance()
,我得到一个稀疏的整数数组,这对我来说真的没有意义:
fi = gbm.feature_importance()
fi[:100]
array([ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
dtype=int32)
np.unique(fi)
array([ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16,
17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 33, 34, 38, 45],
dtype=int32)
我不确定如何解释这一点。我认为特征重要性数组的早期索引将具有更高的值,因此与向量化器词汇中该索引对应的标记将比其他标记更重要/更有影响力。这个假设是错误的吗?如何获得决定模型结果的最有影响力/最重要的术语?任何帮助表示赞赏。
谢谢。
解决方案
推荐阅读
- c# - 如何将字符/字符串读取为十六进制?
- node.js - orcaledb for nodejs 模拟
- angular - Angular如何在Childcomponent中获取FormControl的初始值
- c# - 快速随机更改表单背景颜色
- java - 我们可以从空引用访问静态成员吗?如果是,为什么允许这样做?
- java - Wildfly 10.1 如何检查 TLSv1.2 是否启用
- jquery - 浏览器调整大小时出现Foundation 6“t.getBoundingClientRect不是函数”错误
- angular-material - 更改事件在 mat-input 上被调用两次
- mysql - 需要在MYSQL中的“:”之后获得第一个5或6个字符
- bootstrap-4 - 在列表组项中定位元素