任务四-模型评估

模型评估

指标说明

accuracy、precision,recall和F1-score、auc值的指标定义如下

accuracy(分类准确率)

分类准确率分数是指所有分类正确的百分比。分类准确率这一衡量分类器的标准比较容易理解,但是它不能告诉你响应值的潜在分布,并且它也不能告诉你分类器犯错的类型。预测对的(包括原本是对预测为对,原本是错的预测为错两种情形)占整个的比例(越大越好,1为理想状态)

precision(预测)

预测为对的当中,原本为对的比例(越大越好,1为理想状态)

recall(召回率)

召回率 =提取出的正确信息条数 /样本中的信息条数。通俗地说,原本为对的当中,预测为对的比例(越大越好,1为理想状态)

F1-score(F1分数)

F1分数是分类问题的一个衡量指标。一些多分类问题的机器学习竞赛,常常将F1-score作为最终测评的方法。它是精确率和召回率的调和平均数,最大为1,最小为0。

auc值

auc值指:ROC曲线下的面积(越大越好,1为理想状态)
而ROC曲线是由fp rate、tp rate做出的曲线
fp rate的含义是:原本是错的预测为对的比例(越小越好,0为理想状态)
tp rate的含义是:原本是对的预测为对的比例(越大越好,1为理想状态)

目标设定

使用5个模型(逻辑回归、SVM、决策树、随机森林、XGBoost),预测还款,并
记录5个模型关于accuracy、precision,recall和F1-score、auc值的评分表格,并画出ROC曲线。

代码实现

数据处理部分的代码就省略了,可以参考任务三的博客

各参数指标计算代码

def model_evaluate(model, X_train, X_test, y_train, y_test):
    # 训练集和测试集分别使用模型进行预测
    predict_of_y_train = model.predict(X_train)
    predict_of_y_test = model.predict(X_test)

    # predict_proba返回的是一个n行k列的数组,
    # 第i行第j列上的数值是模型预测第i个预测样本的标签为j的概率。
    # 此时每一行的和应该等于1。
    proba_of_y_train = model.predict_proba(X_train)[:, 1]
    proba_of_y_test = model.predict_proba(X_test)[:, 1]

    # accuracy
    print('accuracy:')
    print('训练集:', '%.4f' % accuracy_score(y_train, predict_of_y_train))
    print('测试集:', '%.4f' % accuracy_score(y_test, predict_of_y_test))

    # precision
    print('precision:')
    print('训练集:', '%.4f' % precision_score(y_train, predict_of_y_train))
    print('测试集:', '%.4f' % precision_score(y_test, predict_of_y_test))

    # recall
    print('recall:')
    print('训练集:', '%.4f' % recall_score(y_train, predict_of_y_train))
    print('测试集:', '%.4f' % recall_score(y_test, predict_of_y_test))

    # f1-score
    print('F1-score:')
    print('训练集:', '%.4f' % f1_score(y_train, predict_of_y_train))
    print('测试集:', '%.4f' % f1_score(y_test, predict_of_y_test))

    # AUC
    print('AUC:')
    print('训练集:', '%.4f' % roc_auc_score(y_train, proba_of_y_train))
    print('测试集:', '%.4f' % roc_auc_score(y_test, proba_of_y_test))

    # ROC曲线
    fpr_train, tpr_train, thresholds_train = roc_curve(y_train, proba_of_y_train, pos_label=1)
    fpr_test, tpr_test, thresholds_test = roc_curve(y_test, proba_of_y_test, pos_label=1)

    label = ["Train - AUC:{:.4f}".format(auc(fpr_train, tpr_train)),
             "Test - AUC:{:.4f}".format(auc(fpr_test, tpr_test))]
    plt.plot(fpr_train, tpr_train)
    plt.plot(fpr_test, tpr_test)
    plt.plot([0, 1], [0, 1], 'd--')
    plt.xlabel('False Positive Rate')
    plt.ylabel('True Positive Rate')
    plt.legend(label, loc=4)
    plt.title("ROC Curve")
    plt.show()

逻辑回归

clf = LogisticRegression(C=0.1, penalty='l1')
model = clf.fit(X_train, y_train)

