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

如何用Python循环寻找使Class 1.0召回率最高的random_state

寻找使Class 1.0召回率最高的random_state值

你的原代码存在核心问题:模型训练、评估的代码都在for循环外部,实际上只使用了最后一次循环(i=999)的数据集划分,根本没遍历所有random_state值。要实现需求,需把所有逻辑放入循环内,同时记录每次的召回率和对应random_state。

以下是修改后的完整代码:

import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LogisticRegression
from sklearn.metrics import classification_report

# 加载并预处理数据
dataw = pd.read_csv('bankrup.csv')
dataw = dataw.dropna()
X = dataw.values[:, 1:]
y = dataw.values[:, 0]

print("Logistic regression")

# 初始化变量记录最优结果
best_recall = 0.0
best_random_state = 0

# 遍历1000个random_state值
for i in range(1000):
    # 划分数据集
    X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=i)
    
    # 训练模型
    logreg = LogisticRegression(solver='lbfgs', max_iter=5000, class_weight="balanced")
    logreg.fit(X_train, y_train)
    
    # 预测并生成字典格式的分类报告,方便提取指标
    y_pred = logreg.predict(X_test)
    report = classification_report(y_test, y_pred, output_dict=True)
    
    # 提取Class 1.0的召回率
    current_recall = report['1.0']['recall']
    
    # 比较并更新最优结果
    if current_recall > best_recall:
        best_recall = current_recall
        best_random_state = i
    
    # 可选:打印当前循环结果,方便监控
    # print(f"random_state={i}, Class 1.0召回率={current_recall:.4f}")

# 输出最终最优结果
print(f"\n最优random_state值: {best_random_state}")
print(f"对应的Class 1.0最高召回率: {best_recall:.4f}")

关键说明:

  • 将模型训练、预测、评估的所有代码放入for循环内部,确保每个random_state都对应完整的训练-评估流程
  • 使用classification_report(output_dict=True)将报告转为字典,直接通过键值对提取Class 1.0的召回率,避免解析文本的麻烦
  • 初始化best_recall和best_random_state变量,每次循环对比当前召回率,更新最优值
  • 可选的打印语句可帮你监控每个循环的运行情况,调试时实用

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 09:35:07