机器学习入门 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盘上,在音响里面就放不出来了

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

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

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

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

我果然是天才。

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

相关推荐
阿里云大数据AI技术几秒前
在 EMR Serverless Spark 的 Ray 作业中使用 Checkpoint 断点续跑
人工智能·spark
慢云智慧空间28 分钟前
从智能终端到空间AI,慢云科技如何重新定义智慧人居?
人工智能·python·科技
for_ever_love__29 分钟前
LangChain SelfQueryRetriever:让模型自己写过滤条件
人工智能·语言模型·langchain·nlp·全文检索·元数据查询·自查询检索
天天代码码天天30 分钟前
让照片动起来:LivePortrait 人像精简版分享,解压即可使用
人工智能
李福春31 分钟前
斗破Google ADK Java苍穹-第5境斗灵-凝物通脉-Context与State
java·开发语言·人工智能·java-ee·google adk·深圳同盟·腾讯云架构师技术同盟
u13013033 分钟前
GitHub 热榜项目:周榜(2026-10-11)
人工智能·驱动开发·github
空 白II36 分钟前
10.11 大语言模型研究简报:Anthropic 披露 Claude Agent 四类越权失序行为
人工智能·语言模型·自然语言处理
具身AGI37 分钟前
世界模型改当裁判,物理AI 物理推理 做判据
人工智能·深度学习·机器学习
狂奔蜗牛(bradley)40 分钟前
EtherCAT 主站拓扑判定的三级防护:从去抖到振荡检测
人工智能·嵌入式硬件·fpga开发·架构
XMAIPC_Robot41 分钟前
工商业储能EMS边缘计算:本地AI负荷预测,彻底摆脱云端依赖
人工智能·fpga开发·机器人·边缘计算·arm+fpga·rk3588+fpga