机器学习入门 04逻辑回归part2——提高逻辑回归模型的召回率

书接上回,上一部分我们学习了逻辑回归基础,将信用卡数据集构建了逻辑回归模型,但是,我们构建的模型还有非常多的地方可以优化,这一篇就来介绍如何提高逻辑回归模型的准确率。

这是之前的银行信用卡数据集,下面是构建最基础的模型代码,接下来我们就需要在这之上进行优化。

复制代码
import pandas as pd
from sklearn.preprocessing import StandardScaler
import matplotlib.pyplot as plt
from pylab import mpl
from sklearn.model_selection import train_test_split
from sklearn import metrics
from sklearn.linear_model import LogisticRegression

data = pd.read_csv("creditcard.csv")

scaler = StandardScaler()
data['Amount'] = scaler.fit_transform(data[['Amount']])
data = data.drop(['Time'], axis=1)

mpl.rcParams['font.sans-serif'] = ['Microsoft YaHei']
mpl.rcParams['axes.unicode_minus'] = False

labels_count = data['Class'].value_counts()
print("正负例样本数量:")
print(labels_count)

plt.title("正负例样本数")
plt.xlabel("类别")
plt.ylabel("频数")
ax = labels_count.plot(kind='bar')
for bar in ax.patches:
    count = int(bar.get_height())
    x = bar.get_x() + bar.get_width() / 2
    y = bar.get_height() + 500
    ax.text(x, y, str(count), ha='center', va='bottom', fontsize=10, fontweight='bold')
plt.tight_layout()
plt.show()

X_whole = data.drop('Class', axis=1)
y_whole = data['Class']

x_train_w, x_test_w, y_train_w, y_test_w = train_test_split(
    X_whole, y_whole, test_size=0.3, random_state=1000
)

lr = LogisticRegression(C=0.01, max_iter=1000)
lr.fit(x_train_w, y_train_w)

test_predicted = lr.predict(x_test_w)
train_predicted = lr.predict(x_train_w)

print("\n测试集准确率:", lr.score(x_test_w, y_test_w))
print("\n训练集分类报告:")
print(metrics.classification_report(y_train_w, train_predicted))
print("\n测试集分类报告:")
print(metrics.classification_report(y_test_w, test_predicted))

1.调整参数C

我们注意到了测试集准确率已经达到了99.9016%了,但是模型的召回率(recall)非常的低,训练集只有0.62,测试集只有0.54,那么我们模型第一步就可以调整模型的参数c,设置不同的参数进行训练,最后找到最合适的参数。

复制代码
scores = []
c_param_range = [0.01, 0.1, 1, 10, 100]

for i in c_param_range:
    lr = LogisticRegression(C=i, penalty='l2', solver='lbfgs', max_iter=1000)
    score = cross_val_score(lr, x_train_w, y_train_w, cv=8, scoring='recall')
    score_mean = sum(score) / len(score)
    scores.append(score_mean)
    print(f"C={i} 时,交叉验证召回率均值:{score_mean:.4f}")

best_c = c_param_range[scores.index(max(scores))]
print(f"\n最优C值为:{best_c}")

这里我们可以看到,当参数C为1时,我们模型的召回率最高,但是这个模型的召回率还是非常低。那么我们下一步怎么办?

2.调整数据不平衡

由上图我们可以直观的看出,这个数据非常的不平衡,标签为0的样本有28万条,而标签为1的只有492条,如此悬殊的差距导致我们模型的召回率非常的不理想。

所以我们可以通过下采样法将数据平衡

由此可以看出模型通过下采样将数据平衡以后,模型的召回率一下子从0.6提高到0.9,如此所构建的模型才算是构建的比较成功。

日记

2月6日,星期五

我可真是天才

今天下午有人问我:电脑上面下载的MP3音频到u盘上,在音响里面就放不出来了

那肯定要去问万能的豆包了。

然后我看了一下音频属性,果然格式不对。

然后就是将音频格式更改过来

果然,改完格式以后马上就能在放广场舞的音响上面放了。

我果然是天才。

顺带一提,下载的格式工厂这个就是个流氓,我突然桌面莫名其妙的多了一个桌面优化大师,但是我是什么人,直接给你注册表都删的干干净净,骨灰都不剩。

相关推荐
对讲机数码科普12 分钟前
黑龙江应急救援单工通信保障方案设计与实战应用
大数据·网络·人工智能
SuperHeroWu715 分钟前
【HarmonyOS AI】DevEco CLI、Skills、知识库运用AI Coding提效详解
人工智能·华为·harmonyos
Old Uncle Tom16 分钟前
银行用户画像 -- 金融目标与需求意图
前端·人工智能·金融
码农学院19 分钟前
AIO与GEO融合趋势:从内容生成到智能搜索优化的技术演进
人工智能
半亩码田20 分钟前
【.NET新特性·第8篇】.NET 9 AI 构建基块:Microsoft.Extensions.AI
人工智能·microsoft·.net
IT_陈寒22 分钟前
Vue的响应式让我加班到凌晨3点,原来问题出在这
前端·人工智能·后端
东方小月22 分钟前
从0开发一个 Coding Agent(一):前言
前端·人工智能·typescript
自学小白菜22 分钟前
关于提升机器学习算法做预测回归任务精度的方法分享
算法·机器学习·回归·提升精度
ZENERGY-众壹24 分钟前
AI 诊断光伏组件热斑:从 10% 功率偏差到深度学习建模的实战复盘
人工智能·深度学习·光伏运维·逆变器api·能源数字化
中微极客25 分钟前
2026 RAG框架横评:LlamaIndex凭检索称霸
人工智能