如何在scikitlearn中使用字符串内核?

2024-10-01 15:44:40 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试生成一个字符串内核,为支持向量分类器提供支持。我试过用一个计算内核的函数,类似的东西

def stringkernel(K, G):
    for a in range(len(K)):
        for b in range(len(G)):
            R[a][b] = scipy.exp(editdistance(K[a] , G[b]) ** 2)
    return R

当我把它作为参数传递给SVC时

^{pr2}$

其中,我的数据是一个字符串列表,目标是这个字符串所属的对应类。我已经在stackoverflow中回顾了一些关于这个问题的问题,但是我认为用一堆词来表示这个问题是不合适的。在


Tags: 函数字符串inforlenreturn分类器def
2条回答

这是scikit learn中一个很难消除的限制。你可以试试this workaround。只使用一个特征来表示特征向量中的字符串,这实际上只是字符串表的一个索引。在

>>> data = ["foo", "bar", "baz"]
>>> X = np.arange(len(data)).reshape(-1, 1)
>>> X
array([[0],
       [1],
       [2]])

重新定义字符串内核函数以处理此表示:

^{pr2}$

{cd1>下一步就是对新样本进行分类,然后添加新的样本。在

>>> data.extend(["bla", "fool"])
>>> clf.predict([[3], [4]])
array(['yes', 'no'], 
      dtype='|S3')

(可以通过对伪特性进行更多的解释来解决这个问题,例如,查看i >= len(X_train)的不同表。但还是很麻烦。)

这是一种难看的方法,但它是有效的(对于集群来说它稍微不那么难看,因为在那里数据集在fit之后没有改变)。我代表scikit learn开发人员说,欢迎提供一个修补程序来适当地修复此问题。在

我认为shogun库可以是解决方案,也是免费和开源的,我建议回顾一下这个例子:https://github.com/shogun-toolbox/shogun/tree/develop/src/shogun/kernel/string

相关问题 更多 >

    热门问题