机器学习Sklearn实战——梯度提升树二分类原理
一、算法使用
(一)创建
(二)参数调整
cross_val_score:求单一参数最合适的值(KNN)
GridSearchCV网格搜索:多参数组合最优的值
标准:准确率,精确率,召回率,F1
(三)数据清洗
(四)操作数据库(数据清洗)
(五)数据分析,可视化(Excel可视化的表)
二、算法原理
KNN原理,距离(调整,p=1,p=2设置p=1,p=2调和)
决策树原理:熵、gini、梯度上升、梯度下降
随机森林,极限森林:简单决策树+随机性
梯度提升树(回归):每棵树画出来,显示,推导
梯度提升分类树
import numpy as np
from sklearn.ensemble import GradientBoostingClassifier
from sklearn import tree
import matplotlib.pyplot as plt
xi = np.arange(1,11)
yi = np.array([0,0,0,1,1]*2)gbdt = GradientBoostingClassifier(n_estimators=3,max_depth=1)
gbdt.fit(xi.reshape(-1,1),yi)
gbdt.estimators_.shape #3是3棵树,1是二分类问题(3分类问题是3 4分类问题是4)
plt.figure(figsize=(9,6))
_ = tree.plot_tree(gbdt[0,0],filled = True)
np.var(yi)
0.24F0 = np.log(4/6)
-0.40546510810816444#残差,概率,负梯度
yi_1 = yi - 1/(1+np.exp(-F0))
yi_1
array([-0.4, -0.4, -0.4, 0.6, 0.6, -0.4, -0.4, -0.4, 0.6, 0.6])#计算每个裂分点mse
mse1 = []
for i in range (1,11):if i == 10:mse1.append(np.var(yi_1))else:mse1.append((np.var(yi_1[:i])*i+np.var(yi_1[i:])*(10-i))/10)
mse1
[0.22222222222222224,0.2,0.17142857142857143,0.225,0.23999999999999994,0.23333333333333334,0.20952380952380958,0.15,0.2,0.24]
np.var(yi_1[:8])
np.var(yi_1[8:])
0.1875
0.0
np.round(yi_1[:8].sum()/(((yi[:8]-yi_1[:8])*(1-yi[:8]+yi_1[:8])).sum()),3)
np.round(yi_1[8:].sum()/(((yi[8:]-yi_1[8:])*(1-yi[8:]+yi_1[8:])).sum()),3)
结果:
-0.625
2.5
#第一棵树数据预测的值
y_1 = [-0.625]*8 +[2.5]*2
y_1 = np.asarray(y_1)
y_1gbdt[0,0].predict(xi.reshape(-1,1))
结果:
array([-0.625, -0.625, -0.625, -0.625, -0.625, -0.625, -0.625, -0.625,2.5 , 2.5 ])
array([-0.625, -0.625, -0.625, -0.625, -0.625, -0.625, -0.625, -0.625,2.5 , 2.5 ])
I=1,xi属于集合内 I=0,xi不属于集合内
#learning_rate = 0.1
F1 = F0 + y_1*0.1
F1.round(4)
结果:
array([-0.468 , -0.468 , -0.468 , -0.468 , -0.468 , -0.468 , -0.468 ,-0.468 , -0.1555, -0.1555])
yi_2 = yi - 1/(1+np.exp(-F1))
yi_2.round(4)
结果:
array([-0.3851, -0.3851, -0.3851, 0.6149, 0.6149, -0.3851, -0.3851,-0.3851, 0.5388, 0.5388])
plt.figure(figsize=(16,8))
tree.plot_tree(gbdt[1,0],filled = True)
#计算每个裂分点mse
mse1 = []
for i in range (1,11):if i == 10:mse1.append(np.var(yi_2))else:mse1.append((np.var(yi_2[:i])*i+np.var(yi_2[i:])*(10-i))/10)
mse1
mse1 = np.asarray(mse1)
mse1
结果:
array([0.20620922, 0.18564623, 0.1592081 , 0.21054968, 0.22242788,0.2186899 , 0.19976152, 0.15 , 0.19036645, 0.22265961])
np.round(yi_2[:8].sum()/(((yi[:8]-yi_2[:8])*(1-yi[:8]+yi_2[:8])).sum()),3)
np.round(yi_2[8:].sum()/(((yi[8:]-yi_2[8:])*(1-yi[8:]+yi_2[8:])).sum()),3)
结果:
-0.571
2.168
np.var(yi_2[:8])
np.var(yi_2[8:])
0.1875
0.0
机器学习Sklearn实战——梯度提升树二分类原理相关推荐
- 【机器学习】梯度提升树(GBDT)的原理小结
在集成学习之Adaboost算法原理小结中,我们对Boosting家族的Adaboost算法做了总结,本文就对Boosting家族中另一个重要的算法梯度提升树(Gradient Boosting De ...
- 六、(机器学习)-Adaboost提升树-二分类和多分类(最清晰最易懂)
Adaboost提升树 一.bagging与boosting bagging即套袋法,通过对训练样本重新采样的方法得到不同的训练样本集,在这些新的训练样本集上分别训练学习器,最终合并每一个学习器的结果 ...
- 机器学习Sklearn实战——极限森林、梯度提升树算法
极限森林 from sklearn.ensemble import ExtraTreesClassifier,RandomForestClassifier from sklearn.tree impo ...
- NLP之NBGBT:基于朴素贝叶斯(count/tfidf+网格搜索+4fCrva)、梯度提升树(w2c+网格搜索+4fCrva)算法对IMDB影评数据集进行文本情感分析(情感二分类预测)
NLP之NB&GBT:基于朴素贝叶斯(count/tfidf+网格搜索+4fCrva).梯度提升树(w2c+网格搜索+4fCrva)算法对IMDB影评数据集进行文本情感分析(情感二分类预测) ...
- 【机器学习】集成学习之梯度提升树GBDT
Boosting方法的核心思想是对错分类的样本给予更高关注度,也就是样本权重,在提升树中与之对应的就是残差,在梯度提升树中就是梯度了. Regression Decision Tree:回归树 回归树 ...
- 【sklearn学习】集成算法之梯度提升树GBDT
梯度提升树(Gradient Boosting Decision Tree, GBDT)是提升法中的代表算法 GBDT中包含Boosting三要素 损失函数:用以衡量模型预测结果与真实结果的差异 弱评 ...
- 【机器学习】深入剖析梯度提升决策树(GBDT)分类与回归
1. 梯度提升决策树概述 梯度提升决策树(Gradient Boosting Decision Tree,GBDT)是以决策树为基学习器的一种Boosting算法,它在每一轮迭代中建立一个决策树,使当 ...
- 机器学习教程 之 梯度提升方法:GBDT处理分类问题
Gradient boosting是一种广泛被用于回归.分类和排序任务的集成方法,于2001年被Friedman提出 该类算法通过以***上一轮基学习器的误差的负梯度***为训练目标训练本轮的基学习器 ...
- 深度学习核心技术精讲100篇(二十)-如何通过树模型实现梯度提升树(GBDT)+LR,随机森林(RandomForest) +LR
前言 在讲如何通过树模型做特征工程之前,首先让我们回顾一下一个机器学习(除去深度学习项目部分)项目的大致流程: 从业务场景中抽象出问题--分类问题,回归问题,还是聚类问题等, 接下来是数据获取,数据清 ...
最新文章
- pandas使用applymap函数替换dataframe的内容或者数值:applymap函数使用字典替换多个列的内容(数值)
- 使用LSTM进行莎士比亚风格诗句生成
- MaxCompute助力ofo实现精细化运营:日订单超3200万、整体运行效率提升76%
- 用栈来表示队列,用队列来表示栈
- php setrawcookie,PHP setrawcookie() 函数
- 【人脸识别】人脸识别必读论文
- 在pycharm里做echarts_用 ECharts 做出漂亮的数据统计图
- ubuntu apache 完全删除
- ashx中Response.ContentType的常用类型
- 【kafka】服务器上Kafka启动 Cannot allocate memory
- 抗压力就是一切!!!
- scala中sorted,sortWith,sortBy用法详解
- 【彩色图像直方图统计】matlab统计RGB、HSV、Lab图像灰度,以直方图形式显示
- rba有哪几個主要組成部分_RBA管理体系有哪些
- 计算机软件的初始密码,怎么设置电脑软件密码
- http 502错误怎么解决?
- 【起航计划ObjC 001】印第安老斑鸠ObjC的幻想 ---- Ubuntu下安装并使用Obj-C
- 2018年年末总结及2019年规划
- ios备份应用数据_如何在iOS设备之间备份和复制数据
- 名帖181 黄庭坚 行书《苦笋赋》
热门文章
- python语言面试基础_【python面试指北】1.语言基础
- alertdialog怎么水平排列_轻钢二级吊顶怎么安装
- 双任务延时原理与空闲任务
- 数组传参中形参的秘密,以及数组名当作函数实际参数的特点,以及二维数组,以及外部变量和全局变量
- c++的引用是什么意思?怎么回事?
- python DataFrame join()
- Python量化(八)下影线选股法
- numpy 矩阵的用法
- 灾难恢复级别_防患于未然:灾难恢复全攻略,助你有效恢复业务数据
- 文巾解题 178. 分数排名