Python K 折交叉验证:逻辑回归模型参数调优与召回率评估

本文介绍了如何使用 Python 的 K 折交叉验证技术来评估逻辑回归模型在不同正则化参数下的性能,并使用召回率作为评估指标。代码示例展示了如何使用 sklearn 库中的 KFold 和 LogisticRegression 类进行模型训练和参数调优。

def printing_kfold_scores(X_train_data, y_train_data):
    fold = KFold(5, shuffle=False)
    c_param_range = [0.01, 0.1, 1, 10, 100]
    results_table = pd.DataFrame(index=range(len(c_param_range)), columns=['C_parameter', 'Mean recall score'])
    results_table['C_parameter'] = c_param_range
    recall_accs = []  # 外部定义
    j = 0
    for c_param in c_param_range:
        print('-----------------------------------')
        print('正则化惩罚力度:', c_param)
        print('-----------------------------------')
        print('')
        recall_accs = []  # 内部定义
        for iteration, indices in enumerate(fold.split(X_train_data), start=1):
            lr = LogisticRegression(C=c_param, penalty='l1', solver='liblinear')
            lr.fit(X_train_data.iloc[indices[0],], y_train_data.iloc[indices[0],].values.ravel())
            y_pred_undersample = lr.predict(X_train_data.iloc[indices[1],].values)
            recall_acc = recall_score(y_train_data.iloc[indices[1],].values, y_pred_undersample)
            recall_accs.append(recall_acc)
            print('Iteration', iteration, ': 召回率 = ', recall_acc)
        mean_recall_acc = np.mean(recall_accs)  # 计算平均召回率
        results_table.loc[j, 'Mean recall score'] = mean_recall_acc
        j += 1
        print('')
        print('平均召回率', mean_recall_acc)
        print('')
    print('**********************************************************')
    print('效果最好的模型所选参数 = ', results_table.loc[results_table['Mean recall score'].astype('float').idxmax()]['C_parameter'])
    print(results_table)
    return results_table.loc[results_table['Mean recall score'].astype('float').idxmax()]['C_parameter']

## indices 的维度

`indices` 是一个二维数组,第一维表示当前折叠 (fold) 的编号,第二维表示该折叠中的训练数据和测试数据在原始数据集中的索引位置。

* `indices[0]` 表示该折叠中的训练数据索引。
* `indices[1]` 表示该折叠中的测试数据索引。

例如,`indices[0]` 可能包含一个列表,其中包含第一个折叠中所有训练数据的索引。`indices[1]` 则包含第一个折叠中所有测试数据的索引。

## 如何使用该函数

1. 导入必要的库,例如 `sklearn`, `pandas` 和 `numpy`。
2. 准备好训练数据 `X_train_data` 和标签 `y_train_data`。
3. 调用 `printing_kfold_scores` 函数,将 `X_train_data` 和 `y_train_data` 作为参数传递。
4. 函数会输出一个表格,显示不同正则化参数下的平均召回率。
5. 函数会返回效果最好的模型所选择的正则化参数。

## 总结

通过 K 折交叉验证,我们可以评估不同正则化参数下的模型性能,并选择效果最佳的参数。这有助于我们训练出更准确、更稳定的逻辑回归模型。

原文地址: https://www.cveoy.top/t/topic/nV07 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录