做图片推广的网站吗管理咨询师

当前位置: 首页 > news >正文

做图片推广的网站吗,管理咨询师,网站首页素材,android手机网站开发目录 一、介绍发展优点缺点基本原理 二、熵1、熵2、条件熵3、信息增益4、信息增益率 三、基尼系数四、ID3算法1、建树过程2、优点3、缺点 五、C4.51、二分法处理连续变量1、流程#xff1a;2、示例 2、缺点 六、CART1、连续数据处理2、离散数据处理3、CART回归原理1、均方误差… 目录 一、介绍发展优点缺点基本原理 二、熵1、熵2、条件熵3、信息增益4、信息增益率 三、基尼系数四、ID3算法1、建树过程2、优点3、缺点 五、C4.51、二分法处理连续变量1、流程2、示例 2、缺点 六、CART1、连续数据处理2、离散数据处理3、CART回归原理1、均方误差2、示例 4、缺失值5、CART建树原理总结 七、剪枝1、前剪枝2、后剪枝 八、分类模型评估指标1、判别模型1、混淆矩阵2、ROC3、PR 2、排序模型1、K-S2、GINI系数 九、交叉验证参数搜索1、交叉验证2、网格搜索3、随机搜索4、贝叶斯搜索5、参数搜索总结 十、反欺诈示例1、读取数据集2、查看数据集情况3、拆分数据集4、建立决策树模型5、使用网格搜索优化模型6、使用随机搜索优化模型7、使用贝叶斯搜索优化模型8、决策树可视化9、模型预测及评估指标1、模型预测2、绘制评估指标 十一、使用pyspark实现1、读取数据2、数据向量化3、切分数据集4、创建和训练决策树模型5、模型预测、评估6、关闭资源 一、介绍 决策树说一种常用的机器学习算法它可以用于分类和回归问题。它通过一系列的判断条件对数据进行分类最终形成一个树形结构。
发展 优点 易于理解和解释非常直观地展示每个决策逻辑。 可处理各种数据可以处理数字和类别数据也可以处理缺失值和异常值。 自动特征选择构建时会自动进行特征选择可以帮助找出哪些特征对决策影响最大。 灵活性可与其他机器学习模型结合形成强大的集成模型如随机森林。 模拟人类决策过程
缺点 容易过拟合当模型复杂度较高或训练数据较少时需要进行剪枝等操作。对噪声和异常值敏感可能会导致模型的不稳定性。不适用于高维数据因为在高维空间中决策树算法很难找到合适的划分点。不能处理连续型输出变量决策树算法不能直接处理连续型输出变量需要进行离散化等操作。 基本原理 决策树是一个分层组织结构每个节点根据特征值将数据空间分割成若干部分。 对空间进行划分的核心问题有两个 在哪个轴自变量上做分割在轴自变量上的哪个点做分割 为了提高计算效率决策树采用了贪婪算法对空间进行分割即在当前空间树节点中将划分正负效果最好的自变量作为下一步划分的优先选择而该自变量上划分正负例最好的点是分割点。 决策树会对自变量x的每个取值进行遍历并在每个取值上计算划分后的空间样本纯净度。样本越纯净分割效果越好。 量化决策树选择特征时的重要程度指标主要分为2大类 熵基尼不纯度 二、熵 1、熵 熵是由香农提出用来描述混乱程度的指标。熵越大每个类别的占比越接近样本越混乱熵越小每个类别的占比差异越大样本越纯净。 信息熵计算公式 Info(D) -Σ(p(i) * log2(p(i)))2、条件熵 引入某一个自变量后观察对因变量的影响即为条件熵。 对于数据集D考虑特征A求它的信息条件熵。 infoDj对Dj的数据集的熵 |Dj|中的Dj表示数据集D被A这样的自变量的i个水平切割之后样本的数量 |D|表示样本所有数量 举例计算 目标变量是buys_computer这里加入自变量age计算buys_computer的条件熵 首先判断age的水平有三个小于等于30、3140、大于40 信息熵Info(age≤30) - 25 * log22/5 35 * log23/5 备注log2中2为底数 条件熵Info(buys_computer | age≤30) 514 * Info(age≤30) 同理 Info(buys_computer | 30age40) 414 * Info(30age40) Info(buys_computer | 40age) 514 * Info(30age40) Info(buys_computer | age) Info(buys_computer | age≤30) Info(buys_computer | 40age) Info(buys_computer | 40age) 0.694 3、信息增益 计算公式信息增益 熵 - 条件熵如图所示 信息增益代表引入变量A之后随机变量D混乱程度或纯净程度的变化。如果变化越大说明特征影响越大特征越重要。 一个样本按照特征A被切为多个部分后信息熵会下降严格来说是不增的下降得越多说明切分效果越好。 信息增益是用于度量切分前后信息熵变化的指标信息增益越大意味着切分效果越好。 分别计算age、income、student、credit_rating自变量的信息增益 Info(buys_computer) - ( 9/14log2(914) 5/14log2(514) ) 0.940 Gain(age) Info(buys_computer) - P(buys_computer | age) 0.940 - 0.694 0.246 同理 Gain(income) 0.029 Gain(student) 0.151 Gain(credit_rating) 0.048 4、信息增益率 信息增益率在信息增益的基础上除以相应自变量信息熵 公式 对特征A求信息增益率特征A的信息增益 / 图中SplitInfo公式分子Dj为 特征A在D的j个水平的数量分子D为总样本数量 SplitInfo衡量了特征的熵特征的分类水平数量越多该值越大 用它对信息增益进行调整可以减少分类水平数量的差异导致的模型选择分类变量时的偏差。 计算SplitInfo和age的信息增益率 SplitInfo ageD - 5/14log25/14 - 4/14log24/14- 514*log25/14 1.577 备注age为公式中的A GainRate(age) Gain(age) / SplitInfo ageD 0.246 / 1.577 0.156 三、基尼系数 与熵相反基尼系数越小差异越大。 计算公式 与信息熵类似当树节点中不同类别的样本比例一致时P1P2…Pm)基尼系数最高。 参考条件熵的概念按照特征A进行分裂后的基尼系数定义为 这是按照特征A分裂后各子节点的基尼系数加权和权重为每个子节点的样本量中父节点的比例。 仍计算样本及age变量的基尼系数 Gini(D) 1 - [ ( 914 )2 (514)2 ] 0.549 备注2表示平方 Gini age(D) 514[ 1- (25)2 - (35)2 ] 414[ 1- (0/4)2 - (44)2 ] 514[ 1- (35)2 - (25)2 ] 0.343 四、ID3算法 用信息增益作为节点分裂条件的算法。 1、建树过程 仍用电脑销售数据为例 Gain(age) 0.246 Gain(income) 0.029 Gain(student) 0.151 Gain(credit_rating) 0.048 根据信息增益自变量age的信息增益值最大所以第一层决策树应该为age切分水平分别为≤30、3140、40 然后在第一层决策树的各个节点上重新计算各变量的信息增益然后筛选出最重要的变量以此为根据建立第二层决策树划分情况如下 决策树的规则集
2、优点 易解释可以生成可视化的决策过程。可以处理离散特征和连续特征。可以处理多类别问题。在一定条件下对缺失值和异常值具有较好的容忍性。 3、缺点 无剪枝策略容易过拟合产生复杂的树结构对于包含大量特征和类别的数据集决策树可能过于复杂导致计算和存储开销增加强调信息增益倾向于选择具有更多水平特征的值导致结果不准确没有考虑缺失值存在缺失值时无法使用特征分类很多时信息增益可能导致偏差只能用于分类。 五、C4.5 C4.5算法在继承ID3算法思路的基础上将首要变量筛选的指标由信息增益改为信息增益率信息增益率最大的特征作为划分特征并加入了对连续变量的处理方法。 C4.5克服了ID3的几个缺点 用信息增益选择属性时偏向于选择分枝比较多的属性值即取值多的属性不难处理连续性数据可以处理缺失值通过概率权重的方法来处理。 1、二分法处理连续变量 1、流程 将所有数据样本按照属性feature的值由小到大进行排列得到属性feature的取值序列(x1,x2,…,xn)在序列(x1,x2,…,xn)中一共有N-1种二分方法共产生N-1个分割阈值。例如对于第i种二分方法其二分阈值为: (xi x(i1) ) /2 此阈值将数据集划分为2个字数据集(x1,x2,…,xi),(xi1,…xn)由此可以计算二分方法之后的信息增益。分别计算N-1种二分方法下的信息增益选取信息增益最大的二分结果作为对属性feature的划分结果并记录此时的二分阈值。 2、示例 Info(D) -35 * log2(35) - 25 * log2(25) 0.971 年收入从小到大排列7095100120125 中值T 82.597.5110122.5 T 82时 Info(T82.5) -34 * log2(34) - 14 * log2(14) 0.8113 Info(T82.5) -log2(11) 0 Gain(T82.5) 0.971 - (45 * 0.8113 15 * 0 ) 0.32
T 97.5时 Info(T97.5) -33 * log2(33) 0 Info(T97.5) -22 * log2(22) 0 Gain(T97.5) 0.971 - (35 * 0 25 * 0) 0.971 选择信息增益最大的划分点进行划分。
2、缺点 C4.5决策树算法一种多叉树运算速度慢C4.5决策树算法使用熵模型作为特征选择需要大量的对数运算C4.5决策树算法在构造树的过程中对数值属性需要按照大小进行排序从中选择一个分割点所以只适合能够驻留于内存的数据集对训练集大的无法在内存中储存时程序无法运行C4.5决策树算法只能用于分类。 六、CART 采用基尼系数选择最优分割变量及最优分割点的衡量指标。可用于分类和回归。 1、连续数据处理 m个样本的连续特征A有m个值从小到大排列a1,a2,…,amCART取相邻两样本值的平均数做划分点一共有m-1个其中第i个划分点Ti表示 Ti ( a i a(i1) ) / 2分别计算以这m-1个点作为二分类时的基尼系数选择基尼系数最小的点作为该连续特征的二元离散分类点比如取到的基尼系数最小的点为at则小于at的值类别为1大于at的值类别为2这样就做到了连续特征的离散化。最后选择基尼系数最小的切分点进行切分方式类似于C4.5。 2、离散数据处理 方法不停的二分特征 如果有三个类别CART会考虑把特征A分为A1、A2A3A1A2、A3A2、A3A1三种组合找到基尼系数最小的组合进行划分 3、CART回归原理 当使用CART用作回归算法时采用均方误差MSE作为节点分裂依据。均方误差衡量了预测值与真实值之间的差异均方误差越小说明模型预测能力越好。CART回归树的构建过程与分类树类似。首先遍历每个特征的相邻树均值用该取值将数据集分成2个部分。然后分别计算两部分数据的均方误差并求和。最后选择使得均方误差值和最小的特征及其对应的取值作为最优特征和最优切分点。在构建完整颗树之后可以对树进行剪枝以避免过拟合。剪枝过程中会删除一些不重要的节点以提高模型的泛华能力。在进行预测时CART回归树会根据测试样本的特征值沿着树结构进行搜索直到找到对应的叶子节点。叶子节点中包含了许多训练样本的目标值这些目标值的平均值就是测试样本的预测值。 1、均方误差 均方误差MSE是一种常用的回归模型评估指标用于衡量预测值与真实值之间的差异计算公式
2、示例 假设有一组数据自变量X为1、2、3、4、5因变量Y与X相对应Y值分别为1、2、3、4、5 我们会遍历12/21.5、232.5、34/23.5、45/24.5四个切分点。对于每个切分点都会用它把数据集分为2部分并计算这2部分数据的均方误差最后发现当切分点为2.5时均方误差最小。 对于第一部分有2个样本目标值对应的平均值为12/21.5第一部分的均方误差为1-1.522-1.522 0.25 对于第二部分有3个样本目标值对应的平均值为345/34第二部分的均方误差为3-42 4-425-423 0.67 最后将2部分均方误差相加总的均方差为0.250.67 0.92 这2部分数据对于了CART回归树的2个叶子节点。对于第一个叶子节点它包含了2个样本的目标值这些目标值的均值为12/21.5。因此当测试样本落入第一个叶子节点时 它的预测值为1.5。 同理对于第二个叶子节点它包含了三个样本的目标值这些目标值的均值为345/34。因此当测试样本落入第二个叶子节点时 它的预测值为4。 4、缺失值 在sklearn中决策树不支持缺失值因此在使用sklearn的cart决策树算法前需要先对数据预处理以填补或删除缺失值。根据业务理解处理缺失值一般缺失值少于20%时连续变量可用均值或中位数填补分类变量不需填补单算一类即可或用众数填补。缺失值在20%80%时填补。另外每个有缺失值的变量可用生成一个指示哑变量参与建模。缺失值大于80%时每个缺失值的变量生成一个指示哑变量参与建模不使用原始变量。 5、CART建树原理总结 易于理解模型简单不需要对数据预处理可以处理连续、离散数据对缺失值和异常值有很好的容错性只能建立二叉树对连续性属性处理方式同C4.5只不过用GINI系数作为划分属性依据可用于分类、预测可以使用均方误差代替基尼系数作为损失函数的计算基础此时CART用于回归对于离散型C4.5理论上有多少个离散值就有多少个分裂节点但CART生成一颗二叉树每次分裂只产生2个节点。 七、剪枝 完全生长的决策树虽然预测精度提高了但会使得决策树的复杂度升高泛华能力减弱所以需要剪枝。 1、前剪枝 用于控制树的生成规模控制决策树最大深度控制树中父节点和子节点的最少样本量或比例。 2、后剪枝 删除没有意义的分组计算节点中目标变量预测精度或误差综合考虑误差与复杂度进行剪枝。 相对来说前剪枝用的更多。 八、分类模型评估指标 判别类给出明确结果比如是、否 排序类不需给出明确结论只需给出01之间的分值概率 1、判别模型 1、混淆矩阵 accuracy(准确率) precision(精确率)在所有被分类为正例的样本中真正上正例的比例 recall(召回率)实际为整理的样本中被预测为正例的样本比例 F1-score 特异度specificity实际为负的样本中有多大概率被预测出来SP TN /FPTN)
2、ROC ROC曲线又称接收者操作特征曲线描述分类预测模型命中和误判率之间的一种图形化方法以真阳性率TPR灵敏度为纵坐标假阳性率FPR1-特异度为横坐标
3、PR PR曲线和ROC曲线类似PR曲线是precision和recall的点连成的线。 PR曲线通常用于评估二分类器的性能特别是在数据不平衡的情况下。数据不平衡指的是正负样本数量相差悬殊。 PR曲线的目的是帮助我们选择最佳阈值以便在精确率和召回率之间取得平衡。它也可以用来比较不同分类器的性能。 如果一个分类器的PR曲线完全位于另一个分类器的PR曲线上方那么前者的性能优于后者如果2个分类器的曲线相交那么它们在不同的精确率/召回率权衡下表现不同PR曲线越靠近右上角分类器性能越好。 2、排序模型 ROC不再重复说明 1、K-S K-S统计量用于评价模型对好/坏客户的区分能力KS值越大表示模型能够将正负例例率分开的程度越大
2、GINI系数 九、交叉验证参数搜索 1、交叉验证 交叉验证Cross-Validation是一种用来评估模型泛化能力的方法方法比较多主流时K折交叉验证它将数据集分成n个子集每次使用n-1个子集作为训练数据剩余的一个子集作为测试数据。这个过程重复n次每次使用不同的子集作为测试数据最后计算n次测试的平均性能作为模型的最终性能。 在模型中一般对应的参数为cv参数类型为int以三折交叉验证为例 最后求均值 T mean( T1 , T2 , T3 ) 2、网格搜索 网格搜索grid search是一种用来选择模型超参数的方法。它通过遍历超参数的所有可能组合来寻找最优的超参数。通常网格搜索和交叉验证结合使用以便在选择超参数时考虑模型的泛化能力。 如图每个格子都是一组参数使用交叉验证测试参数效果。但是效率低下。 3、随机搜索 随机搜索random search与网格搜索类似但不是遍历所有可能的超参数组合而是从超参数空间中随机采样一定数量的组合进行评估。随机搜索的优点是计算成本较低且在高维超参空间中表现良好缺点是可能无法找到全局最优解。
4、贝叶斯搜索 贝叶斯优化上一种全局优化方法用于寻找黑盒函数的全局最优解它通过构建一个概率模型来描述目标函数并使用这个模型来指导下一步的采样点选择。贝叶斯优化的核心思想上利用贝叶斯定理来更新对目标函数的先验知识。在每一步迭代中它都会选择一个新的采样点并使用这个采样点的观测值来更新概率模型。然后它使用一个获取函数来缺点下一个采样点以便在探索和利用之间取得平衡。贝叶斯优化常用于机器学习的超参数选择因为它能够在较少的迭代次数内找到全局最优解并对噪声数据有很好的容错性。 优点贝叶斯调参采用高斯过程考虑之前的参数信息不断更新先验迭代次数少速度快针对凸问题依然稳健 5、参数搜索总结 理论上random search可以更快地将整个参数空间都覆盖到而不是像grid search一样从局部一点点去搜索。但是grid search和random search都属于无先验式的搜索有些地方称之为uninformed search盲目搜索即每一步的搜索都不考虑已经探索的点的情况这也是grid/random search的主要问题都是“偷懒式搜索”闭眼乱找一通。 而贝叶斯优化则是一种informed search启发式搜索会利用签名已经搜索过的参数的表现来推测下一步怎么走会比较好从而减少搜索空间提高搜索效率。某种意义上贝叶斯优化和人工调参比较像因为人工调参也会根据已有的结果及经验来判断下一步如何调参。 十、反欺诈示例 1、读取数据集 import numpy as np import pandas as pd import warnings warnings.filterwarnings(ignore)df pd.read_csv(./data/loan_net.csv) df.head()2、查看数据集情况 df.info() df.describe()# 因变量情况 df[flag].value_counts()# 确定自变量、因变量 label df.flag.copy() data df.iloc[:,:-1].copy()3、拆分数据集 from sklearn.model_selection import train_test_split train_data,test_data,train_label,test_label train_test_split(data,label,test_size0.4,train_size0.6,random_state1234,stratifylabel)len(train_data) len(test_data) 16392/(1639210929)4、建立决策树模型 from sklearn.tree import DecisionTreeClassifier from sklearn.model_selection import GridSearchCV,cross_val_score# 初始化决策树分类器 clf DecisionTreeClassifier(random_state42)# 交叉验证评估模型性能 cv_score cross_val_score(clf,train_data,train_label,cv5,scoringroc_auc)#查看模型效果 np.mean(cv_score)5、使用网格搜索优化模型

