Arhn - архитектура программирования

Использую ли я тот же словарь Tfidf в k-fold cross_validation?

Я делаю классификацию текста на основе TF-IDF модели векторного пространства. У меня всего не более 3000 образцов. Для честной оценки я оцениваю классификатор с использованием 5-кратной перекрестной проверки. Но меня смущает то, что это необходимо для перестроения TF-IDF векторной пространственной модели при перекрестной проверке каждой складки. А именно, нужно ли мне перестраивать словарь и пересчитывать значение IDF в словаре при каждой перекрестной проверке сгиба?

В настоящее время я занимаюсь преобразованием TF-IDF на основе набора инструментов scikit-learn и обучаю свой классификатор с помощью SVM. Мой метод заключается в следующем: во-первых, я делю образец в соотношении 3:1, 75 процентов из них применяются для соответствия параметру модели векторного пространства TF-IDF. Здесь параметром является размер словаря и содержащихся в нем терминов, а также IDF значение каждого термина в словаре. Затем я преобразовываю остаток в этом TF-IDF SVM и использую эти векторы для 5-кратной перекрестной проверки (примечательно, что я не использовать предыдущие 75-процентные образцы для преобразования).

Мой код выглядит следующим образом:

# train, test split, the train data is just for TfidfVectorizer() fit
x_train, x_test, y_train, y_test = train_test_split(data_x, data_y, train_size=0.75, random_state=0)
tfidf = TfidfVectorizer()
tfidf.fit(x_train)

# vectorizer test data for 5-fold cross-validation
x_test = tfidf.transform(x_test)

 scoring = ['accuracy']
 clf = SVC(kernel='linear')
 scores = cross_validate(clf, x_test, y_test, scoring=scoring, cv=5, return_train_score=False)
 print(scores)

Меня смущает то, что правильный ли мой метод, выполняющий TF-IDF преобразование и выполняющий 5-кратную перекрестную проверку, или необходимо перестроить TF-IDF векторное пространство модели с использованием данных поезда, а затем преобразовать в TF-IDF векторов как с данными обучения, так и с тестом? Просто следующим образом:

skf = StratifiedKFold(n_splits=5, shuffle=True, random_state=0)
for train_index, test_index in skf.split(data_x, data_y):
    x_train, x_test = data_x[train_index], data_x[test_index]
    y_train, y_test = data_y[train_index], data_y[test_index]

    tfidf = TfidfVectorizer()
    x_train = tfidf.fit_transform(x_train)
    x_test = tfidf.transform(x_test)

    clf = SVC(kernel='linear')
    clf.fit(x_train, y_train)
    y_pred = clf.predict(x_test)
    score = accuracy_score(y_test, y_pred)
    print(score)

  • да. Да это так. 02.09.2017

Ответы:


1

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

Если вы думаете о построении TfidfVectorizer() для всего набора данных, то это ситуация с утечкой тестового набора данных в модель, даже если мы явно не передаем тестовый набор данных. Такие параметры, как размер словарного запаса, значение IDF каждого термина в словаре, будут сильно различаться при включении тестовых документов.

Более простым способом может быть использование конвейера и cross_validate.

Использовать этот!

from sklearn.pipeline import make_pipeline
clf = make_pipeline(TfidfVectorizer(), svm.SVC(kernel='linear'))

scores = cross_validate(clf, data_x, data_y, scoring=['accuracy'], cv=5, return_train_score=False)
print(scores) 

Примечание. Нецелесообразно выполнять cross_validate только на тестовых данных. мы должны сделать с набором данных [train + validation].

20.01.2019
Новые материалы

Коллекции публикаций по глубокому обучению
Последние пару месяцев я создавал коллекции последних академических публикаций по различным подполям глубокого обучения в моем блоге https://amundtveit.com - эта публикация дает обзор 25..

Представляем: Pepita
Фреймворк JavaScript с открытым исходным кодом Я знаю, что недостатка в фреймворках JavaScript нет. Но я просто не мог остановиться. Я хотел написать что-то сам, со своими собственными..

Советы по коду Laravel #2
1-) Найти // You can specify the columns you need // in when you use the find method on a model User::find(‘id’, [‘email’,’name’]); // You can increment or decrement // a field in..

Работа с временными рядами спутниковых изображений, часть 3 (аналитика данных)
Анализ временных рядов спутниковых изображений для данных наблюдений за большой Землей (arXiv) Автор: Рольф Симоэс , Жильберто Камара , Жильберто Кейрос , Фелипе Соуза , Педро Р. Андраде ,..

3 способа решить квадратное уравнение (3-й мой любимый) -
1. Методом факторизации — 2. Используя квадратичную формулу — 3. Заполнив квадрат — Давайте поймем это, решив это простое уравнение: Мы пытаемся сделать LHS,..

Создание VR-миров с A-Frame
Виртуальная реальность (и дополненная реальность) стали главными модными терминами в образовательных технологиях. С недорогими VR-гарнитурами, такими как Google Cardboard , и использованием..

Демистификация рекурсии
КОДЕКС Демистификация рекурсии Упрощенная концепция ошеломляющей О чем весь этот шум? Рекурсия, кажется, единственная тема, от которой у каждого начинающего студента-информатика..