机器学习中处置不平衡数据集的五种方法

  • 电脑网络维修
  • 2024-11-15

大家好,我是小寒

当天给大家分享处置不平衡数据集的罕用方法。

在开局之前,咱们先来了解一下什么是不平衡的数据集。

不平衡数据集是指在分类义务中,不同类别的样本数量差异清楚的数据集,通常体现为少数类样本远少于少数类样本。这样的数据集在事实生存中很经常出现,比如欺诈检测、医疗诊断、缺点预测等场景。

例如,在一个蕴含 10,000 个实例的数据集中,95% 属于一个类(类 0),只要 5% 属于另一个类(类 1),很清楚,模型或许会高度关注少数类,而经常齐全疏忽少数类。

不平衡数据的疑问

在不平衡的数据集中,少数类别主导着模型的预测,造成少数类别的预测功能较差。

例如,假设 95% 的数据被标志为 0 类,则将一实际例预测为 0 类可取得 95% 的准确率,即使 1 类预测齐全不正确。

示例:

思考一个欺诈检测系统,其中 99% 的买卖是非法的,只要 1% 是欺诈的。预测一切买卖均为非法的模型将到达 99% 的准确率,但不可检测就任何欺诈行为,使其不可到达预期目的。

让咱们经过一个例子来可视化不平衡数据

import numpy as npimport pandas as pdimport plotly.express as pxfrom sklearn.model_selection import train_test_splitfrom sklearn.linear_model import LogisticRegressionfrom sklearn.metrics import accuracy_score, precision_score, recall_score, f1_score, confusion_matriximport plotly.figure_factory as ff# Generate imbalanced,, width=800, height=600)fig.update_layout(title_x=0.5)fig.update_xaxes(tickvals=[0, 1], ticktext=['Class 0', 'Class 1'])fig.show()# Split, width=800, height=600, title_x=0.5)fig.show()

此代码生成一个不平衡的数据集,其中 95% 的实例被标志为类 0,只要 5% 被标志为类 1。

当咱们可视化类别散布时,咱们会看到两个类别之间的清楚不平衡。

Accuracy: 0.9815Precision: 0.8451Recall: 0.6977F1-score: 0.7643

混杂矩阵显示,只管准确率很高,但少数类(类1)的准确率和召回率要低得多。该模型倾向少数类。

