如何提高SVM中高度不平衡数据集的精度和召回率



我有形状高度不平衡的贷款数据集: (116058,29(

如何提高准确率和召回率分数 目标色谱柱 m13 计数器({1: 636, 0: 115422}(

我曾经在训练集和测试集中拆分数据:

X_train,X_test,y_train,y_test = train_test_split(X,y,train_size = 0.8,random_state = 100,stratify = y)

然后使用 SVM 进行分类:

svc = SVC(class_weight = {1:0.95,0:0.05},kernel='rbf')
svc.fit(X_train,y_train)
y_pred = svc.predict(X_test)

我的精度为 .54,召回为 .55

我也尝试了使用 C 和 gamma 的不同值进行网格搜索,上面的代码给出了最好的结果

svc = SVC(class_weight = {1:0.95,0:0.05},kernel='rbf')
svc.fit(X_train,y_train)
y_pred = svc.predict(X_test)

有没有办法提高精度和召回率分数?

首先让我评论一下你的预测基线,如果我理解正确的话,你有 636 类 1,115422类 0。

Imagen 您将构建一个始终预测类 0 的预测模型,您的精度将是(如果类 0 是您的真实类(:

115422/(115422+636)=0,9945 

和您的回忆(如果 0 类是您的真实班级(: 1 如果类 1 是您的真实类,则精度为:0

如您所见,调整它是一项艰巨的任务。一般来说,有关于这个主题的书籍,调整它会非常困难。但是你的目标应该是正确预测1类!目标应该是识别算法中的每个类 1。例如,您可以尝试定位您的敏感性,以下是一些目标: https://en.wikipedia.org/wiki/Precision_and_recall

你应该做的是,确保你的训练集和测试集的目标为 1 类。

最新更新