Сочетание слов и других функций в одной модели с использованием sklearn и панд

Я пытаюсь смоделировать оценку, которую получает почта, на основе как текста сообщения, так и других функций (время суток, длина сообщения и т. Д.).

Мне интересно, как наилучшим образом объединить эти разные типы функций в одну модель. Прямо сейчас у меня есть что-то вроде следующего (украденного здесь и здесь ).

import pandas as pd ... def features(p): terms = vectorizer(p[0]) d = {'feature_1': p[1], 'feature_2': p[2]} for t in terms: d[t] = d.get(t, 0) + 1 return d posts = pd.read_csv('path/to/csv') # Create vectorizer for function to use vectorizer = CountVectorizer(binary=True, ngram_range=(1, 2)).build_tokenizer() y = posts["score"].values.astype(np.float32) vect = DictVectorizer() # This is the part I want to fix temp = zip(list(posts.message), list(posts.feature_1), list(posts.feature_2)) tokenized = map(lambda x: features(x), temp) X = vect.fit_transform(tokenized) 

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

CSV выглядит примерно так:

 ID,message,feature_1,feature_2 1,'This is the text',4,7 2,'This is more text',3,2 ... 

One Solution collect form web for “Сочетание слов и других функций в одной модели с использованием sklearn и панд”

Вы можете сделать все с вашей картой и лямбдой:

 tokenized=map(lambda msg, ft1, ft2: features([msg,ft1,ft2]), posts.message,posts.feature_1, posts.feature_2) 

Это экономит выполнение промежуточного временного шага и выполняет итерацию через 3 столбца.

Другое решение будет преобразовывать сообщения в их разрешенную матрицу CountVectorizer и присоединяться к этой матрице с значениями функций из фрейма данных posts (это пропускает необходимость создания dict и создает разреженную матрицу, аналогичную тому, что вы получите с DictVectorizer):

 import scipy as sp posts = pd.read_csv('post.csv') # Create vectorizer for function to use vectorizer = CountVectorizer(binary=True, ngram_range=(1, 2)) y = posts["score"].values.astype(np.float32) X = sp.sparse.hstack((vectorizer.fit_transform(posts.message),posts[['feature_1','feature_2']].values),format='csr') X_columns=vectorizer.get_feature_names()+posts[['feature_1','feature_2']].columns.tolist() posts Out[38]: ID message feature_1 feature_2 score 0 1 'This is the text' 4 7 10 1 2 'This is more text' 3 2 9 2 3 'More random text' 3 2 9 X_columns Out[39]: [u'is', u'is more', u'is the', u'more', u'more random', u'more text', u'random', u'random text', u'text', u'the', u'the text', u'this', u'this is', 'feature_1', 'feature_2'] X.toarray() Out[40]: array([[1, 0, 1, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 4, 7], [1, 1, 0, 1, 0, 1, 0, 0, 1, 0, 0, 1, 1, 3, 2], [0, 0, 0, 1, 1, 0, 1, 1, 1, 0, 0, 0, 0, 3, 2]]) 

Кроме того, у sklearn-pandas есть DataFrameMapper, который делает то, что вы тоже ищете:

 from sklearn_pandas import DataFrameMapper mapper = DataFrameMapper([ (['feature_1', 'feature_2'], None), ('message',CountVectorizer(binary=True, ngram_range=(1, 2))) ]) X=mapper.fit_transform(posts) X Out[71]: array([[4, 7, 1, 0, 1, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1], [3, 2, 1, 1, 0, 1, 0, 1, 0, 0, 1, 0, 0, 1, 1], [3, 2, 0, 0, 0, 1, 1, 0, 1, 1, 1, 0, 0, 0, 0]]) 

Примечание. При использовании этого последнего метода X не является разреженным.

 X_columns=mapper.features[0][0]+mapper.features[1][1].get_feature_names() X_columns Out[76]: ['feature_1', 'feature_2', u'is', u'is more', u'is the', u'more', u'more random', u'more text', u'random', u'random text', u'text', u'the', u'the text', u'this', u'this is'] 
  • Сгладить столбец со значением списка типов при одновременном дублировании значения другого столбца в Pandas
  • pandas plot time series
  • Измените цвет текста в pythas dataframe html table python, используя стили и css
  • Groupby на основе значения в предыдущей строке
  • Как получить все уникальные слова в кадре данных?
  • Pandas: частота штрих-кодов
  • pandas выберите из Dataframe, используя startswith
  • Раскраски в пандах
  • Ближайший эквивалент факторной переменной в Python Pandas
  • Выбор строк - на основе списка - из DF с дублированными столбцами
  • Как объединить строки и преобразовать их в столбцы
  •  
    Interesting Posts for Van-Lav

    Неожиданный аргумент ключевого слова «контекст» при использовании appcfg.py

    Нарезка MultiIndex с индексом строки Timeseries

    Ошибка datetime.strptime () throws 'не соответствует формату'

    Использование целых чисел / дат в качестве терминалов в парсере NLTK

    Как распределить ось x двух подзаговоров после их создания?

    Клавиши со стрелками больше не работают в оболочке Python после обновления Mac OS до Sierra

    извлечение данных из твитов твиттера с использованием python

    Какие разные форматы принимает RDFlib при чтении строк в графике в python?

    Заменяет ли перезагрузка модуль именами в ранее импортированном / перезагруженном модуле?

    Где я должен поместить свой собственный модуль python, чтобы его можно было импортировать

    Django использует кодировку ANSI_X3.4-1968 вместо UTF-8

    django не обслуживает статические файлы

    Как изменить легенду matplotlib после ее создания?

    как пропустить пустую строку при чтении CSV-файла с помощью python

    Clojure эквивалентен функциям Python «any» и «all»?

    Python - лучший язык программирования в мире.