2014-09-04 2 views
0

Когда я пытаюсь использовать svmlight python package с данными, которые я уже преобразовал в формат svmlight, я получаю сообщение об ошибке. Это должно быть довольно просто, я не понимаю, что происходит. Вот код:Ошибка загрузки svmlight

import svmlight 
training_data = open('thedata', "w") 
model=svmlight.learn(training_data, type='classification', verbosity=0) 

Я также попытался:

training_data = numpy.load('thedata') 

и

training_data = __import__('thedata') 
+0

Какая ошибка у вас возникла? Есть ли трассировка, которую вы можете опубликовать? – mhawke

ответ

2

Одна очевидная проблема заключается в том, что вы усечения файл данных, когда вы открываете его, потому что вы с указанием режима записи "w". Это означает, что данных не будет читать.

В любом случае, вам не нужно читать файл, как если бы этот файл данных был таким же, как в этом example, его нужно импортировать, потому что это файл python. Это должно работать:

import svmlight 
from data import train0 as training_data # assuming your data file is named data.py 
# or you could use __import__() 
#training_data = __import__('data').train0 

model = svmlight.learn(training_data, type='classification', verbosity=0) 

Возможно, вы захотите сравнить свои данные с данными примера.

Edit после формата файла данных выяснены

необходим файл ввода, который будет обработан в список кортежей, как это:

[(target, [(feature_1, value_1), (feature_2, value_2), ... (feature_n, value_n)]), 
(target, [(feature_1, value_1), (feature_2, value_2), ... (feature_n, value_n)]), 
... 
] 

Пакет svmlight не отображается для поддержки чтения из файл в формате SVM-файла, и нет никаких функций синтаксического анализа, поэтому он должен быть реализован в Python. SVM файлы выглядеть следующим образом:

<target> <feature>:<value> <feature>:<value> ... <feature>:<value> # <info> 

так вот парсер, который преобразует формат файла в который требуется пакетом svmlight:

def svm_parse(filename): 

    def _convert(t): 
     """Convert feature and value to appropriate types""" 
     return (int(t[0]), float(t[1])) 

    with open(filename) as f: 
     for line in f: 
      line = line.strip() 
      if not line.startswith('#'): 
       line = line.split('#')[0].strip() # remove any trailing comment 
       data = line.split() 
       target = float(data[0]) 
       features = [_convert(feature.split(':')) for feature in data[1:]] 
       yield (target, features) 

И вы можете использовать его как это:

import svmlight 

training_data = list(svm_parse('thedata')) 
model=svmlight.learn(training_data, type='classification', verbosity=0) 
+0

Когда я пытаюсь открыть с помощью «r», я получаю 'TypeError: ожидаемый список документов'. При попытке импорта я получаю '-1 0: 1,173286269861675 1: 0,4524566925178124 2: -0,9622895995173304 3: -0,0323228512901514 4: -0,3883630237637885 5: 0,05964858946340369 6: 0,4476052015809368 7: 0,4476052012718441 8: 0,03136114112311881 9: 0,4500600446286898 10: 0,4492788390876735 11: 0,4479268098079717 12: 0,4475026647089226 13: 0,4479050146233448 14: 0,4476815332854934 15: 0,4474691649775809 16: 0,4565717543476677 17: 0,4475921191001453 ^ SyntaxError: недопустимый syntax' (выше, является примером, например, в моем файле данных) –

+0

файл данных не на самом деле точно равны, потому что у меня нет структур, а только данных. Я использовал scikit learn array для преобразования формата svmlight, я не уверен, как я могу преобразовать данные в файл со структурой вместо ... –

+0

@PF_learning см. Обновленный ответ – mhawke