导入各种包

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score,precision_score,recall_score,f1_score,roc_auc_score,roc_curve,auc
from xgboost import XGBClassifier
from lightgbm import LGBMClassifier
from sklearn.linear_model import LogisticRegression
from  sklearn import svm
from sklearn.tree import DecisionTreeClassifier

导入数据

data=pd.read_csv('./data.csv',index_col=0,encoding='gbk')

数据理解

#单独提取出y列标签,和其余的88列标记为x
y=data['status']
X=data.drop('status',axis=1)
#X值的行列数,以及y的分布类型
print('X.shape:',X.shape)
print('y的分布:',y.value_counts())
X.shape: (4754, 88)
y的分布: 0    3561
1    1193
Name: status, dtype: int64

数据准备

#首先剔除一些明显无用的特征,如id_name,custid,trade_no,bank_card_no
X.drop(['id_name','custid','trade_no','bank_card_no'],axis=1,inplace=True)
print(X.shape)
#选取数值型特征
X_num=X.select_dtypes('number').copy()
print(X_num.shape)
type(X_num.mean())
#使用均值填充缺失值
X_num.fillna(X_num.mean(),inplace=True)
#观察数值型以外的变量
X_str=X.select_dtypes(exclude='number').copy()
X_str.describe()
#把reg_preference用虚拟变量代替,其它三个变量删除
X_str['reg_preference_for_trad'] = X_str['reg_preference_for_trad'].fillna(X_str['reg_preference_for_trad'].mode()[0])
X_str_dummy = pd.get_dummies(X_str['reg_preference_for_trad'])
X_str_dummy.head()
#合并数值型变量和名义型(字符型)变量
X_cl = pd.concat([X_num,X_str_dummy],axis=1,sort=False)
#X_cl.shape
(4754, 84)
(4754, 80)

数据建模和评估(建立函数和类整合五个模型)

