如何提高精度以及在svm中召回高度不平衡的数据集

时间:2019-08-22 05:15:06

标签: python-3.x machine-learning 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)

有什么方法可以提高查准率和查全率吗?

1 个答案:

答案 0 :(得分:0)

首先,让我评论一下您的预测基准。如果我理解您的说法是正确的,那么您有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级。