import plotly.express as pxdf["Target"] = df["Target"].astype(str)fig = px.scatter(df, x='Feature 1', y='Feature 2', color='Target'," alt="图片">

处置不平衡数据的技术

1.随机欠采样

随机欠采样是一种经过增加少数类样本的数量来平衡类散布的方法。

详细做法是随机选用局部少数类样本并将其移除,使得少数类和少数类的样本数量凑近平衡。

好处

缺陷

from imblearn.under_sampling import RandomUnderSamplerfrom collections import Counter# Use RandomUnderSampler to balance the, random_state=42)X_resampled, y_resampled = undersampler.fit_resample(X, y)# Check the original class distributionprint("Original class distribution:", Counter(y))# Check the new class distribution after undersamplingprint("New class distribution after undersampling:", Counter(y_resampled))X_train, X_test, y_train, y_test = train_test_split(X_resampled, y_resampled, test_size=0.2, random_state=42)# Train a simple logistic regression modelmodel = LogisticRegression(solver='liblinear')model.fit(X_train, y_train)# Make predictionsy_pred = model.predict(X_test)# Evaluate the modelaccuracy = accuracy_score(y_test, y_pred)print(f"Accuracy: {accuracy:.4f}")# Distribution of undersampled, y='Feature 2', color='Target'," alt="图片">

2.随机过采样

随机过采样经过参与少数类样本的数量来平衡类散布。

经常出现的做法是随机复制少数类的样本,直到少数类样本的数量与少数类样本的数量相等。

好处

缺陷

from imblearn.over_sampling import RandomOverSampler# Check the original class distributionoriginal_class_distribution = Counter(y)print("Original class distribution:", original_class_distribution)# Initialize RandomOverSampleroversampler = RandomOverSampler(sampling_strategy='auto', random_state=42)# Apply random oversampling to balance the)model.fit(X_train, y_train)# Make predictionsy_pred = model.predict(X_test)# Evaluate the modelaccuracy = accuracy_score(y_test, y_pred)print(f"Accuracy: {accuracy:.4f}")df_resampled = pd.DataFrame(X_oversampled, columns=['Feature 1', 'Feature 2'])df_resampled['Target'] = y_oversampleddf_resampled["Target"] = df_resampled["Target"].astype(str)fig = px.scatter(df_resampled, x='Feature 1', y='Feature 2', color='Target'," alt="图片">

SMOTE 是一种分解过采样方法,经过生成新的少数类样原本平衡数据集。

它不是便捷地复制现有的少数类样本,而是经过对现有少数类样本的特色启动插值,创立新样本。

详细来说,SMOTE 从少数类样本当选取一个样本和其最近邻样本,在它们之间生成新的分解样本。

好处

缺陷

from imblearn.over_sampling import SMOTE# Check the original class distributionoriginal_class_distribution = Counter(y)print("Original class distribution:", original_class_distribution)# Initialize SMOTEsmote = SMOTE(sampling_strategy='auto', random_state=42)# Apply SMOTE to balance the)model.fit(X_train, y_train)# Make predictionsy_pred = model.predict(X_test)# Evaluate the modelaccuracy = accuracy_score(y_test, y_pred)print(f"Accuracy: {accuracy:.4f}")df_resampled = pd.DataFrame(X_smote, columns=['Feature 1', 'Feature 2'])df_resampled['Target'] = y_smotedf_resampled["Target"] = df_resampled["Target"].astype(str)fig = px.scatter(df_resampled, x='Feature 1', y='Feature 2', color='Target'," alt="图片">

4.老本敏感型学习

老本敏感型学习经过为分类失误调配不同的成原本处置数据不平衡疑问。

在不平衡数据集中,错分少数类的代价通常比少数类更高。老本敏感型学习经过在损失函数中引入老本矩阵来调整模型,使得少数类的错分类损失更大,从而疏导模型愈加关注少数类。

好处

缺陷:

from sklearn.tree import DecisionTreeClassifierfrom sklearn.metrics import classification_reportfrom imblearn.under_sampling import RandomUnderSamplerfrom collections import Counterfrom sklearn.datasets import make_classification# Create a mock imbalanced>

5.平衡随机森林

平衡随机森林是在随机森林的基础上改良的一种方法,针对不平衡数据集做了优化。

它经过在构建每棵决策树时,对少数类启动随机欠采样,确保每棵树的训练集都是平衡的。同时,它联合了随机森林的个性,经过多个弱分类器的集成来提高全体的预测才干。

好处

缺陷:

from imblearn.ensemble import BalancedRandomForestClassifierfrom sklearn.model_selection import train_test_splitfrom sklearn.metrics import accuracy_score# Split the>
起源:程序员学长 机器学习数据集样本
  • 关注微信

本网站的文章部分内容可能来源于网络和网友发布,仅供大家学习与参考,如有侵权,请联系站长进行删除处理,不代表本网站立场,转载联系作者并注明出处:https://duobeib.com/diannaowangluoweixiu/7713.html

猜你喜欢

热门标签

洗手盆如何疏浚梗塞 洗手盆为何梗塞 iPhone提价霸占4G市场等于原价8折 明码箱怎样设置明码锁 苏泊尔电饭锅保修多久 长城画龙G8253YN彩电输入指令画面变暗疑问检修 彩星彩电解除童锁方法大全 三星笔记本培修点上海 液晶显示器花屏培修视频 燃气热水器不热水要素 热水器不上班经常出现3种处置方法 无氟空调跟有氟空调有什么区别 norltz燃气热水器售后电话 大连站和大连北站哪个离周水子机场近 热水器显示屏亮显示温度不加热 铁猫牌保险箱高效开锁技巧 科技助力安保无忧 创维8R80 汽修 a1265和c3182是什么管 为什么电热水器不能即热 标致空调为什么不冷 神舟培修笔记本培修 dell1420内存更新 青岛自来水公司培修热线电话 包头美的洗衣机全国各市售后服务预定热线号码2024年修缮点降级 创维42k08rd更新 空调为什么运转异响 热水器为何会漏水 该如何处置 什么是可以自己处置的 重庆华帝售后电话 波轮洗衣机荡涤价格 鼎新热水器 留意了!不是水平疑问! 马桶产生了这5个现象 方便 极速 邢台空调移机电话上门服务 扬子空调缺点代码e4是什么疑问 宏基4736zG可以装置W11吗 奥克斯空调培修官方 为什么突然空调滴水很多 乐视s40air刷机包 未联络视的提高方向 官网培修 格力空调售后电话 皇明太阳能电话 看尚X55液晶电视进入工厂形式和软件更新方法 燃气热水器缺点代码

热门资讯

关注我们

微信公众号