Форум сайта python.su
На своих данных обучил document_classification_20newsgroups.py из scikit-learn, получил словарь и модели (12 штук). Теперь модели загружаю и пытаюсь тестировать на отдельных файлах:
with open(fl, 'r', encoding='utf8') as f: data_test = f.readlines() #считал текстовый файл with open('dict.txt', 'r', encoding='utf8') as f: voc = [line.rstrip('\n') for line in f] #считал словарь из обучения clf = joblib.load("LinearSVC.dump") #загрузил модель(как пример) vectorizer = CountVectorizer( vocabulary=voc) X_test = vectorizer.transform(data_test) #получил из текста вектор = длине словаря pred = clf.predict(X_test) #сам тест print(pred)
Офлайн
Покажите как учили, размер выборки, результаты кросс валидации. Возможно переобучение…
Что значит: “на глаз” 30-50%? accuracy_score?
from sklearn.metrics import accuracy_score print(accuracy_score(y_true, clf.predict(X_test)))
Отредактировано noob_saibot (Май 12, 2017 15:19:08)
Офлайн
“На глаз” - это значит натравливаю каждое сообщение на разные модели, и смотрю результат по каждой модели, а результат - “кто в лес, кто по дрова”.
В общем, разобрался. При обучении нужно скидывать матрицу TFiDF,
vectorizer = TfidfVectorizer(sublinear_tf=True, max_df=0.5, stop_words='english') X_train = vectorizer.fit_transform(data_train.data) joblib.dump(vectorizer, "vectorizer.dump")
vectorizer = joblib.load("vectorizer.dump")
X_test = vectorizer.transform(data_test)
dict(zip(vectorizer.get_feature_names(), idf))
Офлайн