实现功能:

python机器学习案例-梯度提升模型搭建及评估。

实现代码:

# 导入需要的库
from warnings import simplefilter
simplefilter(action='ignore', category=FutureWarning)
import pandas as pd
from sklearn.model_selection import train_test_split
import seaborn as sns
import matplotlib.pyplot as plt
from sklearn import metrics
from sklearn.metrics import roc_curve, auc
import numpy as np
from sklearn.ensemble import RandomForestClassifier, GradientBoostingClassifier# =============读取数据===========
def Read_data(file):dt = pd.read_csv(file)dt.columns = ['age', 'sex', 'chest_pain_type', 'resting_blood_pressure', 'cholesterol','fasting_blood_sugar', 'rest_ecg', 'max_heart_rate_achieved','exercise_induced_angina','st_depression', 'st_slope', 'num_major_vessels', 'thalassemia', 'target']data =dtreturn data# ===========数据清洗==============
def data_clean(data):# 重复值处理print('存在' if any(data.duplicated()) else '不存在', '重复观测值')data.drop_duplicates()# 缺失值处理print('不存在' if any(data.isnull()) else '存在', '缺失值')data.dropna()  # 直接删除记录data.fillna(method='ffill')  # 前向填充data.fillna(method='bfill')  # 后向填充data.fillna(value=2)  # 值填充data.fillna(value={'resting_blood_pressure': data['resting_blood_pressure'].mean()})  # 统计值填充# 异常值处理data1 = data['resting_blood_pressure']# 标准差监测xmean = data1.mean()xstd = data1.std()print('存在' if any(data1 > xmean + 2 * xstd) else '不存在', '上限异常值')print('存在' if any(data1 < xmean - 2 * xstd) else '不存在', '下限异常值')# 箱线图监测q1 = data1.quantile(0.25)q3 = data1.quantile(0.75)up = q3 + 1.5 * (q3 - q1)dw = q1 - 1.5 * (q3 - q1)print('存在' if any(data1 > up) else '不存在', '上限异常值')print('存在' if any(data1 < dw) else '不存在', '下限异常值')data1[data1 > up] = data1[data1 < up].max()data1[data1 < dw] = data1[data1 > dw].min()return data#==============数据编码=============
def data_encoding(data):data = data[["age", 'sex', "chest_pain_type", "resting_blood_pressure", "cholesterol","fasting_blood_sugar", "rest_ecg","max_heart_rate_achieved", "exercise_induced_angina","st_depression", "st_slope", "num_major_vessels","thalassemia","target"]]Discretefeature=['sex',"chest_pain_type", "fasting_blood_sugar", "rest_ecg","exercise_induced_angina",  "st_slope", "thalassemia"]Continuousfeature=["age", "resting_blood_pressure", "cholesterol","max_heart_rate_achieved","st_depression","num_major_vessels"]df = pd.get_dummies(data,columns=Discretefeature)df[Continuousfeature]=(df[Continuousfeature]-df[Continuousfeature].mean())/(df[Continuousfeature].std())df["target"]=data[["target"]]return df#=============数据集划分==============
def data_partition(data):# 1.4查看样本是否平衡print(data["target"].value_counts())# X提取变量特征;Y提取目标变量X = data.drop('target', axis=1)y = data['target']X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=.2,random_state=10)feature=list(X.columns)return X_train, y_train, X_test, y_test,feature#===========绘制ROC曲线================
def Draw_ROC(list1,list2):fpr_model,tpr_model,thresholds=roc_curve(list1,list2,pos_label=1)roc_auc_model=auc(fpr_model,tpr_model)font = {'family': 'Times New Roman','size': 12,}sns.set(font_scale=1.2)plt.rc('font',family='Times New Roman')plt.plot(fpr_model,tpr_model,'blue',label='AUC = %0.2f'% roc_auc_model)plt.legend(loc='lower right',fontsize = 12)plt.plot([0,1],[0,1],'r--')plt.ylabel('True Positive Rate',fontsize = 14)plt.xlabel('Flase Positive Rate',fontsize = 14)plt.show()return#============梯度提升===========
def GB(X_train, y_train, X_test, y_test,feature):gb1 = GradientBoostingClassifier(max_depth=4,random_state=0)gb1.fit(X_train, y_train)print("\nFinally results of GB fitting:")print("Accuracy on training set: {:.3f}".format(gb1.score(X_train, y_train)))print("Accuracy on test set: {:.3f}".format(gb1.score(X_test, y_test)))print("Feature importance:\n{}".format(gb1.feature_importances_))predict_target=gb1.predict(X_test)predict_target_prob=gb1.predict_proba(X_test)  # 输出分类概率predict_target_prob_gb=predict_target_prob[:,1]df = pd.DataFrame({'prob':predict_target_prob_gb,'target':predict_target,'labels':list(y_test)})print(predict_target_prob_gb)print('正确预测样本数:')print(sum(predict_target==y_test))print('GB测试集:')print(metrics.classification_report(y_test,predict_target))print(metrics.confusion_matrix(y_test, predict_target))print('GB训练集:')predict_Target=gb1.predict(X_train)print(metrics.classification_report(y_train,predict_Target))print(metrics.confusion_matrix(y_train, predict_Target))id=np.argwhere(gb1.feature_importances_>=0)id=[i for item in id for i in item]dic={}for i in id:dic.update({feature[i]:gb1.feature_importances_[i]})df=pd.DataFrame.from_dict(dic,orient='index',columns=['权重'])df=df.reset_index().rename(columns={'index':'特征'})df=df.sort_values(by='权重',ascending=False)data_hight=df['权重'].values.tolist()print(data_hight)data_x=df['特征'].values.tolist()print(data_x)font = {'family': 'Times New Roman', 'size': 12}sns.set(font_scale=1.2)plt.rc('font',family='Times New Roman')plt.figure(figsize=(8,8))plt.barh(range(len(data_x)), data_hight, color='#6699CC')plt.yticks(range(len(data_x)),data_x,fontsize=12)plt.tick_params(labelsize=12)plt.xlabel('Feature importance',fontsize=14)plt.title("RF feature importance analysis",fontsize = 14)plt.show()return list(y_test), list(predict_target_prob_gb)if __name__=="__main__":data1=Read_data("F:\数据杂坛\\0504\heartdisease\Heart-Disease-Data-Set-main\\UCI Heart Disease Dataset.csv")data1=data_clean(data1)data2=data_encoding(data1)X_train, y_train, X_test, y_test,feature= data_partition(data2)y_test,predict_target_prob_gb=GB(X_train, y_train, X_test, y_test,feature)Draw_ROC(y_test,predict_target_prob_gb)

