2015-11-12 5 views
1

Я создал разреженную матрицу, используя функцию pd.get_dummies. Матрица у меня есть 700M строк * 400 столбцов, я не думаю, что она такая большая по сравнению с множеством проблем, решаемых другими людьми. Но нарезка в поезд, вал, набор тестов может занять все время. (Я буду использовать логическую регрессию и случайный лес, чтобы сделать предсказание, которое поддерживает разреженную матрицу.) Есть ли способ эффективно разрезать sparseDataFrame или весь процесс, который я делаю, его нужно улучшить в любом случае?преобразование категориальных переменных, которые будут использоваться в sklean

Данный пример,

Это список столбцов у меня есть до трансформации категориальной переменной в фиктивные переменные:

[u'a.exch', u'a.is_mobile', u'a.os_family', u'a.os_major', u'a.ua_family', u'a.ua_major', u'a.creative_id', u'a.creative_format',u'a.banner_position', u'a.day_hour_etc', u'b.country', u'b.connspeed',u'b.home_bus'] 

Это число уникальных значений в каждом столбце:

a.exch 14 
a.is_mobile 2 
a.os_family 21 
a.os_major 35 
a.ua_family 49 
a.ua_major 56 
a.creative_id 30 
a.creative_format 3 
a.banner_position 6 
a.day_hour_etc 4 
b.country 94 
b.connspeed 9 
b.home_bus 3 

После использования pd.get_dummies он имеет более 300 столбцов, например

a.exch_1, a.exch_2, ..., b.home_bus1, b.home_bus2 

Я установил pd.get_dummies (input_df, sparse = True), потому что в противном случае он вызовет ошибку памяти. Но теперь с этим разреженным представлением все очень медленно.

Обновление: разделиться на поезд, вал и испытания, просто случайно разделить на 3 части с 6: 2: 2

+0

вы можете предоставить простое подмножество, которое показывает: 1) как структурированы ваши данные; 2) какие критерии вы используете для определения того, какие записи являются, например, обучение против проверки; и 3) какие методы вы используете для срезания фрейма данных. –

+0

на мой взгляд, строки 700M ** ** слишком большие для sklearn, tbh, которые я никогда не моделировал с большим набором данных, чем 100K строк – maxymoo

+0

Поскольку я выполняю логистическую регрессию и случайный лес, какой еще пакет вы бы порекомендовали? Я подумал, что будет немного заработать 700M строк в Spark. – Vicky

ответ

1

Имея 700M строк набора данных огромен. И, используя get dummes, вы почти делаете это в 20 раз больше.

Использование df.column =pd.factorize(df.column)[0]

или

DictVectorizer

Я не уверен, что о производительности, но это не будет столь же хуже, как get_dummies, так как это не будет создавать 380+ столбцы. Я предполагаю, что подстановка - это начало проблем. Следующая модель обучения будет работать вечно с этой большой частью данных.