这是一个关于ngrams线性回归的问题,使用Tf-IDF(术语频率 - 逆文档频率)。为此,我使用numpy稀疏矩阵和sklearn进行线性回归。
使用unigrams时我有53个病例和超过6000个功能。预测基于使用LeaveOneOut的交叉验证。
当我创建一个只有unigram分数的tf-idf稀疏矩阵时,我得到的预测比我创建unigram + bigram分数的tf-idf稀疏矩阵要好一些。我添加到矩阵的列越多(三元组,四元组,五元组等的列),回归预测的准确性就越低。
这是常见的吗?这怎么可能?我会认为功能越多越好。
对于双胞胎来说,表现比单身人士更糟糕并不常见,但有些情况可能会发生。特别是,添加额外功能可能会导致过度拟合。 Tf-idf不太可能缓解这种情况,因为更长的n-gram将更少,导致更高的idf值。
我不确定你想要预测的是什么样的变量,我从来没有对文本做过回归,但这里有一些与文献相似的结果让你思考:
究竟发生了什么取决于你的训练集;它可能只是太小了。
正如larsmans所说,添加更多变量/特征会使模型更容易过度拟合,从而导致测试精度下降。在scikit-learn的主分支中,现在有一个min_df
参数来切断任何少于该次数的特征。因此min_df==2
到min_df==5
可能会帮助你摆脱虚假的双核。
或者,您可以使用以下类别使用L1或L1 + L2惩罚线性回归(或分类):
这样就可以忽略虚假特征,并导致稀疏模型具有许多零权重,用于噪声特征。网格搜索正则化参数将非常重要。
您还可以尝试单变量特征选择,例如完成scikit-learn的text classification example(检查SelectKBest
和chi2
实用程序。