Одна очевидная проблема заключается в том, что вы усечения файл данных, когда вы открываете его, потому что вы с указанием режима записи "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)
Какая ошибка у вас возникла? Есть ли трассировка, которую вы можете опубликовать? – mhawke