【问题标题】:scikit learn: Problems creating customized CountVectorizer and ChiSquarescikit learn:创建自定义 CountVectorizer 和 ChiSquare 的问题
【发布时间】:2012-05-09 12:58:45
【问题描述】:

我有以下代码(基于示例here),但它不起作用:

[...]
def my_analyzer(s):
    return s.split()
my_vectorizer = CountVectorizer(analyzer=my_analyzer)
X_train = my_vectorizer.fit_transform(traindata)

ch2 = SelectKBest(chi2,k=1)
X_train = ch2.fit_transform(X_train,Y_train)
[...]

调用fit_transform时出现如下错误:

AttributeError: 'function' object has no attribute 'analyze'

根据文档,CountVectorizer 应该这样创建:vectorizer = CountVectorizer(tokenizer=my_tokenizer)。但是,如果我这样做,我会收到以下错误:"got an unexpected keyword argument 'tokenizer'"

我实际的 scikit-learn 版本是 0.10。

【问题讨论】:

    标签: python machine-learning scikits scikit-learn


    【解决方案1】:

    您正在查看 0.11(即将发布)的文档,其中矢量化器已经过大修。检查documentation for 0.10,其中没有tokenizer 参数,analyzer 应该是实现analyze 方法的对象:

    class MyAnalyzer(object):
        @staticmethod
        def analyze(s):
            return s.split()
    
    v = CountVectorizer(analyzer=MyAnalyzer())
    

    http://scikit-learn.org/dev 是即将发布的版本的文档(可能随时更改),而http://scikit-learn/stable 是当前稳定版本的文档。

    【讨论】:

    • 谢谢!顺便说一句,我也应该将稀疏矩阵转换为数组,对吧?像这样:ch2.fit_transform(X_train.toarray(), Y_train) 否则会发生不可订阅的错误
    • @DT:chi² 特征选择永远不需要它,它旨在处理稀疏矩阵。您管道的下一步是什么?
    • @DT:看起来像一个错误,我会在今天晚些时候研究它。现在,使用.tocsr() 而不是.toarray() 将您的coo-matrix 转换为CSR 格式,这样可以保持稀疏性。
    • @DT: 是的,一个 Numpy 数组应该没问题,但实际上你不想对稀疏矩阵进行致密化。在大型稀疏矩阵上尝试时,我的工作站冻结了。我刚刚向上游推送了一个补丁,因此 chi² 将在 0.11 中与 COO 矩阵一起使用。
    • @DT:如果它返回的功能超过k,那么我只是在开发版本中修复了它。否则,考虑filing a bug report
    猜你喜欢
    • 2019-06-08
    • 2017-02-25
    • 2020-05-05
    • 2020-01-15
    • 1970-01-01
    • 1970-01-01
    • 2022-08-12
    • 2020-02-03
    • 2013-02-05
    相关资源
    最近更新 更多