2016-07-09 1 views
0

Scikit-Learn - отличный модуль Python, который снабжает support vector machine множеством алгоритмов. Я изучаю, как использовать модуль в течение последних нескольких дней, и я заметил, что он сильно зависит от отдельного модуля numpy.Как получить данные в формате ndarray для SKLearn?

Я понимаю, что делает модуль, но я все еще узнаю, как это работает. Вот очень краткий пример того, что я использую для sklearn:

from sklearn import datasets, svm 
import numpy 

digits = datasets.load_digits() #image pixel data of digits 0-9 as well as a chart of the corresponding digit to each image 

clf = svm.SVC(gamma=0.001,C=100) #SVC is the algorithm used for classifying this type of data 

x,y = digits.data[:-1], digits.target[:-1] #feed it all the data 
clf.fit(x,y) #"train" the SVM 

print(clf.predict(digits.data[0])) #>>>[0] 
#with 99% accuracy, all of the data consists of 1797 samples. 
#if this number gets smaller, the accuracy decreases. with 10 samples (0-9), 
#accuracy can still be up to as high as 90%. 

Это очень простой классификации. Существует 10 классов: 0,1,2,3,4,5,6,7,8,9.

Используя следующий код с matplotlib.pyplot:

import matplotlib.pyplot as plt #in shell after running previous code 
plt.imshow(digits.images[0],cmap=plt.cm.gray_r,interpolation="nearest") 
plt.show() 

дает следующее изображение: enter image description here

Первый пиксель (слева направо, сверху вниз, как чтение) будет представлена 0. То же самое для второго, но третье будет представлено 7 или что-то (диапазон от 0 до 15), четвертый - около 13. Вот фактические данные для изображения:

[[ 0. 0. 5. 13. 9. 1. 0. 0.] 
[ 0. 0. 13. 15. 10. 15. 5. 0.] 
[ 0. 3. 15. 2. 0. 11. 8. 0.] 
[ 0. 4. 12. 0. 0. 8. 8. 0.] 
[ 0. 5. 8. 0. 0. 9. 8. 0.] 
[ 0. 4. 11. 0. 1. 12. 7. 0.] 
[ 0. 2. 14. 5. 10. 12. 0. 0.] 
[ 0. 0. 6. 13. 10. 0. 0. 0.]] 

Так что я задал вопрос:, если я хотел классифицировать текстовые данные, например, сообщения на форуме в неправильном подфоруме/категории, как бы преобразовать эти данные в числовую систему, используемую в этом примере набора данных?

+0

Вам нужно будет сгладить его до одного вектора. Таким образом, ваш массив numpy будет nx64, где n - количество изображений, и каждый столбец представляет один пиксель вашего изображения. Очевидно, вы теряете много интересной информации с этим представлением вашего изображения, что является одной из причин, почему сверточные нейронные сети, вообще говоря, намного превосходят, когда дело доходит до классификации изображений. – David

ответ

0

Для каждого образца (например, каждого сообщения Форума) у вас должен быть вектор (в списке python). Например, если у вас есть 200 сообщений и их соответствующая категория, у вас должно быть 200 списков для учебных данных и ровно один список, который имеет 200 элементов для каждой категории 200. Каждый список категорий для обучения по телефону может быть моделью (например, Bag Of Word. См. Здесь: https://en.wikipedia.org/wiki/Bag-of-words_model). Обратите внимание: весь список для обучения должен иметь один и тот же элемент (одинаковый размер) (например, каждый список должен иметь 3000 элементов, которые каждый элемент повторно присутствует или отсутствует) Попытайтесь посмотреть на это, это легко для начинающих: https://www.kaggle.com/c/word2vec-nlp-tutorial/details/part-1-for-beginners-bag-of-words

Смежные вопросы