第一部分已经写到这里了,看完第一部分再看这一部分:大数据分析实战-信用卡欺诈检测

文章目录

  • 下采样方案
  • 交叉验证

下采样方案

下采样方案的实现过程比较简单,只需要对正常样本进行采样,得到与异常样本一样多的个数即可,代码如下∶

# 下采样# x是所有的非class行,y是class行,相当于把数据切分成了两部分
x =data.loc[:,data.columns != 'Class']
y =data.loc[:,data.columns == 'Class']# 统计交易异常的列数并取出index
number_records_fraud = len(data[data.Class == 1])
fraud_indices = np.array(data[data.Class == 1].index)#取出来class==1的数据# 正常交易的
normal_indices = data[data.Class == 0].index# 从正常值的索引中,选择和异常值相等个数的样本,保证样本的均衡:
# np.random.choice(a,size, replace, p):在a中以概率p随机选择size个数据,replace是指是否有放回;
random_normal_indices = np.random.choice(normal_indices, number_records_fraud, replace=False)
# 将数据转换成数组:
random_normal_indices = np.array(random_normal_indices)# concatenate:数据库的拼接;axis=1:按照对应行的数据进行拼接;
under_sample_indices = np.concatenate([fraud_indices, random_normal_indices])# loc["a","b"]:表示第a行,第b列;
# iloc[1,1]:按照行列来索引,左式为第二行第二列;
# 获取下标所在行的所有列,即得到训练所需要的数据集:
under_sample_data = data.iloc[under_sample_indices,:]
# 将数据集按照class列进行分类,
x_undersample = under_sample_data.iloc[:, under_sample_data.columns!='Class']
y_undersample = under_sample_data.iloc[:, under_sample_data.columns=='Class']
print("正常 样本所占整体 比 例∶",len(under_sample_data[under_sample_data.Class == 0]) /len(under_sample_data))
print("异常样本所占整体比例∶",len(under_sample_data[under_sample_data.Class == 1]) / len(under_sample_data))
print("下采样策略总体样本数量∶",len(under_sample_data))print(len(under_sample_data))


整体流程比较简单,首先计算异常样本的个数并取其索引,接下来在正常样本中随机选择指定个数样本,最后把所有样本索引拼接在一起即可。上述输出结果显示,执行下采样方案后,一共有984条数据,其中正常样本和异常样本各占 50%,此时数据满足平衡标准。

交叉验证

得到输入数据后,接下来划分数据集,在机器学习中,使用训练集完成建模后,还需要知道这个模型的效果,也就是需要一个测试集,以帮助完成模型测试工作。不仅如此,在整个模型训练过程中,也会涉及一些参数调整,所以,还需要验证集,帮助模型进行参数的调整与选择。突然出现很多种集合,感觉很容易弄混,再来总结一下。

首先把数据分成两部分,左边是训练集,右边是测试集,如图所示。训练集用于建立模型,例如以梯度下降来迭代优化,这里需要的数据就是由训练集提供的。测试集是当所有建模工作都完成后使用的,需要强调一点,测试集十分宝贵,在建模的过程中,不能加入任何与测试集有关的信息,否则就相当于透题,评估结果就不会准确。可以自己设定训练集和测试集的大小和比例,8∶2、9 ∶1都是常见的切分比例。

接下来需要对数据集再进行处理,如图所示,可以发现测试集没有任何变化,仅把训练集划分成很多份。这样做的目的在于,建模尝试过程中,需要调整各种可能影响结果的参数,因此需要知道每一种参数方案的效果,但是这里不能用测试集,因为建模任务还没有全部完成,所以验证集就是在建模过程中评估参数用的,那么单独在训练集中找出来一份做验证集(例如 fold5)不就可以了吗,为什么要划分出来这么多小份呢?

如果只是单独找出来一份,恰好这一份数据比较简单,那么最终的结果可能会偏高;如果选出来的这一份里面有一些错误点或者离群点,得到的结果可能就会偏低。无论哪种情况,评估结果都会出现一定偏差。

为了解决这个问题,可以把训练集切分成多份,例如将训练集分成 10份,如图所示。在验证某一次结果时,需要把整个过程分成 10步,第一步用前9份当作训练集,最后一份当作验证集,得到一个结果,以此类推,每次都依次用另外一份当作验证集,其他部分当作训练集。这样经过10步之后,就得到10个结果,每个结果分别对应其中每一小份,组合在一起恰好包含原始训练集中所有数据,再对最终得到的 10个结果进行平均,就得到最终模型评估的结果。这个过程就叫做交叉验证

交叉验证看起来有些复杂,但是能对模型进行更好的评估,使得结果更准确,从后续的实验中,大家会发现,用不同验证集评估的时候,结果差异很大,所以这个套路是必须要做的。在sklearn工具包中,已经实现好数据集切分的功能,这里需先将数据集划分成训练集和测试集,切分验证集的工作等到建模的时候再做也来得及,代码如下

#划分训练测试集进行交叉检验
from sklearn.model_selection import train_test_split
# 对整个数据集
X_train,X_test,y_train,y_test=train_test_split(x,y,test_size=0.3,random_state=0)
print("Number transactions train dataset: ", len(X_train))
print("Number transactions test dataset: ", len(X_test))
print("Total number of transactions: ", len(X_train)+len(X_test))
# 下采样的数据集进行切分,这里是设的测试集比例为0.3
X_train_undersample, X_test_undersample, y_train_undersample, y_test_undersample = train_test_split(x_undersample,y_undersample,test_size = 0.3,random_state = 0)
print("")
print("Number transactions train dataset: ", len(X_train_undersample))
print("Number transactions test dataset: ", len(X_test_undersample))
print("Total number of transactions: ", len(X_train_undersample)+len(X_test_undersample))

