【机器学习算法-python实现】Adaboost的实现(1)-单层决策树(decision stump)
2023-09-27 14:27:08 时间
(转载请注明出处:http://blog.csdn.net/buptgshengod)
上一节学习支持向量机,感觉公式都太难理解了,弄得我有点头大。不过这一章的Adaboost线比较起来就容易得多。Adaboost是用元算法的思想进行分类的。什么事元算法的思想呢?就是根据数据集的不同的特征在决定结果时所占的比重来划分数据集。就是要对每个特征值都构建决策树,并且赋予他们不同的权值,最后集合起来比较。 比如说我们可以通过是否有胡子和身高的高度这两个特征来来决定一个人的性别,很明显是否有胡子可能在判定性别方面比身高更准确,所以在判定的时候我们就赋予这个特征更大的权重,比如说我们把权重设成0.8:0.2。这样就比0.5:0.5的权重来的更准确些。 2.构建决策树 接着我们来构建决策树。我们的决策树要实现主要两个功能,一个是找出对结果影响最大的特征值。另外一个功能是找到这个特征值得阈值。阈值就是,比方说阈值是d,当特征值大于d结果为1,当特征值小于d结果为0。 首先看下数据集,是一个两个特征值的矩阵。ef loadSimpData(): datMat = matrix([[ 1. , 2.1], [ 2. , 1.1], [ 1.3, 1. ], [ 1. , 1. ], [ 2. , 1. ]]) classLabels = [1.0, 1.0, -1.0, -1.0, 1.0] return datMat,classLabels
接着是树的分类函数。这个函数在下面的循环里要用到,作用很简单,就是比对每一列的特征值和目标函数,返回比对的结果。四个参数分别是(输入矩阵,第几列,阈值,lt或gt)
def stumpClassify(dataMatrix,dimen,threshVal,threshIneq):#just classify the data retArray = ones((shape(dataMatrix)[0],1)) if threshIneq == lt: retArray[dataMatrix[:,dimen] = threshVal] = -1.0 else: retArray[dataMatrix[:,dimen] threshVal] = -1.0 return retArray
最后是构建二叉树函数,通过循环比较得到最佳特征值和它的阈值。D是初始矩阵的权重。
def buildStump(dataArr,classLabels,D): dataMatrix = mat(dataArr); labelMat = mat(classLabels).T m,n = shape(dataMatrix) numSteps = 10.0; bestStump = {}; bestClasEst = mat(zeros((m,1))) minError = inf #init error sum, to +infinity for i in range(n):#loop over all dimensions rangeMin = dataMatrix[:,i].min(); rangeMax = dataMatrix[:,i].max(); stepSize = (rangeMax-rangeMin)/numSteps for j in range(-1,int(numSteps)+1):#loop over all range in current dimension for inequal in [lt, gt]: #go over less than and greater than threshVal = (rangeMin + float(j) * stepSize) predictedVals = stumpClassify(dataMatrix,i,threshVal,inequal)#call stump classify with i, j, lessThan errArr = mat(ones((m,1)))
weightedError = D.T*errArr #calc total error multiplied by D #print "split: dim %d, thresh %.2f, thresh ineqal: %s, the weighted error is %.3f" % (i, threshVal, inequal, weightedError) if weightedError minError: minError = weightedError bestClasEst = predictedVals.copy() bestStump[dim] = i bestStump[thresh] = threshVal bestStump[ineq] = inequal return bestStump,minError,bestClasEst
3.结果 当我们假设初始权重相同(5行数据也就是都是0.2),得到结果
{dim: 0, ineq: lt, thresh: 1.3}——第一个特征值权重最大,阈值是1.3
[[ 0.2]]——错误率0.2,也就是五个错一个
[[-1.]————判断结果,第一个数据错误
[ 1.]
[-1.]
[-1.]
[ 1.]]
4.代码下载下载地址(Decision Stump)
参考文献:
[1] machine learning in action,Peter Harrington
Python机器学习算法入门教程(四) 我们知道有监督学习分为“回归问题”和“分类问题”,前面我们已经认识了什么是“回归问题”,从本节开始我们将讲解“分类问题”的相关算法。在介绍具体的算法前,我们先聊聊到底什么是分类问题。
Python机器学习算法入门教程(三) 本节讲解如何构建线性回归算法中的“线性模型”,所谓“线性”其实就是一条“直线”。因此,本节开篇首先普及一下初中的数学知识“一次函数”。
Python机器学习算法入门教程(二) 常言道“工欲善其事,必先利其器”,在学习机器学习算法之前,我们需要做一些准备工作,首先要检查自己的知识体系是否完备,其次是要搭建机器学习的开发环境。
Python机器学习算法入门教程(一)(下) 机器学习(Machine Learning,简称 ML)是人工智能领域的一个分支,也是人工智能的核心,其涉及知识非常广泛,比如概率论、统计学、近似理论、高等数学等多门学科。
Python机器学习算法入门教程(一)(上) 机器学习(Machine Learning,简称 ML)是人工智能领域的一个分支,也是人工智能的核心,其涉及知识非常广泛,比如概率论、统计学、近似理论、高等数学等多门学科。
Python机器学习算法入门指南(全) 机器学习 作为人工智能领域的核心组成,是计算机程序学习数据经验以优化自身算法,并产生相应的“智能化的”建议与决策的过程。
机器学习实战 | Python机器学习算法应用实践 本篇文章详解机器学习应用流程,应用在结构化数据和非结构化数据(图像)上,借助案例重温机器学习基础知识,并学习应用机器学习解决问题的基本流程。
傲海 著有《机器学习实践应用》,阿里云机器学习PAI产品经理,个人微信公众号 ldquo;凡人机器学习 rdquo;。
相关文章
- Python 解密HTTP协议中的br压缩数据
- 【机器学习算法-python实现】协同过滤(cf)的三种方法实现
- 超详细,少数人才知道的 Python 函数定义详解
- Python和R代码机器学习算法速查对比表
- 《NLTK基础教程——用NLTK和Python库构建机器学习应用》——2.1 何谓文本歧义
- 《NLTK基础教程——用NLTK和Python库构建机器学习应用》——2.4 标识化处理
- 《NLTK基础教程——用NLTK和Python库构建机器学习应用》——2.5 词干提取
- 《NLTK基础教程——用NLTK和Python库构建机器学习应用》——2.6 词形还原
- 《NLTK基础教程——用NLTK和Python库构建机器学习应用》——导读
- 《Python机器学习实践指南》——1.3 设置机器学习的环境
- 《Python机器学习——预测分析核心算法》——1.5 构建预测模型的流程
- 《Python机器学习——预测分析核心算法》——1.6 各章内容及其依赖关系
- Python机器学习零基础理解随机森林算法
- Python机器学习零基础理解支持向量机
- Python机器学习零基础理解K近邻算法
- 『迷你教程』机器学习的中心极限定理及Python实现
- 轻松构建自己的Python开发环境,进入机器学习新世界
- 11. python爬虫——selenium模块综合使用教程
- 机器学习算法与Python实践之(二)支持向量机(SVM)初级
- Python 基础 之 多任务 Process 进程知识点的简单整理,以及对应的使用(进程队列,进程池,进程池队列等)
- 机器学习——人工神经网络之BP算法编程(python二分类数据集:马疝病数据集)