类不平衡数据分类准确率的提升算法smote过采样方法

1.1概述

   传统的分类算法是基于精度驱动的,即算法的目标是最小化分类误差,它假定:假正例(FP)和假负例(FN)错误的代价是相等的。这个假定是基于类平衡分布和相等的错误代价,即数据集中各个类的样本数都很接近。但是实际问题中我们遇到的大部分数据集往往是类不平衡的。例如:在疾病预测的问题中,患病的人数一般远远小于非患病的人数。在一般的分类算法下,往往会忽略小类样本(患病者)所带来的误差,它可能会把所有的样本都预测成非患病者。但是人们关注的重点是患病者的分类结果,类似的还有欺诈信用卡检测等问题。

针对上诉问题,对于类不平衡数据集的分类问题需要寻求一种新的方法加以解决。目前基于提升类不平衡数据集分类的准确率的处理方法分为两种:a)对数据进行预处理进行欠采样或者过采样等处理;b)对算法进行改进,使其对少数类更加敏感。其中欠采样和过采样是常用的两种处理类不平衡数据的方法。欠采样是从多数类样本中随机选择少量样本,再合并原有少量样本作为新的训练数据集。与欠采样相反,过采样是从少数样本中进行随机采样来增加新的样本。但是欠采样的方法只是使用了大类中的一个子集,忽略了数据的有效信息;而过采样通常会带来增加计算量,过拟合等问题

1.2 类不平衡数据smote分类算法

     数据预处理类不平衡数据中最经典的算法是Synthetic Minority Oversampling Technique (smote)算法,smote算法是过采样中比较常用的一种算法。它是对随机过采样方法的一个改进,由于随机过采样方法是直接对少数类重新进行采样,这样会使训练集中有很多重复的样本,容易造成产生的模型过拟合问题。而它是通过在样本与其近邻的连线上随机选一个点作为新样本的方式来增加样本数据量。其合成新少数类样本的算法描述如下:

1).对于少数类中的每一个样本x,计算它到少数类样本集中所有样本的欧氏距离,得到其k近邻。
2).根据样本不平衡比例设置一个采样平衡比例以确定采样倍率N,对于每一个少数类样本,从其k近邻中随机选择若干个样本,假设选择的近邻是。
3).对于每一个随机选出来的近邻,分别与原样本按照如下公式构建新的样本
在这里插入图片描述

   前面我们已经对提升类不平衡数据smote算法进行了介绍,为了了解提升的效果,接下来我们利用sklearn中自带的二分类数据breast_cancer(乳腺癌)数据集作为实验数据分别建立普通决策树分类器模型和经过过采样smote处理过后的决策树模型。

1.3普通决策树分类器与smote模型准确率的比较

1.导入所需模块

from sklearn import tree#导入树模型
from sklearn.model_selection import train_test_split#导入划分训练集和测试集包
from sklearn.datasets import load_breast_cancer#导入乳腺癌数据
import imblearn#导入类不平衡处理库
from imblearn.over_sampling import SMOTE#导入过采样中的smote算法
from collections import Counter
import pandas as pd
df = load_breast_cancer()

2.划分训练集和测试集

Xtrain,Xtest,Ytrain,Ytest = train_test_split(df.data,df.target,test_size = 0.3)#划分训练集和测试集

3.建立决策树模型

clf = tree.DecisionTreeClassifier(criterion= “entropy”)#以信息熵为条件建立树模型
clf = clf.fit(Xtrain,Ytrain)
score = clf.score(Xtest,Ytest)
score
得到的输出结果如下表4-1
表1-1 基于breast_cancer数据集决策树测试集输出准确率
测试集的准确率 0.90

4.查看原始样本标签比例

print(Counter(df.target))#查看标签的比例
表1-2 原始样本标签个数
标签名 1 0
标签个数(个) 357 212
由表1-2输出结果得出,类标签为1的有357个,类标签为0的有212个。

5.通过smote算法合成新的少数类样本

smo = SMOTE(random_state=42)
df.data_smo, df.target_smo = smo.fit_sample(df.data, df.target)
print(Counter(df.target_smo)) #输出新的样本标签比例
表1-3 smote调整后的标签个数
标签名 1 0
标签个数(个) 357 357
通过smote过采样的方法,合成了新的少数类样本,可以得到,该数据两类标签已经平衡了,接下来我们对新的样本划分训练集和测试集并建立决策树如下:
Xtrain,Xtest,Ytrain,Ytest=train_test_split(df.data_smo,df.target_smo,test_size = 0.3)#划分训练集和测试集
clf = tree.DecisionTreeClassifier(criterion= “entropy”)#以信息熵为条件建立树模型
clf = clf.fit(Xtrain,Ytrain)
score = clf.score(Xtest,Ytest)
score
结果smote过采样决策树模型输出结果如下表1-4:
表1-4 smote算法输出测试集的准确率
测试集的准确率 0.95

6.结论

表1-5 breast_cancel数据集中的普通决策树分类器与smote模型准确率的比较
普通决策树分类器 Smote模型
准确率 0.90 0.95
从表1-5的准确率的结果我们可以对比得到,经过smote过采样方法对数据处理后,建立的决策树模型的预测准确率明显的比普通决策树模型提高了许多。 因此过采样处理方法smote算法是具有良好的提升类不平衡数据分类准率。

1.4 小结

提升类不平衡数据集分类的准确率的处理方法分为两种:
1.对数据进行预处理进行欠采样或者过采样等处理;
2.对算法进行改进,使其对少数类更加敏感。
本章主要介绍处理类不平衡数据方法之一的过采样smote算法,方法是增加少数类别的样本,使得样本平衡,其原理是在样本与其近邻的连线上随机选一个点作为新样本的方式来增加样本数据量。实验结果表明通过过采样smote算法处理类不平衡数据提升分类器准确率是有效果的。

©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页