运行结果为:
accuracy:
训练集: 0.7956
测试集: 0.8066
precision:
训练集: 0.7139
测试集: 0.7452
recall:
训练集: 0.3179
测试集: 0.3314
F1-score:
训练集: 0.4399
测试集: 0.4588
AUC:
训练集: 0.8012
测试集: 0.8014
在这里插入图片描述

SVM分类器

clf = SVC(C=0.01, kernel='linear', probability=True)
model = clf.fit(X_train, y_train)

结果:
accuracy:
训练集: 0.7851
测试集: 0.7905
precision:
训练集: 0.7706
测试集: 0.7935
recall:
训练集: 0.2119
测试集: 0.2068
F1-score:
训练集: 0.3324
测试集: 0.3281
AUC:
训练集: 0.8038
测试集: 0.8132
在这里插入图片描述

决策树

clf = DecisionTreeClassifier(max_depth=5, min_samples_split=50, min_samples_leaf=60, max_features=9, random_state=2018)
model = clf.fit(X_train, y_train.values)

结果:
accuracy:
训练集: 0.7773
测试集: 0.7722
precision:
训练集: 0.7089
测试集: 0.6346
recall:
训练集: 0.2000
测试集: 0.1870
F1-score:
训练集: 0.3120
测试集: 0.2888
AUC:
训练集: 0.7520
测试集: 0.7113
在这里插入图片描述

随机森林

clf = RandomForestClassifier(oob_score=True, random_state=2018)
model = clf.fit(X_train, y_train.values)

运行结果:
accuracy:
训练集: 0.9838
测试集: 0.7772
precision:
训练集: 0.9987
测试集: 0.6207
recall:
训练集: 0.9369
测试集: 0.2550
F1-score:
训练集: 0.9668
测试集: 0.3614
AUC:
训练集: 0.9996
测试集: 0.7112
在这里插入图片描述

XGBoost

clf = XGBClassifier(learning_rate=0.1, n_estimators=80, max_depth=3, min_child_weight=5,
                    gamma=0.2, subsample=0.8, colsample_bytree=0.8, reg_alpha=1e-5,
                    objective='binary:logistic', nthread=4, scale_pos_weight=1, seed=27)
model = clf.fit(X_train, y_train.values)

运行结果:
accuracy:
训练集: 0.8413
测试集: 0.8031
precision:
训练集: 0.8406
测试集: 0.7069
recall:
训练集: 0.4583
测试集: 0.3484
F1-score:
训练集: 0.5932
测试集: 0.4668
AUC:
训练集: 0.8918
测试集: 0.7962
在这里插入图片描述

总结

将上述五个模型的结果汇总如下

模型准确率精准率召回率f1-scoreAUC值ROC曲线
逻辑回归训练集: 0.7956, 测试集: 0.8066训练集: 0.7139,测试集: 0.7452训练集: 0.3179,测试集: 0.3314训练集: 0.4399,测试集: 0.4588训练集: 0.8012,测试集: 0.8014在这里插入图片描述
SVM模型训练集: 0.7851, 测试集: 0.7905训练集: 0.7706,测试集: 0.7935训练集: 0.2119,测试集: 0.2068训练集: 0.3324,测试集: 0.3281训练集: 0.8038,测试集: 0.8132在这里插入图片描述
决策树训练集: 0.7773, 测试集: 0.7722训练集: 0.7089,测试集: 0.6346训练集: 0.2000,测试集: 0.1870训练集: 0.3120,测试集: 0.2888训练集: 0.7520,测试集: 0.7113在这里插入图片描述
随机森林训练集: 0.9838, 测试集: 0.7772训练集: 0.9987,测试集: 0.6207训练集: 0.9369,测试集: 0.2550训练集: 0.9668,测试集: 0.3614训练集: 0.9996,测试集: 0.7112在这里插入图片描述
SVM模型训练集: 0.8413, 测试集: 0.8031训练集: 0.8406,测试集: 0.7069训练集: 0.4583,测试集: 0.3484训练集: 0.5932,测试集: 0.4668训练集: 0.8918,测试集: 0.7962在这里插入图片描述
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值