Python scikit学习中文本数据的监督降维

Python scikit学习中文本数据的监督降维,python,machine-learning,scikit-learn,dimensionality-reduction,Python,Machine Learning,Scikit Learn,Dimensionality Reduction,我正在尝试使用scikit学习对自然语言数据进行一些机器学习。我已经将我的语料库转换为单词向量包(采用稀疏CSR矩阵的形式),我想知道sklearn中是否有监督降维算法能够获取高维、监督数据并将其投影到低维空间,从而保留这些类之间的差异 高级问题描述是我有一个文档集合,每个文档上都可以有多个标签,我想根据文档的内容预测这些标签中的哪一个会被贴到新文档上 其核心是,这是一个有监督的、多标签的、多类别的问题,使用了弓向量的稀疏表示。sklearn中是否有一种降维技术可以处理这类数据?在scikit

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

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

其核心是,这是一个有监督的、多标签的、多类别的问题,使用了弓向量的稀疏表示。sklearn中是否有一种降维技术可以处理这类数据?在scikit learn中,人们在处理有监督的弓数据时是否使用了其他类型的技术

谢谢

您可以使用(这里是)来发现文档中的主题。对于文档标签的分配,可以使用文档标签的条件概率分布(给定文档中主题的分布)。如果您已经有了文档的标签,那么您只需要学习CPD,这很简单。不幸的是,scikit learn没有LDA实现,但有


附言:这里有另一个可能会有帮助。如果你对统计推断/学习或机器学习不是很精通,我建议你从这里开始(注意:它仍然假设数学成熟度很高)

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

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


你应该记住在输出层使用softmax激活,在隐藏层(tanh或sigmoid)使用非线性激活。

你的问题让我有点困惑。根据我的经验,降维从未真正受到监督。。。但似乎您想要的是某种知情的特征选择,这在分类完成之前是不可能做到的。换句话说,在对分类器进行训练和验证之前,您无法知道哪些特征的信息量更大

但是,减少数据的大小和复杂性总是好的,而且您可以通过各种方式处理文本数据。适用性和性能取决于您拥有的向量类型(频率计数、tfidf),并且您必须始终确定输出中所需的维度(组件)数量。scikit learn中的实现主要是在

自然语言处理中最流行的方法是SVD,它是潜在语义分析(LSA,也称LSI)的核心。使用scikit learn,您只需对数据应用
TruncatedSVD()
。类似的方法在scikit learn中实现为
NMF()

一种越来越流行的方法是通过随机投影进行变换。您可以使用中的函数在scikit learn中执行此操作

正如有人在另一个答案中指出的那样,潜在Dirichlet分配也是一种选择,尽管它比上述方法慢得多,计算要求也更高。此外,在撰写本文时,它在scikit学习中不可用

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

如果您对使用缩减维度作为某种分类/聚类感兴趣(人们称之为主题提取,尽管您实际上不是提取主题,而是提取潜在维度),那么LDA可能是更好的选择。注意,它很慢,只需要纯频率计数(无tfidf)。组件的数量是一个必须提前确定的参数(不可能进行估计)


回到你的问题,我会制作一个带有矢量器、降维选项和分类器的sckit学习管道,并执行大量的参数搜索。通过这种方式,您将看到如何使用现有的标签集获得最佳效果。

几个现有的scikit模块执行与您要求的类似的操作

  • 可能是最接近你要求的。它可以找到一个数据投影,使类质心之间的距离相对于投影方差最大化

  • 包括通过低维中间空间投影拟合多维目标线性回归模型的偏最小二乘法等方法。它很像一个没有乙状结肠的单隐层神经网络。 这些是线性回归方法,但您可以对目标信号应用0-1编码 无论如何都要使用这些模型

  • 您可以使用L1正则化分类器,如
    LogisticRegression
    sgdclassizer
    来进行特征选择
    RandomizedLogisticRegression
    将此与引导相结合,以获得更稳定的功能集


一个很好的减暗方法是使用自动编码器。不过,我不确定scikit learn是否有。自动编码器只是一个神经网络,其输出是对输入的一次尝试重建,而隐藏层(通常)的维数低于输入。