#以三七比例分割训练集和测试集
random_state = 1118
X_train,X_test,y_train,y_test = train_test_split(X_cl,y,test_size=0.3,random_state=1118)
print(X_train.shape)
print(X_test.shape)#建立xgboost模型
xgboost_model=XGBClassifier()
xgboost_model.fit(X_train,y_train)
"""
#用建立好的xgboost模型运用到训练集和测试集上,进行预测
y_train_pred = xgboost_model.predict(X_train)
y_test_pred = xgboost_model.predict(X_test)
"""#建立lightgbm模型
lgbm_model=LGBMClassifier()
lgbm_model.fit(X_train,y_train)
"""
#用建立好的lightbm模型运用到训练集和测试集上,进行预测
y_train_pred = lgbm_model.predict(X_train)
y_test_pred = lgbm_model.predict(X_test)
"""
#建立lin_svc模型
Lin_SVC = svm.SVC(probability=True)
Lin_SVC.fit(X_train,y_train)
#建立决策树模型
dt = DecisionTreeClassifier()
dt.fit(X_train, y_train)
#建立逻辑回归模型
lr = LogisticRegression()
lr.fit(X_train, y_train)#定义一个函数
def model_metrics(clf, X_train, X_test, y_train, y_test):# 预测y_train_pred = clf.predict(X_train)y_test_pred = clf.predict(X_test)y_train_proba = clf.predict_proba(X_train)[:, 1]y_test_proba = clf.predict_proba(X_test)[:, 1]# 准确率print('[准确率]', end=' ')print('训练集:', '%.4f' % accuracy_score(y_train, y_train_pred), end=' ')print('测试集:', '%.4f' % accuracy_score(y_test, y_test_pred))# 精准率print('[精准率]', end=' ')print('训练集:', '%.4f' % precision_score(y_train, y_train_pred), end=' ')print('测试集:', '%.4f' % precision_score(y_test, y_test_pred))# 召回率print('[召回率]', end=' ')print('训练集:', '%.4f' % recall_score(y_train, y_train_pred), end=' ')print('测试集:', '%.4f' % recall_score(y_test, y_test_pred))# f1-scoreprint('[f1-score]', end=' ')print('训练集:', '%.4f' % f1_score(y_train, y_train_pred), end=' ')print('测试集:', '%.4f' % f1_score(y_test, y_test_pred))# auc取值:用roc_auc_score或aucprint('[auc值]', end=' ')print('训练集:', '%.4f' % roc_auc_score(y_train, y_train_proba), end=' ')print('测试集:', '%.4f' % roc_auc_score(y_test, y_test_proba))# roc曲线fpr_train, tpr_train, thresholds_train = roc_curve(y_train, y_train_proba, pos_label=1)fpr_test, tpr_test, thresholds_test = roc_curve(y_test, y_test_proba, 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()if __name__ == "__main__":model_metrics(lr, X_train, X_test, y_train, y_test)model_metrics(dt, X_train, X_test, y_train, y_test)model_metrics(Lin_SVC, X_train, X_test, y_train, y_test)model_metrics(xgboost_model, X_train, X_test, y_train, y_test)model_metrics(lgbm_model, X_train, X_test, y_train, y_test)
(3327, 85)
(1427, 85)
[准确率] 训练集: 0.7532 测试集: 0.7393
[精准率] 训练集: 0.0000 测试集: 0.0000
[召回率] 训练集: 0.0000 测试集: 0.0000
[f1-score] 训练集: 0.0000 测试集: 0.0000
[auc值] 训练集: 0.5880 测试集: 0.5720[准确率] 训练集: 1.0000 测试集: 0.6959
[精准率] 训练集: 1.0000 测试集: 0.4139
[召回率] 训练集: 1.0000 测试集: 0.4005
[f1-score] 训练集: 1.0000 测试集: 0.4071
[auc值] 训练集: 1.0000 测试集: 0.6003[准确率] 训练集: 1.0000 测试集: 0.7393
[精准率] 训练集: 1.0000 测试集: 0.0000
[召回率] 训练集: 1.0000 测试集: 0.0000
[f1-score] 训练集: 1.0000 测试集: 0.0000
[auc值] 训练集: 0.0000 测试集: 0.5000[准确率] 训练集: 0.8533 测试集: 0.7835
[精准率] 训练集: 0.8447 测试集: 0.6684
[召回率] 训练集: 0.4970 测试集: 0.3360
[f1-score] 训练集: 0.6258 测试集: 0.4472
[auc值] 训练集: 0.9145 测试集: 0.7676[准确率] 训练集: 0.9973 测试集: 0.7694
[精准率] 训练集: 0.9988 测试集: 0.5931
[召回率] 训练集: 0.9903 测试集: 0.3683
[f1-score] 训练集: 0.9945 测试集: 0.4544
[auc值] 训练集: 0.9999 测试集: 0.7621下图分别为逻辑回归、决策树、SVM、xgboost、lightgbm的ROC图





PS:有两个模型结果很奇怪,有待研究

