Random Forest:如何向稀疏矩阵添加特征及识别特征重要性项
问题解答
1. 稀疏矩阵直接拼接额外特征方案
你可以直接用scipy.sparse.hstack对稀疏矩阵做水平拼接,不需要将BOW稀疏矩阵转为稠密矩阵,能大幅节省大词汇量场景下的内存开销。sklearn的RandomForestClassifier原生支持稀疏矩阵作为输入,无需额外转换。
实现步骤:
- 导入scipy稀疏矩阵工具
- 将额外特征提前转为数值型后,转成稀疏矩阵格式
- 按顺序拼接BOW稀疏矩阵和额外特征稀疏矩阵
示例代码片段:
from scipy.sparse import hstack, csr_matrix # 额外特征转数值型,避免模型训练报错 df1['Grp'] = df1['Grp'].astype(int) df1['Rating'] = df1['Rating'].astype(int) # 转为稀疏矩阵后拼接 extra_sparse = csr_matrix(df1.values) X_train_sparse = hstack([bow, extra_sparse])
2. 特征重要性匹配方案
拼接后的稀疏矩阵列顺序和拼接时传入的特征顺序完全一致,只要按拼接顺序构造特征名列表即可直接对应:
- 用
CountVectorizer的get_feature_names_out()方法获取BOW部分的特征名列表 - 追加额外特征名,顺序和拼接时的额外特征顺序保持一致
- 用合并后的特征名列表作为特征重要性的索引即可
示例代码片段:
# 构造完整特征名列表 bow_names = vect.get_feature_names_out().tolist() extra_names = ['Grp', 'Rating'] all_feature_names = bow_names + extra_names # 训练后生成特征重要性表 forest = RandomForestClassifier(n_estimators = 500, random_state=0) forest.fit(X_train_sparse, y_train) feature_importances = pd.DataFrame( forest.feature_importances_, index = all_feature_names, columns=['importance'] ).sort_values('importance', ascending=False)
内容的提问来源于stack exchange,提问作者Peter
相关产品推荐
相关产品推荐

