电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

您的位置:首頁技術文章
文章詳情頁

如何用 Python 處理不平衡數據集

瀏覽:117日期:2022-06-30 14:28:23
1. 什么是數據不平衡

所謂的數據不平衡(imbalanced data)是指數據集中各個類別的數量分布不均衡;不平衡數據在現實任務中十分的常見。如

信用卡欺詐數據:99%都是正常的數據, 1%是欺詐數據 貸款逾期數據

不平衡數據一般是由于數據產生的原因導致的,類別少的樣本通常是發生的頻率低,需要很長的周期進行采集。

在機器學習任務(如分類問題)中,不平衡數據會導致訓練的模型預測的結果會偏向于樣本數量多的類別,這個時候除了要選擇合適的評估指標外,想要提升模型的性能,就要對數據和模型做一些預處理。

處理數據不平衡的主要方法:

欠采樣 過采樣 綜合采樣 模型集成

調整類別權重或者樣本權重

2. 數據不平衡處理方法

imbalanced-learn庫提供了許多不平衡數據處理的方法,本文的例子都以imbalanced-learn庫來實現。

pip install -U imbalanced-learn

https://github.com/scikit-learn-contrib/imbalanced-learn

本文例子的數據來自進行中的比賽山東省第二屆數據應用創新創業大賽-日照分賽場-公積金貸款逾期預測

先來看下數據

import pandas as pdtrain_data = ’./data/train.csv’test_data = ’./data/test.csv’train_df = pd.read_csv(train_data)test_df = pd.read_csv(test_data)print(train_df.groupby([’label’]).size())# label為是否違約, 1為違約, 0為非違約# label# 0 37243# 1 2757

如何用 Python 處理不平衡數據集

2.1 欠采樣

所謂欠采樣,就是將數量多類別(記為majority)的樣本進行抽樣,使之數量與數量少的類別(minority)的數量相當,以此達到數量的平衡。

如何用 Python 處理不平衡數據集

由于欠采樣是丟失了一部分數據,不可避免的使得數量多類別樣本的分布發生了變化(方差變大)。好的欠采樣策略應該盡可能保持原有數據分布。

欠采樣是刪除majority的樣本,那哪些樣本可以刪除呢?

一種是overlapping的數據,就是多余的數據 一種是干擾的數據,干擾minority的分布

基于此,有兩種思路來欠采樣

邊界相鄰匹配,考慮在近鄰空間內刪除majority樣本,方法如TomekLinks, NearMiss

下面這張圖,展示6NN(6個最近鄰居)

如何用 Python 處理不平衡數據集

這里重點講下TomekLinks, TomekLinks方法簡單的說:對每一個minority樣本找1NN(最近的鄰居),如果最近的鄰居是majority, 就形成一個tome-links,該方法人為這個majority是干擾的,將它刪除。

如何用 Python 處理不平衡數據集

from imblearn.under_sampling import TomekLinksX_train = train_df.drop([’id’, ’type’], axis=1)y = train_df[’label’]tl = TomekLinks()X_us, y_us = tl.fit_sample(X_train, y)print(X_us.groupby([’label’]).size())# label# 0 36069# 1 2757

從上可知, 有1174個tomek-link被刪除,好像刪除還不夠多,可以測試下是否對分類結果有幫助。需要注意的因為需要計算最近鄰,所以樣本屬性必須數值屬性,或者可以轉化為數值屬性。

聚類

這類方法通過多個聚類,把原始樣本劃分成多個聚類簇,然后用每個聚類簇的中心來代替這個聚類簇的特性,完成采樣的目的。可知,這種采樣的樣本不是來自原始樣本集,而是聚類生成的。

from imblearn.under_sampling import ClusterCentroids cc = ClusterCentroids(random_state=42)X_res, y_res = cc.fit_resample(X_train, y)X_res.groupby([’label’]).size()# label# 0 2757# 1 2757

im-balance提供的欠采樣的方法如下:

