赞
踩
adaboost理论部分(公式)后期补充
"""
此处不构建太复杂的数据集,不然可能后面用单层决策树时候,效果不好。
因为用任何一个单层决策树都无法完全分开这五个数据
"""
import numpy as np
def loadSimpData():
datMat = np.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
loadSimpData()
(matrix([[1. , 2.1],
[2. , 1.1],
[1.3, 1. ],
[1. , 1. ],
[2. , 1. ]]), [1.0, 1.0, -1.0, -1.0, 1.0])
""" 单层决策树是一个很弱很弱的分类器,因为它只选择了一个特征就不继续选择了。 第一个函数stumpClassify()是通过阈值比较对数据进彳了分类的。 所有在阈值一边的数据会分到类别-i, 而在另外一边的数据分到类别+l。该函数可以通过数组过 滤来实现,首先将返回数组的全部元素设置为1 ,然后将所有不满足不等式要求的元素设置为-1。 可以基于数据集中的任一元素进行比较,同时也可以将不等号在大于、小于之间切换。 Parameters: dataMatrix - 数据矩阵 dimen - 第dimen列,也就是第几个特征 threshVal - 阈值 threshIneq - 标志 Returns: retArray - 分类结果 """ def stumpClassify(dataMatrix,dimen,threshVal,threshIneq): #初始化retArray为1 retArray = np.ones((np.shape(dataMatrix)[0],1)) if threshIneq == 'lt': retArray[dataMatrix[:,dimen] <= threshVal] = -1.0#如果小于阈值,则赋值为-1 else: retArray[dataMatrix[:,dimen] > threshVal] = -1.0#如果大于阈值,则赋值为-1 return retArray """ buildStump()和三层for循环的详细解释《机器学习实战》书籍中写了。 此步骤利用单层决策树寻找到分类错误率最低的阈值即可。 Parameters: dataArr - 数据矩阵 classLabels - 数据标签 D - 样本权重 Returns: bestStump - 最佳单层决策树信息 minError - 最小误差 bestClasEst - 最佳的分类结果 """ def buildStump(dataArr,classLabels,D): dataMatrix = np.mat(dataArr); labelMat = np.mat(classLabels).T m,n = np.shape(dataMatrix) numSteps = 10.0; bestStump = { }; bestClasEst = np.mat(np.zeros((m,1))) minError = float('inf')</
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。