Вопрос или проблема
Я использовал 3 функции из scipy: TFIDF векторизатор, Мультивыходной классификатор и Линейный SVC.
Код выглядит так.
pipe_lr1 = Pipeline(steps=[('cv',TfidfVectorizer()), ('lr_multi',MultiOutputClassifier(LinearSVC()))])
Как я могу распечатать значения на каждом шаге функции, чтобы увидеть
- Каков был вывод TFIDF векторизатора?
- Каков был вывод Линейного SVC?
- Какие данные выходили из MultioutputClassifier(X)?
Вы можете получить доступ к ним, используя следующий код. Делайте то, что вы обычно делаете, не используя конвейер.
pipe_lr1.named_steps["cv"]
pipe_lr1.named_steps["lr_multi"]
.
Ответ или решение
Чтобы вывести данные после подгонки данных в пайплайн с использованием функции Pipeline
из библиотеки scikit-learn
, необходимо изучить, как можно получить результаты на каждом этапе процесса. В данном случае вы используете такие компоненты, как TfidfVectorizer
, MultiOutputClassifier
и LinearSVC
.
Шаги для извлечения промежуточных результатов
-
Подгонка данных в пайплайне:
Прежде всего, вы должны подогнать данные к вашему пайплайну. Для этого используйте методfit()
на вашем объектеpipe_lr1
. Например:pipe_lr1.fit(X_train, y_train)
Здесь
X_train
– это входные данные, аy_train
– целевые переменные. -
Доступ к промежуточным шагам пайплайна:
После выполненияfit()
вы можете получить доступ к каждому из шагов пайплайна, чтобы извлечь их результаты. Для этого можно использовать именованные шаги.vectorizer = pipe_lr1.named_steps["cv"] # TfidfVectorizer multi_output_classifier = pipe_lr1.named_steps["lr_multi"] # MultiOutputClassifier
-
Вывод результатов TFIDF Vectorizer:
Чтобы вывести результат работыTfidfVectorizer
, воспользуйтесь методомtransform()
на вашем объекте векторизатора:tfidf_output = vectorizer.transform(X_train) print("Вывод TFIDF векторизатора:\n", tfidf_output.toarray()) # Преобразуем в массив для более удобного вывода
-
Вывод данных из MultiOutputClassifier:
Для извлечения данных изMultiOutputClassifier
сначала примените методpredict()
:multi_output_predictions = multi_output_classifier.fit(vectorizer.transform(X_train), y_train).predict(vectorizer.transform(X_train)) print("Выходные данные MultiOutputClassifier:\n", multi_output_predictions)
-
Вывод результатов Linear SVC:
Чтобы получить доступ к выходным даннымLinearSVC
, можно получить доступ к каждому классификатору вMultiOutputClassifier
:for i, svc in enumerate(multi_output_classifier.estimators_): svc_output = svc.predict(vectorizer.transform(X_train)) print(f"Выходные данные Linear SVC для задачи {i+1}:\n", svc_output)
Пример полного кода
Ниже приведен объединенный фрагмент кода, который включает все вышеперечисленные шаги:
from sklearn.pipeline import Pipeline
from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.multioutput import MultiOutputClassifier
from sklearn.svm import LinearSVC
# Предполагаем, что X_train и y_train уже определены
pipe_lr1 = Pipeline(steps=[('cv', TfidfVectorizer()), ('lr_multi', MultiOutputClassifier(LinearSVC()))])
# Подгоняем модель
pipe_lr1.fit(X_train, y_train)
# Данные из TFIDF
tfidf_output = pipe_lr1.named_steps["cv"].transform(X_train)
print("Вывод TFIDF векторизатора:\n", tfidf_output.toarray())
# Прогнозы MultiOutputClassifier
multi_output_predictions = pipe_lr1.named_steps["lr_multi"].fit(tfidf_output, y_train).predict(tfidf_output)
print("Выходные данные MultiOutputClassifier:\n", multi_output_predictions)
# Выходные данные Linear SVC для каждой задачи
for i, svc in enumerate(pipe_lr1.named_steps["lr_multi"].estimators_):
svc_output = svc.predict(tfidf_output)
print(f"Выходные данные Linear SVC для задачи {i + 1}:\n", svc_output)
Заключение
Следуя вышеуказанным шагам, вы сможете легко и точно получить доступ к промежуточным данным на каждом этапе работы с вашим пайплайном в scikit-learn
. Обязательно проверяйте результаты и корректируйте обработку данных на каждом этапе, чтобы достичь наилучших результатов в вашей задаче машинного обучения.