#python #csv #dataframe #libsvm
#python #csv #фрейм данных #libsvm
Вопрос:
У меня есть фрейм данных, который выглядит примерно так:
A B C D
1 String1 String2 String3 String4
2 String2 String3 String4 String5
3 String3 String4 String5 String6
.........................................
Моя цель — преобразовать этот фрейм данных в формат libSVM.
До сих пор я пробовал следующее:
dummy= pd.get_dummies(dataframe)
dummy.to_csv('dataframe.csv', header=False, index=False)
есть ли способ преобразовать фрейм данных или файл csv в этот формат. Или есть более разумный способ выполнить преобразование?
Я попытался загрузить скрипт, предназначенный для этого, из этого репозитория следующим образом:
%load libsvm2csv.py
и скрипт загружается правильно, но когда я запускаю:
libsvm2csv.py dataframe.csv dataframe.data 0 True
или
libsvm2csv.py dataframe.csv dataframe.txt 0 True
Я получаю "SyntaxError: invalid syntax"
указание на dataframe.csv
Ответ №1:
После предварительной обработки ваших данных вы можете извлечь матрицу и использовать scikit-learns dump_svmlight_file для создания этого формата.
Пример кода:
import pandas as pd
from sklearn.datasets import dump_svmlight_file
dummy = pd.get_dummies(dataframe)
mat = dummy.as_matrix()
dump_svmlight_file(mat, y, 'svm-output.libsvm') # where is your y?
Примечания / Альтернатива:
Вы упоминаете libsvm2csv.py чтобы сделать это преобразование, но это просто неправильное направление. Это libsvm-format -> csv.
Проверьте phraugs csv2libsvm.py если вы хотите конвертировать из cvs -> libsvm (без scikit-learn).
Я предпочитаю использовать scikit-learn (по сравнению с phraug)
Комментарии:
1. Спасибо @sascha, мое значение y должно быть целевым, но после того, как я применил преобразования, у меня более 50 столбцов, и ни один из них не может быть установлен в качестве целевого. В фрейме данных, который я упомянул в своем вопросе, target — это последний столбец.
2. @Kratos Тогда вы неправильно выполняете предварительную обработку. Сначала извлеките и удалите целевой объект Y, затем создайте макеты только для части X. В чем проблема. Это очень простой материал. А также: почему бы не использовать scikit-learn, который красиво обертывает libsvm (не нужно вызывать его вручную)?
3. я впервые занимаюсь этим, и я не могу найти какой-либо источник, чтобы получить информацию о том, как я должен это делать правильно. Спасибо за помощь, хотя
4. @Kratos Просто используй scikit-learn. Извлеките последний столбец = target как Y и выполните предварительную обработку на X. Scikit-learn сможет обрабатывать Y как есть (строки или что-то еще). Вызовите SVM в scikit -узнайте, который будет использовать libsvm. Документы scikit-learn являются первоклассными и содержат множество руководств и примеров. Viel erfolg 🙂