不匹配字符串内核的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第三方库


热门话题
JavaFXControlsFX8.0.6对话框java。util。丢失资源异常   java覆盖@CollectionTable   java在BlackBerry中访问internet以执行POST的不同方式   在Spring中为CSS找到java NoHandler   java如何在Google App Engine的应用程序中配置servlet过滤器。yaml文件?   java无法在域模式下创建gc日志   Java:匹配数组元素并删除   java如何使所有按钮在JavaFX浏览器中正常工作?   java如何将admob广告放置在LibGDX视图上方   从java HTTP响应获取正确的类型/编码   保存Java配置信息的最佳位置   java如何从pc将当前日期设置为jDateChooser?   java在数组中多次存储用户输入   java Lein安装/uberjar在尝试将依赖项中的类与genclass一起使用时失败   java从菜单执行SQL语句   java如何将自定义反序列化器Gson中的JsonElement值小写?   java如何在同一页而不是新页上获得响应   如何在Java中生成最小值和最大值之间的随机整数?   从不同类访问Java hashmap   java Hibernate无法从数据库中正确读取对象