Предположим, у вас есть фрейм данных:
data
class reviews
0 1 da vinci code book aw...
1 1 first clive cussler ever read even books lik...
2 1 liked da vinci cod...
3 1 liked da vinci cod...
4 1 liked da vinci code ultimatly seem...
Разделить на особенности и результаты:
y = data['class']
X = data.drop('class', axis = 1)
Затем, следуя вашему конвейеру, вы можете подготовить свои данные для любого алгоритма ML следующим образом:
from sklearn.feature_extraction.text import CountVectorizer, TfidfTransformer
new_X = vectorizer.fit_transform(X.reviews)
new_X
<5x18 sparse matrix of type '<class 'numpy.int64'>'
Этот new_X
может быть использован в вашем дальнейшем конвейере "как есть" или преобразован в плотную матрицу:
new_X.todense()
matrix([[1, 1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1],
[0, 0, 1, 1, 0, 1, 0, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, 0],
[0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 1],
[0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 1],
[0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 1, 1, 1]],
dtype=int64)
with 30 stored elements in Compressed Sparse Row format>
Строки в этой матрице представляют строки в исходном столбце reviews
, а столбцы представляют количество слов. Если вас интересует, в каком столбце указано какое слово вы можете сделать:
vectorizer.vocabulary_
{'da': 6,
'vinci': 17,
'code': 4,
'book': 1,
'awesome': 0,
'first': 9,
'clive': 3,
'cussler': 5,
....
, где key
- это слово, а value
- это индекс столбца в вышеприведенной матрице (фактически вы можете сделать вывод, что индекс столбца соответствует упорядоченному словарю, с 'awesome'
, отвечающим за 0-й столбец и т. Д.).
Вы можете продолжить работу со своим конвейером следующим образом:
tfidfconverter = TfidfTransformer()
X1 = tfidfconverter.fit_transform(new_X)
X1
<5x18 sparse matrix of type '<class 'numpy.float64'>'
with 30 stored elements in Compressed Sparse Row format>
Наконец, вы можете передать свои предварительно обработанные данные в RandomForest:
from sklearn.ensemble import RandomForestClassifier
clf = RandomForestClassifier()
clf.fit(X1, y)
Этот код работает без ошибок на моем ноутбуке.
Пожалуйста, дайте нам знать, если это решит вашу проблему!