不匹配字符串内核的Python3实现

mismatch-string-kernel的Python项目详细描述


字符串内核不匹配

以下出版物中描述的不匹配内核的简单Python3实现:

%0 Journal Article
%T Mismatch string kernels for discriminative protein classification
%A Leslie, Christina S
%A Eskin, Eleazar
%A Cohen, Adiel
%A Weston, Jason
%A Noble, William Stafford
%J Bioinformatics
%V 20
%N 4
%P 467-476
%@ 1460-2059
%D 2004
%I Oxford University Press
%U https://doi.org/10.1093/bioinformatics/btg431

使用

要了解这个内核的技术细节,请参阅上面的文章。在

初始化内核

首先,你必须定义一个字母表,从中生成k-mers, k-mers的长度k和m-mer之间最大不匹配数,例如:

^{pr2}$

然后,可以使用以下参数创建MismatchKernel对象:

frommismatch_kernelimportMismatchKernelmk=MismatchKernel(ALPHABET,k,m)

将字符串映射到(k-m)特征空间

您可以使用vectorize(x)函数将字符串x映射到(k-m)特性空间。在

请注意,字母表通常区分大小写,因此如果您的字符串需要 区分大小写(即“字符串”!=“StRiNg”),您的字母表应同时包含两个大写字母 和小写字母。而且这将大大增加计算时间,因为 k-mer功能空间具有维度#(字母表)^k;如果需要,也可以这样做 区分标点符号,例如在字母表上面的字符串会有所不同 基于它们包含的空间(即“空间”!=“spa ce”)。 通常,传递给该模块函数的字符串将被规范化,即 不在字母表中的字符将被删除。例如,如果您调用vectorize("String") 在定义了上面的字母表之后,你实际上是在向量化“tring”,所以你应该 改为调用vectorize("String".lower())。在

vectorize(x)函数返回一个元组(x_norm, dok),其中x_norm是实际的字符串 它已经被矢量化(即x标准化),所以你可以检查你是否真的是这样 想要向量化,并且dok是DOK(密钥字典)中的向量 格式(因为向量通常是稀疏的),所以它将像字典一样 {2: 1, 3: 1, 14: 1, 17: 2, 30: 1, 41: 1, ...}表示向量有非零值 只在字典键的位置,即[0, 0, 1, 1, 0, ..., 0, 1, 0, 0, 2, ...]。 您可以将x_norm与向量一起推送到字典中,这样就不必这样做了 再次矢量化,这就是get_kernel()函数的实际作用。在

示例

x_norm,vect=mk.mismatch_tree.vectorize("doc. Frankenstein".lower())print("{} -> {}".format(x_norm,vect))
> doc frankenstein -> {10: 1, 13: 1, 37: 1, 64: 1, ...}

计算两个字符串之间的内核

您可以使用get_kernel(x1, x2)函数来获取x1和{}之间的内核, 内核在0和1之间变化,两个字符串越相似,它就越大 (如果字符串相等,则为1)。 函数将自动对两个字符串进行规格化和矢量化,以计算 内核。在

示例

ker=mk.get_kernel("doc. Frankenstein".lower(),"doc. Drunkenstein".lower())print(ker)
> 0.7500011542039571

使用或提供已经计算的失配向量和核

get_kernel函数将在MismatchKernel对象中保存每个 字符串在MISMATCH_VECTORS属性中矢量化,这是一个存储 字符串作为键,相应的向量作为值 (即{'doc frankenstein': {10: 1, 13: 1, 37: 1, 64: 1, ...}, 'doc drunkenstein': {80: 1, 98: 1, 116: 1, 121: 1, ...})所以如果你打给next mk.get_kernel("doc drunkenstein", "doc nykterstein"它不会再矢量化"doc drunkenstein"。在

同样,每个计算的内核都将存储在KERNEL_MATRIX属性中,即 将字符串存储为键的字典和另一个以字符串作为键的字典和 两个键之间的内核值作为值 (即{'doc frankenstein': {'doc drunkenstein': 0.7500011542039571, 'doc nykterstein': 0.5041614599291009}})。 如果要计算一批字符串的内核,可以从 相同的MismatchKernel对象,因此不匹配向量或内核具有的字符串 不会再计算了。在

如果已经有一个或两个字典,可以将其传递给MismatchKernel 施工单位:

mk=MismatchKernel(ALPHABET,k,m,vectors_dict,kernels_dict)

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java ActiveMQ 5.9.0、Glassfish 3.1.2和MDB用于长时间的消息处理   从main调用的对象数组的Java字符串表示形式   java如何在iText 7中为泰国字母上方的双标记设置GPO   编译如果Java6工件是用Java6、7或8编译的,这有关系吗?   image Java KeyListener未检测到键盘输入   java找不到符号(构造函数)   java如何使Kafka使用者从特定主题分区读取Spring Boot   Java readLine()返回null   从CSV文件计算值时出现java系统错误   java如何避免处理程序。被调用后延迟(可运行运行)?   Java Do和While验证   java如何访问父类型的ArrayList中的子方法?   java如何使用Deepfirstsearch算法获得最高级别的搜索   xml使用SAX解析器Java正确构建字符串   Android片段中的java Toast显示空指针expn   如何在java中将多个文件合并到另一个新文件中?   java在运行时在JVisualVM中更改应用程序的标题   javajavax。命名。NoInitialContextException:需要在环境或sys中指定类名