String Subsequence Kernel y SVM usando Python

¿Cómo puedo usar Subsequence String Kernel (SSK) [Lodhi 2002] para entrenar un SVM (Support Vector Machine) en Python?

Esta es una actualización de la respuesta de gcedo para trabajar con la versión actual de shogun (Shogun 6.1.3).

Ejemplo de trabajo:

import numpy as np from shogun import StringCharFeatures, RAWBYTE from shogun import BinaryLabels from shogun import SubsequenceStringKernel from shogun import LibSVM strings = ['cat', 'doom', 'car', 'boom','caboom','cartoon','cart'] test = ['bat', 'soon', 'it is your doom', 'i love your cat cart','i love loonytoons'] train_labels = np.array([1, -1, 1, -1,-1,-1,1]) test_labels = np.array([1, -1, -1, 1]) features = StringCharFeatures(strings, RAWBYTE) test_features = StringCharFeatures(test, RAWBYTE) # 1 is n and 0.5 is lambda as described in Lodhi 2002 sk = SubsequenceStringKernel(features, features, 3, 0.5) # Train the Support Vector Machine labels = BinaryLabels(train_labels) C = 1.0 svm = LibSVM(C, sk, labels) svm.train() # Prediction predicted_labels = svm.apply(test_features).get_labels() print(predicted_labels) 

He llegado a una solución utilizando la Biblioteca Shogun. Debe instalarlo desde el commit 0891f5a38bcb, ya que las revisiones posteriores eliminarán por error las clases necesarias.

Este es un ejemplo de trabajo:

 from shogun.Features import * from shogun.Kernel import * from shogun.Classifier import * from shogun.Evaluation import * from modshogun import StringCharFeatures, RAWBYTE from shogun.Kernel import SSKStringKernel strings = ['cat', 'doom', 'car', 'boom'] test = ['bat', 'soon'] train_labels = numpy.array([1, -1, 1, -1]) test_labels = numpy.array([1, -1]) features = StringCharFeatures(strings, RAWBYTE) test_features = StringCharFeatures(test, RAWBYTE) # 1 is n and 0.5 is lambda as described in Lodhi 2002 sk = SSKStringKernel(features, features, 1, 0.5) # Train the Support Vector Machine labels = BinaryLabels(train_labels) C = 1.0 svm = LibSVM(C, sk, labels) svm.train() # Prediction predicted_labels = svm.apply(test_features).get_labels() print predicted_labels 

Recientemente, el Kernel de Secuencia de Cuerdas (SSK) [Lodhi. et. al., 2002] se ha agregado a la caja de herramientas Shogun Machine Learning y está disponible para su uso en todas las interfaces modulares, incluido Python. Puede encontrar un ejemplo práctico de uso de este núcleo para un problema de clasificación de ADN aquí utilizando LibSVM.

Para futuras referencias, el nombre del Kernel en la versión actual de Shogun (3.2.0) es StringSubsequenceKernel .

Fuente: https://code.google.com/p/shogun-toolbox/source/browse/src/shogun/kernel/string/StringSubsequenceKernel.h