采用boosting思想开发一个解决二分类样本不平衡的多估计器模型
# -*- coding: utf-8 -*-
"""
Created on Wed Oct 31 20:59:39 2018
脚本描述:采用boosting思想开发一个解决二分类样本不平衡的多估计器模型
@author: WZD
"""
from sklearn.datasets import load_breast_cancer
from sklearn.model_selection import train_test_split
import numpy as np
from xgboost import XGBClassifier
from sklearn.metrics import confusion_matrix
import pandas as pd
from seaborn import load_dataset
from sklearn.externals import joblib ###################准备训练数据和测试数据#######################################
df = load_dataset(name="titanic")
df = df[["survived","pclass","age","sibsp","parch"]]
feature_name = ["pclass","age","sibsp","parch"]
label_name = ["survived"] train,test = train_test_split(df,test_size=0.2) ##################训练过程####################################################
#L1,采用全部训练数据
model_1 = XGBClassifier(max_depth=5,n_estimators=10)
model_1.fit(train[feature_name],train[label_name])
#采用model_1预测训练数据
y_model_1_pred = model_1.predict(train[feature_name])
#保存L1模型
model_1_path = joblib.dump(model_1,filename="./model_1.pkl")
#将L1模型的预测结果接在训练数据后面
train["y_model_1_pred"] = y_model_1_pred #从train中分离出预测正确和错误的数据集
train_1_right = train[train["survived"]==train["y_model_1_pred"]]
train_1_error = train[train["survived"]!=train["y_model_1_pred"]] #比价分错样本和正确样本的数量大小,小的那一个采样全部样本,大的那一个采样和小的同数量的样本
num_min = min(len(train_1_error),len(train_1_right))
train_2 = pd.concat([train_1_error.sample(n=num_min),train_1_right.sample(n=num_min)])
#L2,采用train_2数据集
model_2 = XGBClassifier(max_depth=1,n_estimators=1)
model_2.fit(train_2[feature_name],train_2[label_name])
#采用model_2预测train_2数据集
y_model_2_pred = model_2.predict(train_2[feature_name])
#保存L2模型
model_2_path = joblib.dump(model_2,filename="./model_2.pkl") #将L2模型的预测结果接在train_2数据集后面
train_2["y_model_2_pred"] = y_model_2_pred #提取train_2中分类错误的样本
#train_3 = train_2[train_2["survived"]!=train_2["y_model_2_pred"]]
train_3 = train_2[train_2["y_model_1_pred"]!=train_2["y_model_2_pred"]]#这里不是太清楚使用上面的那一条,还是这一条
#L3,采用train_3数据集
model_3 = XGBClassifier(max_depth=1,n_estimators=1)
model_3.fit(train_3[feature_name],train_3[label_name])
#采用model_3预测train_3数据集
y_model_3_pred = model_3.predict(train_3[feature_name])
#保存L3模型
model_3_path = joblib.dump(model_3,filename="./model_3.pkl") ##############在测试集上测试模型的效果#########################################
y_result = pd.DataFrame() y_result["model_1"] = model_1.predict(test[feature_name])
y_result["model_2"] = model_2.predict(test[feature_name])
y_result["model_3"] = model_3.predict(test[feature_name]) def vote(x,y,z):
label_0 = 0
label_1 = 0
if x==0:
label_0 += 1
else:
label_1 += 1 if y==0:
label_0 += 1
else:
label_1 += 1 if z==0:
label_0 += 1
else:
label_1 += 1 if label_0>=label_1:
return 0
else:
return 1 y_result["result"] = y_result.apply(lambda df:vote(df["model_1"],df["model_2"],df["model_3"]),axis=1)
confusion_matrix(test[label_name],y_result["result"])
采用boosting思想开发一个解决二分类样本不平衡的多估计器模型的更多相关文章
- 如何利用开源思想开发一个SEO友好型网
如果你有一个网站需要去做SEO优化的时候,不要期望你的努力能立即得到回报.耐心等待并更正内容营销策略,最终会发现你的网站很受用户欢迎.下面就教你如何利用开源思维开发一个SEO友好型网站! 首先,你应该 ...
- 【笔记】二分类算法解决多分类问题之OvO与OvR
OvO与OvR 前文书道,逻辑回归只能解决二分类问题,不过,可以对其进行改进,使其同样可以用于多分类问题,其改造方式可以对多种算法(几乎全部二分类算法)进行改造,其有两种,简写为OvO与OvR OvR ...
- [AI开发]一个例子说明机器学习和深度学习的关系
深度学习现在这么火热,大部分人都会有‘那么它与机器学习有什么关系?’这样的疑问,网上比较它们的文章也比较多,如果有机器学习相关经验,或者做过类似数据分析.挖掘之类的人看完那些文章可能很容易理解,无非就 ...
- 监督学习——logistic进行二分类(python)
线性回归及sgd/bgd的介绍: 监督学习--随机梯度下降算法(sgd)和批梯度下降算法(bgd) 训练数据形式: (第一列代表x1,第二列代表 x2,第三列代表 数据标签 用 0/ ...
- 【机器学习具体解释】SVM解二分类,多分类,及后验概率输出
转载请注明出处:http://blog.csdn.net/luoshixian099/article/details/51073885 CSDN−勿在浮沙筑高台 支持向量机(Support Vecto ...
- 二分类模型之logistic
liner classifiers 逻辑回归用在2分类问题上居多.它是一个非线性的回归模型,其最大的好处恰恰是可以解决二元类问题,目前在金融行业,基本都是使用Logistic回归来预判一个用户是否为好 ...
- 常量,字段,构造方法 调试 ms 源代码 一个C#二维码图片识别的Demo 近期ASP.NET问题汇总及对应的解决办法 c# chart控件柱状图,改变柱子宽度 使用C#创建Windows服务 C#服务端判断客户端socket是否已断开的方法 线程 线程池 Task .NET 单元测试的利剑——模拟框架Moq
常量,字段,构造方法 常量 1.什么是常量 常量是值从不变化的符号,在编译之前值就必须确定.编译后,常量值会保存到程序集元数据中.所以,常量必须是编译器识别的基元类型的常量,如:Boolean ...
- iOS开发一个用户登录注册模块需要解决的坑
最近和另外一位同事负责公司登录和用户中心模块的开发工作,开发周期计划两周,减去和产品和接口的协调时间,再减去由于原型图和接口的问题,导致强迫症纠结症状高发,情绪不稳定耗费的时间,能在两周基本完成也算是 ...
- iOS 11开发教程(二)编写第一个iOS 11应用
iOS 11开发教程(二)编写第一个iOS 11应用 编写第一个iOS 11应用 本节将以一个iOS 11应用程序为例,为开发者讲解如何使用Xcode 9.0去创建项目,以及iOS模拟器的一些功能.编 ...
随机推荐
- VxWorks笔记
利用vxWorks可裁减可动态链接特性进行模块调试的分析 a) 首先,可将root.c简化,去掉大部分不需要加载的模块和想要调试的模块,以加快系统启动速度. b) 如果vxworks加载的.o中引用了 ...
- idea新建工程项目结构
一:新建项目 File--->new---->project--->Empt Project(空项目)--->next--->java_web--->Finish ...
- MySQL Lock--INSERT加锁规则
Insert操作加锁规则 1.INSERT操作会对新插入的记录加行锁(ROW LOCK)+排他锁(X LOCK),不会产生任何GAP锁和Next-Key锁 2.在插入记录前,会向插入记录所在位置申请意 ...
- day 52 js学习 DOM 和BOM
前戏 到目前为止,我们已经学过了JavaScript的一些简单的语法.但是这些简单的语法,并没有和浏览器有任何交互. 也就是我们还不能制作一些我们经常看到的网页的一些交互,我们需要继续学习BOM和DO ...
- Apache按天截断日志工具,无法生成访问日志
rotatelogs实现Apache的日志轮转 httpd.conf配置如下: ErrorLog "logs/error_log" CustomLog "|$/usr/l ...
- Fedora Redhat Centos 有什么区别和关系?
Fedora Redhat Centos 有什么区别和关系? 经常看到有人讨论服务器的操作系统,比如 Readhat 和 Centos,还有 Ubuntu Server. 可能 Ubuntu Serv ...
- 23 模块 os sys pickle json
一. os模块 主要是针对操作系统的 用于文件操作 二. sys 模块 模块的查找路径 sys.path 三 pickle 模块 1. pickle.dumps(对象) 序列化 ...
- CloudStack学习-3
此次试验主要是CloudStack结合openvswitch 背景介绍 之所以引入openswitch,是因为如果按照之前的方式,一个网桥占用一个vlan,假如一个zone有20个vlan,那么岂不是 ...
- dojo:如何显示ListBox风格的选择框
常见的选择框控件:Selelct.FilteringSelect和ComboBox都是下拉框风格,而不是ListBox风格. dojo还提供了一个dijit.form.MultiSelect控件可以解 ...
- linux系统中安装JDK 查看安装的ava版本
一.安装JDK 1.在/usr/目录下创建java目录 [root@localhost ~]# mkdir/usr/java[root@localhost ~]# cd /usr/java 2.下载j ...