Почему один столбец заставляет мой SVM занимать час? - PullRequest
1 голос
/ 24 октября 2019

Я использую sklearn.SVC на панде DataFrame для прогнозирования категориальных данных. Вектор объектов с именем "feature_train" представляет собой один столбец времени (numpy.int64) и несколько тысяч столбцов tfidf (которые очень редко содержат значения numpy.float64):

     Timestamp Start  able  acceptance  acceptance criterion  access  account  
113              646   0.0         0.0                   0.0     0.0      0.0   
342             1775   0.0         0.0                   0.0     0.0      0.0   
3                202   0.0         0.0                   0.0     0.0      0.0   
129              728   0.0         0.0                   0.0     0.0      0.0   
32               257   0.0         0.0                   0.0     0.0      0.0   
..               ...   ...         ...                   ...     ...      ...   
140              793   0.0         0.0                   0.0     0.0      0.0   
165              919   0.0         0.0                   0.0     0.0      0.0   
180             1290   0.0         0.0                   0.0     0.0      0.0   
275             1644   0.0         0.0                   0.0     0.0      0.0   
400             2402   0.0         0.0                   0.0     0.0      0.0   

для справки, вот столбецЯ пытаюсь предсказать с именем "label_train":

113    14
342    17
3       1
129     0
32     12
       ..
140    15
165     1
180    15
275    12
400    14

Я сразу ввожу эти две переменные в линейный SVM:

clf = svm.SVC(kernel="linear")
clf.fit(feature_train, label_train) #<-- this takes forever

Индексы вышли из строя, потому что я использую поездТест-функция разделения. Когда я запускаю этот DataFrame через sklearn.SVC (kernel = "linear"), это занимает 4275 секунд, но когда я удаляю столбец "Timestamp Start", это занимает 6 секунд. Кроме того, если я удаляю все столбцы tfidf, так что остается только «Начало отметки времени», обучение модели занимает очень много времени.

Почему один столбец целых чисел существенно сложнее обучить, чем2000+ поплавков? Это нормальное поведение? Если это так, то если бы я добавил оставшиеся 3 столбца меток времени, это заняло бы слишком много времени, чтобы вообще стоить использовать метки времени.

Ответы [ 2 ]

0 голосов
/ 03 ноября 2019

Когда вы используете дистанционные алгоритмы, такие как SVM, вы хотите, чтобы ваши функции были нормализованы, поэтому ни одна функция не доминирует в ваших тренировках. Взгляните на этот блог Роберто Рейфа. Вы также найдете тонны ресурсов о том, почему, что и как.

https://www.robertoreif.com/blog/2017/12/16/importance-of-feature-scaling-in-data-modeling-part-1-h8nla

0 голосов
/ 30 октября 2019

Ответ состоял в том, чтобы масштабировать значения столбца между 0-1. Большие значения приводят к резкому снижению производительности.

...