实现效果:

喜欢记得点赞,在看,收藏,

关注V订阅号:数据杂坛,获取完整代码和效果,将持续更新!

python机器学习案例-梯度提升模型搭建及评估(完整代码+实现效果)相关推荐

  1. python机器学习-建立随机森林预测模型并特征分析(完整代码+实现效果)

    实现功能: python机器学习-建立随机森林预测模型并特征分析. 实现效果: # 导入需要的库 from warnings import simplefilter simplefilter(acti ...

  2. python实现均值类指标差异分析-Mann-Whitney U-test(完整代码+实现效果)

    实现功能: 对于均值类指标的差异分析,采用单因素方差分析,若指标分布服从正态分布,对于2个独立样本采用T检验或者Z检验,对于多个(大于2个)独立样本采用F检验,若分布不服从正态分布,对于2个独立样本采 ...

  3. python机器学习案例系列教程——模型评估总结

    全栈工程师开发手册 (作者:栾鹏) python数据挖掘系列教程 回归评估指标 均方误差(MSE) MSE (Mean Squared Error)叫做均方误差.看公式 1m∑i=1m(yi−f(xi ...

  4. 机器学习 | Python实现GBDT梯度提升树模型设计

    机器学习 | Python实现GBDT梯度提升树模型设计 目录 机器学习 | Python实现GBDT梯度提升树模型设计 基本介绍 模型描述 程序设计 参考资料 基本介绍 GBDT也是集成学习Boos ...

  5. 机器学习 の04 梯度提升决策树GBDT

    机器学习 の04 梯度提升决策树GBDT GBDT的背景知识 集成学习(ensemble learning) Bagging(Bootstrap Aggregating)算法 Boosting提升算法 ...

  6. 【机器学习】python机器学习使用scikit-learn对模型进行评估:使用t分布及z分布评估模型误差的95%置信空间

    端到端机器学习导航: [机器学习]python借助pandas加载并显示csv数据文件,并绘制直方图 [机器学习]python使用matplotlib进行二维数据绘图并保存为png图片 [机器学习]p ...

  7. Python机器学习案例|梵高的《星空》图片压缩

    Python机器学习案例:梵高的<星空>图片压缩 01 案例背景 本案例将奇异值分解用于处理图像压缩任务.要压缩的图片如图所示,是梵高的作品<星空>. 02 实现代码 Pyth ...

  8. python机器学习案例-支持向量机建模及评估(完整代码+实现效果)

    实现功能: python机器学习案例-支持向量机建模及评估. 实现代码: # 导入需要的库 from warnings import simplefilter simplefilter(action= ...

  9. python机器学习-朴素贝叶斯(Naive Bayes)模型建立及评估(完整代码+实现效果)

    实现功能: python机器学习-朴素贝叶斯(Naive Bayes)模型建立及评估. 实现代码: # 导入需要的库 from warnings import simplefilter simplef ...

  10. 泰坦尼克号 第三章 模型搭建和评估

    第三章 模型搭建和评估–建模 经过前面的两章的知识点的学习,我可以对数数据的本身进行处理,比如数据本身的增删查补,还可以做必要的清洗工作.那么下面我们就要开始使用我们前面处理好的数据了.这一章我们要做 ...

最新文章

  1. python的类型化_显式类型化的Python版本?
  2. 把偷快递的贼炸到怀疑人生!不愧是 NASA 工程师,奇思妙想
  3. Bazel构建工具的安装
  4. linux检查防火墙是否阻挡端口,浅析linux查看防火墙状态和对外开放的端口状态...
  5. 采用我国国产处理器的超级计算机是,“中国芯”超级电脑合肥诞生 首次采用国产CPU芯片...
  6. SQL优化:紧急情况下提高SQL性能竟是这样实现的!(文中有惊喜)
  7. 风中的纸屑——阅读MDN中的HTML、CSS谈兼容(PC)
  8. luogu P3802 小魔女帕琪
  9. 栈和队列常用函数详解
  10. mysql车库管理系统_小区停车管理系统(JSP+JAVA+MySQL)
  11. 保险中介3.0时代:数字化中介在场景中打造核心竞争力
  12. Android之阿里云推送实现
  13. centos 7查看CPU温度
  14. matlab红点沿着正弦曲线运动,如何使用css3让一个元素做正弦曲线运动?
  15. 【好工具】强烈安利的文献管理软件 Mendeley
  16. 应用之星教你制作高下载量的App
  17. Promox VE(PVE) 连接wifi配置
  18. 看图写英语作文关于计算机,看图写话英语作文模板
  19. MATLAB设计滤波器代码
  20. 供应路灯用风能发电机,风光互补照明系统

热门文章

  1. 双机互联攻略之超强、完全篇!
  2. 网络游戏外挂制作(3)
  3. 利用python修改小米运动数据,整个朋友圈都感觉太夸张了
  4. JavaSE银行账户管理系统
  5. CentOS7下部署Mantis详细步骤
  6. HIGEN海坚驱动器维修FDA7045伺服变频器维修
  7. 本人成功续费了。你的支付授权失败。请核对你的信息并重试,或尝试其他支付方式。请联系你的银行了。
  8. python实现获取ip、网站备案信息、whois查询
  9. 游戏服务器是干什么的(大话、浅析)
  10. spark sample采样