Random majority under-sampling with replacement Extraction of majority-minority Tomek links Under-sampling with Cluster Centroids NearMiss-(1 & 2 & 3) Condensed Nearest Neighbour One-Sided Selection Neighboorhood Cleaning Rule Edited Nearest Neighbours Instance Hardness Threshold Repeated Edited Nearest Neighbours AllKNN 2.2 過采樣

所謂過采樣,就是將數量少的類別(minority)的樣本進行copy,使之數量與數量多的類別(majortity)的數量相當,以此達到數量的平衡。由于復制了多份minoruty樣本,過采樣會改變minority方差。

如何用 Python 處理不平衡數據集

過采樣一種簡單的方式是隨機copy minority的樣本;另外一種是根據現有樣本生成人造樣本。這里介紹人造樣本的經典算法SMOTE(Synthetic Minority Over-sampling Technique)。

SMOTE基于minority樣本相似的特征空間構造新的人工樣本。步驟如下:

選擇一個minority樣本,計算其KNN鄰居 在K個鄰居中,隨機選擇一個近鄰 修改某一個特征,偏移一定的大小:偏移的大小為該minority樣本與該近鄰差距乘以一個小的隨機比率(0, 1), 就此生成新樣本

如何用 Python 處理不平衡數據集

from imblearn.over_sampling import SMOTEsmote = SMOTE(k_neighbors=5, random_state=42)X_res, y_res = smote.fit_resample(X_train, y)X_res.groupby([’label’]).size()# label# 0 37243# 1 37243

對于SMOTE方法,對每一個minority都會構造新樣本。但是并不總是這樣的,考慮下面A,B,C三個點。從數據分布來看,C點很可能是一個異常點(Noise),B點是正常分布的點(SAFE),而A點分布在邊界位置(DANGER);

直觀上,對于C點我們不應該去構造新樣本,對B點,構造新樣本不會豐富minority類別的分布。只有A點,如果構造新樣本能夠使得A點從(DANGER)到(SAFE),加強minority類別的分類邊界。這個就是Borderline-SMOTE

如何用 Python 處理不平衡數據集

from imblearn.over_sampling import BorderlineSMOTEbsmote = BorderlineSMOTE(k_neighbors=5, random_state=42)X_res, y_res = bsmote.fit_resample(X_train, y)X_res.groupby([’label’]).size()# label# 0 37243# 1 37243

ADASYN方法從保持樣本分布的角度來確定生成數據,生成數據的方式和SMOTE是一樣的,不同在于每個minortiy樣本生成樣本的數量不同。

先確定要生成樣本的數量 beta為[0, 1]

如何用 Python 處理不平衡數據集

對每個每個minortiy樣本,確定有它生成樣本的比例。先找出K最近鄰,計算K最近鄰中屬于majority的樣本比例(即分子),Z是歸一化因子,保證所有的minortiry的比例和為1,可以認為是所有分子的和。

如何用 Python 處理不平衡數據集

計算每個minortiy生成新樣本的數量

如何用 Python 處理不平衡數據集

按照SMOTE方式生成樣本

from imblearn.over_sampling import ADASYN adasyn = ADASYN(n_neighbors=5, random_state=42)X_res, y_res = adasyn.fit_resample(X_train, y)X_res.groupby([’label’]).size()# label# 0 37243# 1 36690

im-balance提供的過采樣的方法如下(包括SMOTE算法的變種):

Random minority over-sampling with replacement SMOTE - Synthetic Minority Over-sampling Technique SMOTENC - SMOTE for Nominal Continuous bSMOTE(1 & 2) - Borderline SMOTE of types 1 and 2 SVM SMOTE - Support Vectors SMOTE ADASYN - Adaptive synthetic sampling approach for imbalanced learning KMeans-SMOTE ROSE - Random OverSampling Examples 2.3 綜合采樣

過采樣是針對minority樣本,欠采樣是針對majority樣本;而綜合采樣是既對minority樣本,又對majority樣本,同時進行操作的方法。主要有SMOTE+Tomek-links和SMOTE+Edited Nearest Neighbours。

