首页 文章

scikit-learn中文本数据的监督降维

提问于
浏览
12

我正在尝试使用scikit-learn对自然语言数据进行一些机器学习 . 我已将我的语料库转换为词袋向量(采用稀疏CSR矩阵的形式),我想知道是否在sklearn中有一个监督维数降低算法能够获取高维,监督数据并进行投影它进入一个较低维度的空间,保留了这些类之间的差异 .

高级问题描述是我有一个文档集合,每个文档都可以有多个标签,我想根据文档内容预测哪些标签会被打到新文档上 .

在它的核心,这是一个受监督的,多标签,多类问题,使用BoW向量的稀疏表示 . sklearn中是否存在可以处理这类数据的降维技术?在scikit-learn中使用受监督的BoW数据时,是否还有其他类型的技术?

谢谢!

5 回答

  • 0

    试试ISOMAP . 在scikits.learn中有一个超级简单的内置函数 . 即使它没有你想要的一些保存属性,也值得一试 .

  • 1

    使用多层神经网络进行分类 . 如果要查看缩小维度中输入的表示形式,请查看隐藏图层的激活 . 根据定义,隐藏层的作用被优化以区分类,因为这是在设置权重时直接优化的 .

    你应该记得在输出层使用softmax激活,在隐藏层(tanh或sigmoid)上使用非线性的东西 .

  • 0

    我对你的问题有点困惑 . 根据我的经验,维度减少从来没有真正受到监督......但似乎你想要的是某种知情的特征选择,这在分类完成之前是不可能的 . 换句话说,在分类器经过培训和验证之前,您无法知道哪些功能更具信息性 .

    但是,减小数据的大小和复杂性始终是好的,并且您可以通过各种方式使用文本数据 . 适用性和性能取决于您拥有的矢量类型(频率计数,tfidf),您将始终必须确定输出中所需的尺寸(组件)数量 . scikit-learn中的实现主要在_1556626中 .

    自然语言处理中最流行的方法是Singular Value Decomposition(SVD),它是潜在语义分析(LSA,也是LSI)的核心 . 坚持使用scikit-learn,您只需对数据应用 TruncatedSVD() 即可 . 类似的方法是Non-negative matrix factorization,在scikit-learn中实现为 NMF() .

    越来越流行的方法使用随机投影的变换,Random Indexing . 您可以使用random_projection中的函数进行scikit-learn .

    正如有人在另一个答案中指出的那样,Latent Dirichlet Allocation也是一种替代方案,尽管它比上述方法要慢得多且计算量要求更高 . 此外,它是在scikit-learn中无法写入的时候 .

    如果您只想简化数据以将其提供给分类器,我建议使用介于100和500之间的n_components的SVD,或者使用介于500和2000之间的n_components的随机投影(文献中的常用值) .

    如果您有兴趣将缩小的维度用作某种分类/聚类(人们称之为主题提取,尽管您实际上并不是提取主题,而是潜在的维度),那么LDA可能是更好的选择 . 请注意,它很慢,只需要纯粹的频率计数(没有tfidf) . 组件数量是您必须事先确定的参数(无法估算) .

    回到你的问题,我将使用矢量化器,降维选项和分类器制作一个sckit-learn管道,并进行大规模的参数搜索 . 通过这种方式,您将看到使用您拥有的标签集可以获得最佳效果的内容 .

  • 1

    您可以使用latent dirichlet allocation(这里是wiki)来发现文档中的主题 . 对于为文档分配标签,您可以使用文档标签的条件概率分布(给定文档中主题的分布) . 如果你已经有了文件的标签,那么你只需要学习CPD,这是微不足道的 . 不幸的是,scikit-learn没有LDA实现,但gensim确实如此 .

    PS:这是另一个可能有帮助的paper . 如果你仍然假设高水平的数学成熟度) .

  • 2

    几个现有的scikit模块做了类似于你要求的东西 .

    • Linear Discriminant Analysis可能与您要求的最接近 . 它找到数据的投影,最大化类质心之间相对于投影方差的距离 .

    • Cross decomposition包括像偏最小二乘法这样的方法,它通过下方的投影拟合多维目标的线性回归模型dimentonial中间空间 . 它很像没有sigmoids的单个隐藏层神经网络 . 这些是线性回归方法,但您可以对目标信号应用0-1编码并使用这些模型 .

    • 您可以使用L1正则化分类器(如 LogisticRegressionSGDClassifier )进行特征选择 . RandomizedLogisticRegression 将此与bootstrapping相结合,获得更稳定的功能集 .

相关问题