机器学习分类问题(信用卡案例)

本文通过一个信用卡欺诈案例,介绍了数据预处理、特征提取和模型构建的过程。数据预处理包括数据归一化和处理不均衡问题,特征提取涉及相关性分析和异常值处理。模型构建中探讨了逻辑回归算法,以及处理不均衡数据的undersampling和oversampling方法。此外,还提到了降维算法如t-SNE、PCA和SVD。
摘要由CSDN通过智能技术生成

目录

一、数据描述性展示与数据预处理

数据归一化(标准化)处理

 数据不均衡问题处理

二、 数据特征提取

三、数据分类


数据来源于kaggle 

分析中使用的相关算法:逻辑回归分析算法

分析目的:检测出其中的欺诈数据

一、数据描述性展示与数据预处理

这一步一般是了解数据的基本情况,以便后续对数据进行深入的挖掘:

#首先是读取原始数据,一般使用的是pandas
import pandas as pd 

data = pd.read_csv('creditcard.csv') #如果数据不在当前目录下面,需要写上路径‘../input/creditcard.csv’

data.head() #展示数据前5行,可以了解数据的大致情况,如有多少列、每列的数据大致的样子等

data.columns #数据列

data.describe() #count/mean/std/min/25%/50%/75%/max

data.isnull().sum().max() #查看是否有空值,有缺失值一般就使用均值等进行填充如data.fillna(data.mean())  

这个信用卡的样本数据,没有缺失值,数据还是比较干净的

看看样本数据中标签值的情况(本样本数据中是信用卡欺诈/未欺诈)

print('No Frauds',round(data['Class'].value_counts()[0]/len(data)*100,2),'% of the dataset')#打印未欺诈数据占比
print('Frauds',round(data['Class'].value_counts()[1]/len(data)*100,2),'% of the dataset')#打印欺诈数据占比
out[1]
No Frauds 99.83 % of the dataset
Frauds 0.17 % of the dataset


data['Class'].value_counts()
out[2]
0    284315
1       492
Name: Class, dtype: int64

展示标签值

import seaborn as sns
import matplotlib.pyplot as plt
colors = ['r','b']
sns.countplot('Class',data=data,palette=colors)
plt.title('Class Distributions \n(0:No Fraud || 1:Fraud)',fontsize=14)
plt.xlabel("Class")
plt.ylabel("Frequency")

 

数据归一化(标准化)处理

这是一个不均衡数据集,需要对数据进行均衡处理,在处理不均衡数据之前,如果数据之间的量级比较大,就需要对数据进行归一化处理。

  • 作用:

1、将数据映射到指定范围,通常是映射到-1~1或者0~1之间;

2、把有量钢的表达式变成无量钢表达式,便于不同单位或量级的指标能够进行比较和加权;

  • 常用方法:

1、Min-Max归一化

x_{new} = \frac{x-x_{min}}{x_{max}-{x_{min}}}

2、Z-Score标准化

x_{new}=\frac{x-\mu }{\delta }

即减去均值除以方差,将原数据转换为符合均值为0,标准差为1 的标准正太分布的新数据。

作用:

1)可以提升模型的收敛速度(加快梯度下降的求解速度);

2)提高模型的精度(消除量级和量钢的影响);

3)简化计算

以上两种方法的性质和如何选择

性质:归一化/标准化实质是一种先行变换,线性变换不会改变原始数据的数值排序,这样数据在改变之后不会造成“失效”,反而可以提高数据的表现;

怎么选择:如果单纯想实现消除量级和量钢的影响,在数据的分布本身就服从正态分布或者有离群值时使用Z-Score 方法。因为min-max方法对离群值十分敏感。

3、Robust标准化

虽然Z-sore 可以处理数据中有离群值的情况,但是效果不是很好,所以一般在实际工作中会使用Robust标准化方法

This Scaler removes the median and scales the data according to the quantile range

四分位距离,即排除outliers

在该样本中我们发现给出的有列名的字段['Time'] ['Amount'] 数据之间的差距较大,需要对其做归一化处理

from sklearn.preprocessing import StandardScaler #导入包
data['standard_amount']=StandardScaler().fit_transform(data['Amount'].values.reshape(-1,1)) #将数据归一化为[-1,1]之间的数
data['standard_Time'] = StandardScaler().fit_transform(data['Time'].values.reshape(-1,1))
data.drop(['Time','Amount'],axis=1,inplace=True) #删除原来的数据
data.head()

训练与测试数据划分

from sklearn.model_selection import StratifiedKFold

x=data.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

是鱼儿啊~

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值