You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用contextlib.redirect_stdout捕获LogisticRegression输出仅获最后一行的问题

问题原因

sklearn的LogisticRegression在设置verbose=1时,训练过程中的Epoch损失日志是输出到**标准错误流(stderr)**而非标准输出流(stdout)的。你之前用的redirect_stdout、sys.stdout操作以及Jupyter的%%capture默认只捕获stdout,自然拿不到完整的训练日志,只能抓到最后一行可能输出到stdout的收敛提示。

解决办法

方法1:捕获stderr流

用contextlib.redirect_stderr来捕获标准错误输出,就能拿到所有训练日志:

from contextlib import redirect_stderr
from sklearn.linear_model import LogisticRegression
import io

log_capture_string = io.StringIO()
model = LogisticRegression(verbose=1, max_iter=100)

with redirect_stderr(log_capture_string):
    model.fit(X_train, y_train)

# 获取完整日志
full_log = log_capture_string.getvalue()
print(full_log)

方法2:同时捕获stdout和stderr(Jupyter环境)

在Jupyter中使用%%capture时,指定同时捕获stdout和stderr:

%%capture captured_output
from sklearn.linear_model import LogisticRegression

model = LogisticRegression(verbose=1, max_iter=100)
model.fit(X_train, y_train)

# 查看完整捕获内容
print(captured_output.stderr)

方法3:手动替换sys.stderr

如果需要更底层的控制,可以直接替换sys.stderr:

import sys
from sklearn.linear_model import LogisticRegression
import io

old_stderr = sys.stderr
sys.stderr = io.StringIO()

model = LogisticRegression(verbose=1, max_iter=100)
model.fit(X_train, y_train)

full_log = sys.stderr.getvalue()
sys.stderr = old_stderr  # 恢复原stderr

print(full_log)

内容的提问来源于stack exchange,提问作者neverreally

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.20 00:42:37