綜合采樣的方法,是先進行過采樣,在進行欠采樣。

from imblearn.combine import SMOTETomeksmote_tomek = SMOTETomek(random_state=0)X_res, y_res = smote_tomek.fit_sample(X_train, y)X_res.groupby([’label’]).size()# label# 0 36260# 1 362602.4 模型集成

這里的模型集成主要體現在數據上,即用眾多平衡的數據集(majortiry的樣本進行欠采樣加上minority樣本)訓練多個模型,然后進行集成。imblearn.ensemble提供幾種常見的模型集成算法,如BalancedRandomForestClassifier

from imblearn.ensemble import BalancedRandomForestClassifierfrom sklearn.datasets import make_classificationX, y = make_classification(n_samples=1000, n_classes=3, n_informative=4, weights=[0.2, 0.3, 0.5], random_state=0)clf = BalancedRandomForestClassifier(max_depth=2, random_state=0)clf.fit(X, y) print(clf.feature_importances_) print(clf.predict([[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]]))

im-balance提供的模型集成的方法如下

Easy Ensemble classifier Balanced Random Forest Balanced Bagging RUSBoost2.5 調整類別權重或者樣本權重

對于很多用梯度下降方法來學習(使得某個損失Loss最小)的機器學習的方法,可以通過調整類別權重或樣本權重的方式,來一定程度上平衡不平衡數據。如gbdt模型lightgbm 中 class_weight

import lightgbm as lgbclf = lgb.LGBMRegressor(num_leaves=31, min_child_samples= np.random.randint(20,25),max_depth=25,learning_rate=0.1, class_weight={0:1, 1:10},n_estimators=500, n_jobs=30)3. 總結

本文分享了常見的幾種處理不平衡數據集的方法,并且提供imbalanced-learn的簡單例子。總結如下:

欠采樣: 減少majoritry樣本 過采樣:增加minority樣本 綜合采樣:先過采樣,在欠采樣 模型集成:制造平衡數據(majoritry樣本欠采樣+minority樣本),多次不同的欠采樣,訓練不同的模型,然后融合 不管是欠采樣和過采樣,都一定程度的改變了原始數據的分布,可能造成模型過擬合。需要去嘗試哪種方法,符合實際的數據分布。當然不一定有效果,去勇敢嘗試吧 just do it! 4. 參考資料 Learning from Imbalanced Data Two Modifications of CNN(Tomek links,CNN乍一看還以為卷積神經網絡,其實是condensed nearest-neighbor) imbalanced-learn API:https://imbalanced-learn.org/stable/

以上就是如何用 Python 處理不平衡數據集的詳細內容,更多關于Python 處理不平衡數據集的資料請關注好吧啦網其它相關文章!