通过输出结果可以发现,在切分数据集时做了两件事∶首先对原始数据集进行划分,然后对下采样数据集进行划分。我们最初的目标不是要用下采样数据集建模吗,为什么又对原始数据进行切分操作呢?这里先留一个伏笔,后续将慢慢揭晓。

大数据分析实战-信用卡欺诈检测(二)-下采样方案和交叉验证相关推荐

  1. 大数据分析实战-信用卡欺诈检测(五)-逻辑回归模型

    大数据分析实战-信用卡欺诈检测(一) 大数据分析实战-信用卡欺诈检测(二)-下采样方案和交叉验证 大数据分析实战-信用卡欺诈检测(三)- 模型评估 大数据分析实战-信用卡欺诈检测(四)-正则化惩罚 逻 ...

  2. 大数据分析实战-信用卡欺诈检测(四)-正则化惩罚

    大数据分析实战-信用卡欺诈检测(一) 大数据分析实战-信用卡欺诈检测(二)-下采样方案和交叉验证 大数据分析实战-信用卡欺诈检测(三)- 模型评估 文章目录 正则化惩罚 正则化惩罚 正则化惩罚,这个名 ...

  3. 大数据分析实战-信用卡欺诈检测(三)- 模型评估

    大数据分析实战-信用卡欺诈检测(二)-下采样方案和交叉验证 大数据分析实战-信用卡欺诈检测(一) 文章目录 模型评估方法 模型评估方法 接下来,没错,还没到实际建模任务,还需要考虑模型的评估方法,为什 ...

  4. 大数据分析实战-信用卡欺诈检测

    文章目录 数据分析与预处理 数据读取与分析 样本不均衡解决方案 特征标准化 数据分析与预处理 假设有一份信用卡交易记录,遗憾的是数据经过了脱敏处理,只知道其特征,却不知道每一个字段代表什么含义,没关系 ...

  5. 机器学习项目实战----信用卡欺诈检测(二)

    六.混淆矩阵: 混淆矩阵是由一个坐标系组成的,有x轴以及y轴,在x轴里面有0和1,在y轴里面有0和1.x轴表达的是预测的值,y轴表达的是真实的值.可以对比真实值与预测值之间的差异,可以计算当前模型衡量 ...

  6. 【机器学习】信用卡欺诈检测 (下采样、SMOTE过采样、集成学习、Pytorch)

    2022.4.17 补充 视频:[参考:6-01 信用卡交易欺诈数据检测 _哔哩哔哩_bilibili] [参考:机器学习/Kaggle/信用卡欺诈检测/Tommy/数据不平衡.ipynb · mya ...

  7. 毕业设计 - 题目:基于大数据的信用卡欺诈检测

    文章目录 0 简介 1 数据集 2 分析流程 3 数据预览 3.1 数据浏览 3.1.1 查看数据分布 4 数据规范化 4.1 amount特征缩放并去除time字段 4.2 解决样本不均衡问题 5 ...

  8. python之逻辑回归项目实战——信用卡欺诈检测

    信用卡欺诈检测 1.项目介绍 2.项目背景 3.分析项目 4.数据读取与分析 4.1 加载数据 4.2 查看数据的标签分布 5.数据预处理 5.1 特征标准化 5.2. 使用下采样解决样本数据不均衡 ...

  9. 机器学习项目实战----信用卡欺诈检测

    一.任务基础 数据集包含由欧洲人于2013年9月使用信用卡进行交易的数据.此数据集显示两天内发生的交易,其中284807笔交易中有492笔被盗刷.数据集非常不平衡,正例(被盗刷)占所有交易的0.172 ...

最新文章

  1. 优质免费在线学习网站【自用】
  2. MongoDB和MySQL的区别
  3. Eclipse 工作目录被破坏,导致Eclipse 打不开
  4. 从完整的新手到通过TensorFlow开发人员证书考试
  5. 第五课 机器学习中的特征工程
  6. linux jar和zip,Linux命令———zip和jar文件压缩解压
  7. 【数据库基础知识】数据库表格——主键和外键
  8. tensorflow 在加载大型的embedding模型参数时,会遇到cannot be larger than 2GB
  9. 什么是TensorBoard?
  10. Android 别踩白块 源码分析
  11. 传海思为 PC 开发 CPU/GPU ;小米将发布第二款 5G 手机;Firefox 68.0.2 发布 | 极客头条...
  12. IS-IS详解(六)——IS-IS LSP机制详解
  13. 油猴脚本(tampermonkey)推荐与下载
  14. leetcode:骑士在棋盘上的概率
  15. asp.net MVC使用 jsQR 扫描二维码
  16. EXCEL对比重复数据
  17. 世界各个国家及其国家代码
  18. 传教士 野人 过河问题
  19. 狂神说Linux笔记
  20. 工业软件国产化路在何方?INTEWELL助力民族工业落地生“根”

热门文章

  1. python中elif可以单独使用吗_python中elif可以单独使用吗
  2. opcua协议服务器端口号,opc ua服务器 数据配置
  3. vmware VCenter6.7以上版本导出ova
  4. java 事件类型_Spring框架中有哪些不同类型的事件?
  5. 线性回归用matlab怎么做,matlab中如何应用regress()函数进行线性回归分析?
  6. jeesite中activiti中的流程表梳理
  7. 6-10 阶乘计算升级版(20 分)
  8. [LeetCode]819. 最常见的单词
  9. 换linux服务器 验证码不显示
  10. mysql5.7.17安装问题