构建五种机器学习模型作比较(某金融数据集)相关推荐

  1. 论文解读+代码复现【AIDD】贝叶斯、决策树、随机森林+2种机器学习模型在癌症治疗药物发现中的应用

    AIDD(AI Drug Discovery & Design):是近年来非常火热的技术应用,且已经介入到新药设计到研发的大部分环节当中,为新药发现与开发带来了极大的助力.倾向于机器对数据库信 ...

  2. 基于三种机器学习模型的岩爆类型预测及Python实现

    写在前面 由于代码较多,本文仅展示部分关键代码,需要代码文件和数据可以留言 然而,由于当时注释不及时,且时间久远,有些细节笔者也记不清了,代码仅供参考 0 引言 岩爆是深部岩土工程施工过程中常见的一种 ...

  3. 漫谈五种IO模型(主讲IO多路复用)

    首先引用levin的回答让我们理清楚五种IO模型 1.阻塞I/O模型 老李去火车站买票,排队三天买到一张退票. 耗费:在车站吃喝拉撒睡 3天,其他事一件没干. 2.非阻塞I/O模型 老李去火车站买票, ...

  4. Linux五种IO模型性能分析

    转载:http://blog.csdn.net/jay900323/article/details/18141217     Linux五种IO模型性能分析 目录(?)[-] 概念理解 Linux下的 ...

  5. Windows五种IO模型性能分析和Linux五种IO模型性能分析

    Windows五种IO模型性能分析和Linux五种IO模型性能分析 http://blog.csdn.net/jay900323/article/details/18141217 http://blo ...

  6. java基础巩固-宇宙第一AiYWM:为了维持生计,四大基础之OS_Part_2整起~IO们那些事【包括五种IO模型:(BIO、NIO、IO多路复用、信号驱动、AIO);零拷贝、事件处理及并发等模型】

    PART0.前情提要: 通常用户进程的一个完整的IO分为两个阶段(IO有内存IO.网络IO和磁盘IO三种,通常我们说的IO指的是后两者!):[操作系统和驱动程序运行在内核空间,应用程序运行在用户空间, ...

  7. Web3 网络效应:五种心智模型

    Web3 网络效应:五种心智模型 在过去的十年里,网络效应推动了Web2平台的崛起,也奠定了其主导地位,同时激发了建设者和投资者的想象力.一些人认为网络效应在Web3中会更加强大,而另一些人则认为We ...

  8. IO学习之概念剖析及五种IO模型

    1.概念剖析 后台开发工作的都接触过同步&异步.阻塞&非阻塞这样的概念,即使没有见过,但是IO肯定都听说过.聊IO之前需要我们对几个概念有一定的认识和理解,比如同步.阻塞.异步.非阻塞 ...

  9. 你应该知道的五种IO模型

    点击上方蓝色字体,选择"设为星标" 优质文章,及时送达 写在前面 linux操作系统包含了五种IO模型,各种上层编程语言或者网络编程框架的上层实现都是基于操作系统的这些IO实现来实 ...

  10. R语言使用caretEnsemble包的caretList函数一次性构建多个机器学习模型、使用lattice包的bwplot函数使用箱图对比多个模型在多个指标上的性能差异

    R语言使用caretEnsemble包的caretList函数一次性构建多个机器学习模型.并使用caret包的resamples函数比较在同一数据集上多个机器学习模型的比较结果.使用lattice包的 ...

最新文章

  1. 如何用python实现自动化办公_python自动化办公操作PPT的实现
  2. 如何下载SAP Cloud for Customer UI技术模型的XML源代码到本地
  3. matlab 双音多频 接收端检测到的号码,信号语音论文,关于基于MATLAB的双音多频信号识别相关参考文献资料-免费论文范文...
  4. Boundary(2020多校第二场B)
  5. C#设计模式之15-解释器模式
  6. Java 容器源码分析之Queue
  7. python 读取配置文件的单元测试_单元测试
  8. 【模板】 线段树(部分功能)
  9. Skyline Web 二次开发- 1.地图显示、Position、AttachEvent
  10. 用友U8案例教程委外管理前台操作
  11. 中职生c语言搜题软件,适合法考学生用的搜题软件,这几款帮你搞定!
  12. 用友打印问题合集 一【各模块】
  13. case when 失效,看了这篇文章就明白了
  14. 博客群建软件-Google会认为哪些网站是作弊网站?
  15. 高效办公之云端实时协作企业办公软件:石墨文档
  16. 读入一系列正整数数据,输入-1表示输入结束,-1本身不是输入的数据。程序输出读到的数据中的奇数和偶数的个数。
  17. 批量修改文件夹下的文件后缀
  18. 51 AVR 编程器USBASP下载器驱动安装及程序下载
  19. Kali Linux渗透测试之被动信息收集(一)——nslookup、dig、DNS区域传输、DNS字典爆破、DNS注册信息
  20. 设计模式袖珍版 连续转载之 - Proxy(代理)

热门文章

  1. WAP PUSH资料
  2. Jetpack—LiveData组件的缺陷以及应对策略 转至元数据结尾
  3. mysql安装步骤以及问题---解压版本
  4. 软件测试常用的黑盒测试方法有哪些,简述什么是黑盒测试方法(最常用的黑盒测试方法)...
  5. 如何使用花生壳或ngork工具将web应用部署到公网上访问
  6. 产品读书《大败局 I》 《大败局II》
  7. linux艺术字体,Linux字体美化实战(Fontconfig配置)
  8. 个人开发者上架Android应用市场
  9. 国内统一Android应用市场,最全最干净的安卓应用市场
  10. 扫雷游戏网页版_《我的世界》简单的两款小游戏 带你回味和同学在电脑课上的时光...