標簽: Python 編程
相關文章:
主站蜘蛛池模板: 商标转让-购买商标专业|放心的商标交易网-蜀易标商标网 | arch电源_SINPRO_开关电源_模块电源_医疗电源-东佑源 | 交变/复合盐雾试验箱-高低温冲击试验箱_安奈设备产品供应杭州/江苏南京/安徽马鞍山合肥等全国各地 | 深圳宣传片制作_产品视频制作_深圳3D动画制作公司_深圳短视频拍摄-深圳市西典映画传媒有限公司 | 热熔胶网膜|pes热熔网膜价格|eva热熔胶膜|热熔胶膜|tpu热熔胶膜厂家-苏州惠洋胶粘制品有限公司 | 美能达分光测色仪_爱色丽分光测色仪-苏州方特电子科技有限公司 | 玉米深加工设备|玉米加工机械|玉米加工设备|玉米深加工机械-河南成立粮油机械有限公司 | 洛阳网站建设_洛阳网站优化_网站建设平台_洛阳香河网络科技有限公司 | 高压绝缘垫-红色配电房绝缘垫-绿色高压绝缘地毯-上海苏海电气 | 美的商用净水器_美的直饮机_一级代理经销商_Midea租赁价格-厂家反渗透滤芯-直饮水批发品牌售后 | 细砂提取机,隔膜板框泥浆污泥压滤机,螺旋洗砂机设备,轮式洗砂机械,机制砂,圆锥颚式反击式破碎机,振动筛,滚筒筛,喂料机- 上海重睿环保设备有限公司 | 长江船运_国内海运_内贸船运_大件海运|运输_船舶运输价格_钢材船运_内河运输_风电甲板船_游艇运输_航运货代电话_上海交航船运 | 气弹簧定制-气动杆-可控气弹簧-不锈钢阻尼器-工业气弹簧-可调节气弹簧厂家-常州巨腾气弹簧供应商 | 微波消解仪器_智能微波消解仪报价_高压微波消解仪厂家_那艾 | 保定市泰宏机械制造厂-河北铸件厂-铸造厂-铸件加工-河北大件加工 | 佛山商标注册_商标注册代理|专利注册申请_商标注册公司_鸿邦知识产权 | 橡胶接头|可曲挠橡胶接头|橡胶软接头安装使用教程-上海松夏官方网站 | 「阿尔法设计官网」工业设计_产品设计_产品外观设计 深圳工业设计公司 | 四川职高信息网-初高中、大专、职业技术学校招生信息网 | 丽陂特官网_手机信号屏蔽器_Wifi信号干扰器厂家_学校考场工厂会议室屏蔽仪 | 软文发布平台 - 云软媒网络软文直编发布营销推广平台 | 全自动五线打端沾锡机,全自动裁线剥皮双头沾锡机,全自动尼龙扎带机-东莞市海文能机械设备有限公司 | 全自动贴标机-套标机-工业热风机-不干胶贴标机-上海厚冉机械 | 广州展览制作工厂—[优简]直营展台制作工厂_展会搭建资质齐全 | 选矿设备-新型重选设备-金属矿尾矿重选-青州冠诚重工机械有限公司 | 齿轮减速机电机一体机_齿轮减速箱加电机一体化-德国BOSERL蜗轮蜗杆减速机电机生产厂家 | 臻知网大型互动问答社区-你的问题将在这里得到解答!-无锡据风网络科技有限公司 | 超声波气象站_防爆气象站_空气质量监测站_负氧离子检测仪-风途物联网 | 胶辊硫化罐_胶鞋硫化罐_硫化罐厂家-山东鑫泰鑫智能装备有限公司 意大利Frascold/富士豪压缩机_富士豪半封闭压缩机_富士豪活塞压缩机_富士豪螺杆压缩机 | 火锅底料批发-串串香技术培训[川禾川调官网] | 润东方环保空调,冷风机,厂房车间降温设备-20年深圳环保空调生产厂家 | 电磁流量计厂家_涡街流量计厂家_热式气体流量计-青天伟业仪器仪表有限公司 | 退火炉,燃气退火炉,燃气热处理炉生产厂家-丹阳市丰泰工业炉有限公司 | 铝箔-铝板-花纹铝板-铝型材-铝棒管-上海百亚金属材料有限公司 | 无菌水质袋-NASCO食品无菌袋-Whirl-Pak无菌采样袋-深圳市慧普德贸易有限公司 | 深圳办公室装修,办公楼/写字楼装修设计,一级资质 - ADD写艺 | 加气混凝土砌块设备,轻质砖设备,蒸养砖设备,新型墙体设备-河南省杜甫机械制造有限公司 | AR开发公司_AR增强现实_AR工业_AR巡检|上海集英科技 | EPK超声波测厚仪,德国EPK测厚仪维修-上海树信仪器仪表有限公司 | 生物除臭剂-除味剂-植物-污水除臭剂厂家-携葵环保有限公司 | 冷凝锅炉_燃气锅炉_工业燃气锅炉改造厂家-北京科诺锅炉 |