Я пытаюсь адаптировать этот пример к некоторым данным социальных сетей, которые у меня есть в База данных SQL-сервера.
Я намеренно заставил как обучающие, так и тестовые наборы содержать только сообщения в социальных сетях, содержащие слово «пучки». Поэтому я ожидал бы чрезвычайно высокого значения f для этого слова, когда прогоню его по всем алгоритмам. Вместо этого я получаю примерно 2-4%. У меня такое ощущение, что я неправильно скармливаю данные алгоритмам.
from __future__ import print_function
import numpy as np
from time import time
from sklearn.feature_extraction.text import TfidfVectorizer
import pyodbc
import pprint
#local windows connection
train = []
db = pyodbc.connect('DRIVER={SQL Server Native Client 11.0};SERVER=SERVER_IP;DATABASE=DB_NAME;Trusted_Connection=Yes;')
cursor = db.cursor()
training_query = "SELECT top 2 percent postTitle FROM dbo.All_CH_Posts where monitorID ='1168136050' and postTitle like '%bunches%' ORDER BY NEWID()"
trainquery = cursor.execute(training_query)
traindata = cursor.fetchall()
for row in traindata:
train.extend(row)
test = []
test_query = "SELECT top 1 percent postTitle FROM dbo.All_CH_Posts where monitorID ='1168136050' and postTitle like '%bunches%' ORDER BY NEWID()"
testquery = cursor.execute(test_query)
testdata = cursor.fetchall()
for row in testdata:
test.extend(row)
print('traindata')
pp.pprint(traindata)
print('testdata')
pp.pprint(testdata)
print('data loaded')
# split a training set and a test set
y_train = train
y_test =test
print("Extracting features from the training dataset using a sparse vectorizer")
t0 = time()
vectorizer = TfidfVectorizer(decode_error='ignore',sublinear_tf=True,
stop_words='english', lowercase=True, min_df=20)
X_train = vectorizer.fit_transform(train)
duration = time() - t0
print("Extracting features from the test dataset using the same vectorizer")
t0 = time()
X_test = vectorizer.transform(test)
duration = time() - t0
print("n_samples: %d, n_features: %d" % X_test.shape)
feature_names = np.asarray(vectorizer.get_feature_names())
print(feature_names)
Я намеренно установил min_df высокий, чтобы посмотреть, какие слова находятся в моей разреженной матрице:
n_samples: 237, n_features: 26
['almonds' 'amp' 'best' 'bowl' 'box' 'bunches' 'cereal' 'cheerios' 'crunch'
'day' 'don' 'eat' 'eating' 'good' 'gt' 'honey' 'http' 'just' 'like' 'lol'
'love' 'miss' 'morning' 'oats' 'rt' 'want']
Так что я делаю не так? Или я неправильно думаю об этой проблеме / неправильно понимаю классификацию текста?
y_train = train
, который выглядит так, как будто вы используете текст в качестве меток, что меня довольно сбивает с толку. Какие f-баллы вы вычисляете? На самом деле, если у всех текстов есть общая черта, эта функция неинформативна и должна иметь нулевой f-балл (iirc). - person Andreas Mueller   schedule 05.11.2014data_train.target_names
? Это должен быть список классов, которые вы пытаетесь классифицировать. - person Gurupad Hegde   schedule 05.11.2014