《机器学习》——逻辑回归(过采样)

server/2025/1/6 7:19:55/

文章目录

    • 什么是逻辑回归和过采样?
    • 实例
        • 1、实例内容
        • 2、步骤

什么是逻辑回归和过采样?

  • 逻辑回归是一种用于二分类(有时也用于多分类)问题的统计模型。它通过将线性组合的输入变量经过一个逻辑函数(如 sigmoid 函数)来预测事件发生的概率。然而,在实际数据集中,经常会遇到类别不平衡的问题,即不同类别的样本数量差异较大。例如,在一个疾病诊断数据集中,患病的人数可能远远少于未患病的人数。
    在这里插入图片描述
  • 过采样
    在这里插入图片描述
    在这里插入图片描述
    主要意思就是将样本不平衡的样本比例,通过过采样增加样本使其变的平衡。

实例

让我们通过实例,来介绍过采样。

1、实例内容

本次实例是对银行的数据进行分类的问题,数据部分内容为
在这里插入图片描述

共有28万多条数据。其中Time为无关特征,class为分类特征有两个分类分别为0、1,其余全部为特征变量。如图看看出Amount里的数据与其他特征的数据有区别,故此数据处理中要对Amount进行z标准化处理。

2、步骤
  • 导入数据
data = pd.read_csv('creditcard.csv', encoding='utf8', engine='python')
  • 数据处理和划分
from sklearn.preprocessing import StandardScaler
# z标准化
scaler = StandardScaler()
a = data[['Amount']]
data['Amount'] = scaler.fit_transform(data[['Amount']])data = data.drop(['Time'], axis=1)from sklearn.model_selection import train_test_splitx_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.2, random_state=0)
  • 过采样处理并再次划分数据,画图查看
from imblearn.over_sampling import SMOTEoversampler = SMOTE(random_state=0)
os_x_train, os_y_train = oversampler.fit_resample(x_train_w, y_train_w)mpl.rcParams['font.sans-serif']=['Microsoft YaHei']
mpl.rcParams['axes.unicode_minus']=False
labels_count = pd.value_counts(os_y_train)
plt.title('正负例样本数')
plt.xlabel('类别')
plt.ylabel('频数')
labels_count.plot(kind='bar')
plt.show()os_x_train_w, os_x_test_w, os_y_train_w, os_y_test_w = \train_test_split(os_x_train, os_y_train, test_size=0.2, random_state=0)
  • 挑选最优惩罚因子
from sklearn.linear_model import LogisticRegression
from sklearn.model_selection import cross_val_scorescores = []
c_param_range = [0.01, 0.1, 1, 10, 100]
z = 1
for i in c_param_range:start_time = time.time()lr = LogisticRegression(C=i, penalty='l2', solver='lbfgs', max_iter=1000)score = cross_val_score(lr, os_x_train, os_y_train, cv=5, scoring='recall')score_mean = sum(score) / len(score)scores.append(score_mean)end_time = time.time()print(f'第{z}次。。。。')print('time spend:{:.2f}'.format(end_time - start_time))print(f'recall:{score_mean}')z += 1
best_c = c_param_range[np.argmax(scores)]
print("最优惩罚因子为:{}".format(best_c))

在这里插入图片描述

  • 训练模型
lr = LogisticRegression(C=best_c,penalty='l2',solver='lbfgs',max_iter=1000)
lr.fit(os_x_train_w,os_y_train_w)
  • 测试模型并评估模型性能
train_predicted =lr.predict(os_x_test_w)
print(metrics.classification_report(os_y_test_w,train_predicted))train_predicted =lr.predict(x_test_w)
print(metrics.classification_report(y_test_w,train_predicted))

在这里插入图片描述
因为银行主要观察特征为1的人,宁愿原本为0的预测为1,也不愿判断错一个1的样本。故主要看召回率,从测试结果可以看出准确率还是挺高的,也没有产生过拟合和欠拟合。


http://www.ppmy.cn/server/155738.html

相关文章

图数据库 | 17、高可用分布式设计(上)

我们在前面的文章中,探索了多种可能的系统扩展方式,以及每种扩展方式的优劣。 本篇文章将通过具体的架构设计方案来对每一种方案的设计、投入产出比、各项指标与功能,以及孰优孰劣等进行评价。 在设计高性能、高可用图数据库的时候&#xf…

基于Java+SQL Server实现的(GUI)会展中心管理系统

基于java实现的会展中心管理系统 1 系统设计 1.1设计目标 在学习了数据库原理和SQL Server 2008数据库管理系统后,采用Java编程语言开发工具,设计并实现会展中心管理系统。 本课程的目的是培养学生数据库技术的综合应用能力,通过设计开发…

Redis Hash哈希

个人主页:C忠实粉丝 欢迎 点赞👍 收藏✨ 留言✉ 加关注💓本文由 C忠实粉丝 原创 Redis Hash哈希 收录于专栏[redis] 本专栏旨在分享学习Redis的一点学习笔记,欢迎大家在评论区交流讨论💌 目录 概述 常见命令 HSET …

TinaCMS: 革命性的开源内容管理框架

在如今的数字时代,高效的内容管理系统(CMS)已成为构建内容丰富网站和应用程序的必需品。传统 CMS,如 WordPress 和 Drupal,功能丰富但复杂度高。而新一代 CMS,例如 TinaCMS,以其灵活性和开发者友…

Web3对跨境支付系统的潜在影响与发展前景

近年来,Web3技术凭借其去中心化和开放性的特点,逐渐受到各界关注。跨境支付系统作为全球化的重要桥梁,其发展正面临效率、透明性和互操作性等方面的挑战。而Web3的引入为跨境支付系统的优化提供了全新思路。本文将探讨Web3在这一领域的潜在影…

面向实习的Golang服务端技能分析

背景: 这个文章就当总纲看吧,没什么内容,大概是我的一个学习计划 首先,该文章是我希望大二暑期能够找到Go后端开发岗位实习机会,结合boss、2024版go学习路线以及我一个go萌新的现有技能做出的大约四个月时间掌握开发…

题海拾贝:[USACO3.4] 美国血统AmericanHeritage(求先序排列问题)

Hello大家好&#xff01;很高兴我们又见面啦&#xff01;给生活添点passion&#xff0c;开始今天的编程之路&#xff01; 我的博客&#xff1a;<但凡. 我的专栏&#xff1a;《编程之路》、《数据结构与算法之美》、《题海拾贝》 欢迎点赞&#xff0c;关注&#xff01; 1、求…

植物活性长末端重复序列反转录转座子研究进展-文献精读95

Plant active LTR retrotransposons: a review 植物活性长末端重复序列反转录转座子研究进展 摘要 长末端重复序列 (Long terminal repeat&#xff0c;LTR) 反转录转座子是真核生物基因组中普遍存在的一类可移动的DNA序列&#xff0c;它们以RNA为媒介&#xff0c;通过“复制粘…