Найти - Пользователи
Полная версия: тестирование классификации в scikit-learn
Начало » Python для экспертов » тестирование классификации в scikit-learn
1
Lion
На своих данных обучил 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)
При обучении результат показывал на разных методах 96-98%. При тестировании отдельных файлов результат “на глаз” 30-50%. Не могу понять, что делаю не то.
noob_saibot
Покажите как учили, размер выборки, результаты кросс валидации. Возможно переобучение…

Что значит: “на глаз” 30-50%? accuracy_score?
 from sklearn.metrics import accuracy_score
print(accuracy_score(y_true, clf.predict(X_test)))
Lion
“На глаз” - это значит натравливаю каждое сообщение на разные модели, и смотрю результат по каждой модели, а результат - “кто в лес, кто по дрова”.

В общем, разобрался. При обучении нужно скидывать матрицу 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)
Я же грузил только словарь из процедуры TFiDF
 dict(zip(vectorizer.get_feature_names(), idf))
и на нем строил тестовый вектор. Видимо, при получении моделей словарь хешируется и порядок нарушается.
Как я понимаю, тестирование работает не с одним вектором (полученным из тестового сообщения), а с пучком векторов на весах из TFiDF по тематикам, выбирая самый близкий по косинусу.
В принципе, это правильно: результат получается на 0.5-1% выше, чем на просто одном частотном векторе сообщения, но и работает, соответственно, медленнее.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB