python机器学习案例-梯度提升模型搭建及评估(完整代码+实现效果)
实现功能:
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机器学习案例-梯度提升模型搭建及评估(完整代码+实现效果)相关推荐
- python机器学习-建立随机森林预测模型并特征分析(完整代码+实现效果)
实现功能: python机器学习-建立随机森林预测模型并特征分析. 实现效果: # 导入需要的库 from warnings import simplefilter simplefilter(acti ...
- python实现均值类指标差异分析-Mann-Whitney U-test(完整代码+实现效果)
实现功能: 对于均值类指标的差异分析,采用单因素方差分析,若指标分布服从正态分布,对于2个独立样本采用T检验或者Z检验,对于多个(大于2个)独立样本采用F检验,若分布不服从正态分布,对于2个独立样本采 ...
- python机器学习案例系列教程——模型评估总结
全栈工程师开发手册 (作者:栾鹏) python数据挖掘系列教程 回归评估指标 均方误差(MSE) MSE (Mean Squared Error)叫做均方误差.看公式 1m∑i=1m(yi−f(xi ...
- 机器学习 | Python实现GBDT梯度提升树模型设计
机器学习 | Python实现GBDT梯度提升树模型设计 目录 机器学习 | Python实现GBDT梯度提升树模型设计 基本介绍 模型描述 程序设计 参考资料 基本介绍 GBDT也是集成学习Boos ...
- 机器学习 の04 梯度提升决策树GBDT
机器学习 の04 梯度提升决策树GBDT GBDT的背景知识 集成学习(ensemble learning) Bagging(Bootstrap Aggregating)算法 Boosting提升算法 ...
- 【机器学习】python机器学习使用scikit-learn对模型进行评估:使用t分布及z分布评估模型误差的95%置信空间
端到端机器学习导航: [机器学习]python借助pandas加载并显示csv数据文件,并绘制直方图 [机器学习]python使用matplotlib进行二维数据绘图并保存为png图片 [机器学习]p ...
- Python机器学习案例|梵高的《星空》图片压缩
Python机器学习案例:梵高的<星空>图片压缩 01 案例背景 本案例将奇异值分解用于处理图像压缩任务.要压缩的图片如图所示,是梵高的作品<星空>. 02 实现代码 Pyth ...
- python机器学习案例-支持向量机建模及评估(完整代码+实现效果)
实现功能: python机器学习案例-支持向量机建模及评估. 实现代码: # 导入需要的库 from warnings import simplefilter simplefilter(action= ...
- python机器学习-朴素贝叶斯(Naive Bayes)模型建立及评估(完整代码+实现效果)
实现功能: python机器学习-朴素贝叶斯(Naive Bayes)模型建立及评估. 实现代码: # 导入需要的库 from warnings import simplefilter simplef ...
- 泰坦尼克号 第三章 模型搭建和评估
第三章 模型搭建和评估–建模 经过前面的两章的知识点的学习,我可以对数数据的本身进行处理,比如数据本身的增删查补,还可以做必要的清洗工作.那么下面我们就要开始使用我们前面处理好的数据了.这一章我们要做 ...
最新文章
- python的类型化_显式类型化的Python版本?
- 把偷快递的贼炸到怀疑人生!不愧是 NASA 工程师,奇思妙想
- Bazel构建工具的安装
- linux检查防火墙是否阻挡端口,浅析linux查看防火墙状态和对外开放的端口状态...
- 采用我国国产处理器的超级计算机是,“中国芯”超级电脑合肥诞生 首次采用国产CPU芯片...
- SQL优化:紧急情况下提高SQL性能竟是这样实现的!(文中有惊喜)
- 风中的纸屑——阅读MDN中的HTML、CSS谈兼容(PC)
- luogu P3802 小魔女帕琪
- 栈和队列常用函数详解
- mysql车库管理系统_小区停车管理系统(JSP+JAVA+MySQL)
- 保险中介3.0时代:数字化中介在场景中打造核心竞争力
- Android之阿里云推送实现
- centos 7查看CPU温度
- matlab红点沿着正弦曲线运动,如何使用css3让一个元素做正弦曲线运动?
- 【好工具】强烈安利的文献管理软件 Mendeley
- 应用之星教你制作高下载量的App
- Promox VE(PVE) 连接wifi配置
- 看图写英语作文关于计算机,看图写话英语作文模板
- MATLAB设计滤波器代码
- 供应路灯用风能发电机,风光互补照明系统