преобразование категориальных данных в числовые и сохранение в формате libsvm python

#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 🙂