网格搜索

param_grid {criterion:[entropy,gini] , max_depth:[2,3,4,5], #min_samples_split:[2,4,6,8,10], # 停止分裂的最小样本量min_samples_leaf:[2,4,6,8,10], #停止分裂的叶子节点最小样本量class_weight:[{0:1,1:1},{0:1,1:2},{0:1,1:3}] #类别的权重 }dtree DecisionTreeClassifier() dtree_cv1 GridSearchCV(estimatordtree,param_gridparam_grid,scoringroc_auc,cv4) dtree_cv1.fit(train_data,train_label) 最优参数 dtree_cv1.best_params_最优参数评估效果 dtree_cv1.best_score_6、使用随机搜索优化模型

随机搜索

from sklearn.model_selection import RandomizedSearchCVparam_grid1 {criterion:[entropy,gini] , #max_depth:np.arange(2,20,step2), #min_samples_split:np.arange(2,20,step2), # 停止分裂的最小样本量min_samples_leaf:np.arange(2,20,step2), #停止分裂的叶子节点最小样本量class_weight:[{0:1,1:1},{0:1,1:2},{0:1,1:3}] #类别的权重 }dtree_RS RandomizedSearchCV(estimatordtree,param_distributionsparam_grid1,n_iter100,cv4,scoringroc_auc,n_jobs-1) dtree_RS.fit(train_data,train_label)最优参数 dtree_RS.best_params_最优参数评估 dtree_RS.best_score_7、使用贝叶斯搜索优化模型 from bayes_opt import BayesianOptimization def dtree_cv(max_depth,min_samples_split,min_samples_leaf):cvs cross_val_score(DecisionTreeClassifier(max_depthint(max_depth),min_samples_splitint(min_samples_split),min_samples_leafint(min_samples_leaf),random_state2),train_data,train_label,scoringroc_auc,cv4).mean()return cvs#建立贝叶斯优化对象 dtree_BO BayesianOptimization(dtree_cv,{max_depth:(2,10),min_samples_split:(2,25),min_samples_leaf:(2,25)} )#开始优化 dtree_BO.maximize()# 寻找最大值 dtree_BO.max8、决策树可视化

决策树可视化

import pydotplus from IPython.display import Image import sklearn.tree as tree %matplotlib inline# 获取网格搜索的最优模型 best_tree dtree_cv1.best_estimator_import pydotplus

生成dot文件

dot_data tree.export_graphviz(best_tree,out_fileNone,feature_namesdata.columns,max_depth3,class_namesTrue,filledTrue )# 用dot文件生成决策树图形 graph pydotplus.graph_from_dot_data(dot_data)# 如果在Jupyter Notebook中显示图形
if IPython in globals(): Image(graph.create_png()) # 保存图形为PNG文件
graph.write_png(decision_tree.png)# 显示出决策树 Image(graph.create_png())9、模型预测及评估指标 1、模型预测

利用决策树模型进行预测并且生成决策树评估指标

from sklearn.metrics import classification_report# 预测值 test_pre best_tree.predict(test_data)# 计算评估指标 print(classification_report(test_label,test_pre,digits3))2、绘制评估指标 import matplotlib.pyplot as plt from sklearn.metrics import precision_recall_curve,average_precision_score,roc_curve,auc# 绘制roc PR KS曲线 def plot_metrics_curve(test_label,train_label,test_pre,train_pre):fpr_test,tpr_test,th_test roc_curve(test_label,test_pre)fpr_train,tpr_train,th_train roc_curve(train_label,train_pre)precision_test,recalltest, precision_recall_curve(test_label,test_pre)precision_train,recalltrain, precision_recall_curve(train_label,train_pre)# roc curveplt.figure(figsize[6,6])plt.subplot(221)plt.plot(fpr_test,tpr_test,b–)plt.plot(fpr_train,tpr_train,c–)plt.xlabel(fpr)plt.ylabel(tpr)plt.title(roc:test is dotted line)#PR curveplt.subplot(222)plt.plot(recall_test,precision_test,b–)plt.plot(recall_train,precision_train,c–)plt.xlabel(recall)plt.ylabel(precision)plt.title(PR:test is dotted line)# KS curve,曲线按阈值降序排列所以需要1- threshold镜像plt.subplot(212)plt.plot(1-th_test,tpr_test,b–,labeltpr)plt.plot(1-th_test,fpr_test,b:,labelfpr)plt.plot(1-th_test,tpr_test-fpr_test,r-,labeltpr-fpr)plt.xlabel(score)plt.title(KS curve KS%.2f %max(tpr_test-fpr_test))

legend plt.legend(localsupper left,shadowTrue,frozensetx-large)plt.tight_layout()plt.show()# print ROC-AUCprint(TestAUC%.4f, %auc(fpr_test,tpr_test),TrainAUC%.4f %auc(fpr_train,tpr_train))# print average precision scoreprint(TestAP%.4f, %average_precision_score(test_label,test_pre),TrainAP%.4f, %average_precision_score(train_label,train_pre))test_pre best_tree.predict_proba(test_data)[:,1]

train_pre best_tree.predict_proba(train_data)[:,1]#绘制评估图形 #使用这个编写的函数绘制评估图形并计算评估指标 #预测概率 test_pre best_tree.predict_proba(test_data)[:,1] train_pre best_tree.predict_proba(train_data)[:,1]plot_metrics_curve(test_label,train_label,test_pre,train_pre)十一、使用pyspark实现 1、读取数据 from pyspark.sql import SparkSession from pyspark.ml.feature import VectorAssembler from pyspark.ml.classification import DecisionTreeClassifier from pyspark.ml.evaluation import MulticlassClassificationEvaluatorspark SparkSession.builder.appName(DecisionTreeModel).getOrCreate() # 初始化dfspark.read.csv(./data/dtree/loan_net.csv,headerTrue,inferSchemaTrue) #显示数据 df.show()2、数据向量化 assemblerVectorAssembler(inputCols[net_size,degree,average_neighbor_degree,percentage],outputColfeatures ) outputassembler.transform(df)3、切分数据集 train_data,test_dataoutput.randomSplit([0.7,0.3])4、创建和训练决策树模型 dtDecisionTreeClassifier(labelColflag,featuresColfeatures) dt_modeldt.fit(train_data)5、模型预测、评估 #使用测试集进行预测 predictionsdt_model.transform(test_data) #评估器 evaluatorMulticlassClassificationEvaluator(labelColflag,predictionColprediction,metricNamef1) f1_scoreevaluator.evaluate(predictions) print(f1score,f1_score)6、关闭资源 spark.stop()