徒手写代码之《机器学习实战》---adaboost算法(2) (在一个较难数据集上应用AdaBoost)

本文介绍了如何在一项困难的数据集——预测疝气病症的马匹病例上应用AdaBoost算法。通过单层决策树生成、自适应数据加载以及训练过程,展示了AdaBoost的分类能力。在测试集上进行评估并绘制ROC曲线,以展示算法的性能。
摘要由CSDN通过智能技术生成

在一个难数据集上应用 AdaBoost

此较难数据即逻辑回归算法中从疝气病症预测病马的数据

说明:

horseColicTraining2.txthorseColicTest2.txt 放在当前目录下。

from numpy import *

单层决策树生成的函数

"""
    单层决策树分类函数
    Parameters:
        dataMatrix - 数据矩阵
        dimen - 第dimen列,也就是第几个特征
        threshVal - 阈值
        threshIneq - 标志
    Returns:
        retArray - 分类结果

第一个函数stumpClassify()是通过阈值比较对数据进行分类的。
所有在阈值一边的数据会分到类别1,而在另外一边的数据分到类别+1。该函数可以通过数组过
滤来实现,首先将返回数组的全部元素设置为1,然后将所有不满足不等式要求的元素设置为1。
可以基于数据集中的任一元素进行比较,同时也可以将不等号在大于、小于之间切换
"""
def stumpClassify(dataMatrix,dimen,threshVal,threshIneq):
    #初始化retArray为1
    retArray = ones((shape(dataMatrix)[0],1))
    if threshIneq == 'lt':
        #如果小于阈值,则赋值为-1
        retArray[dataMatrix[:,dimen] <= threshVal] = -1.0
    else:
        #如果大于阈值,则赋值为-1
        retArray[dataMatrix[:,dimen] > threshVal] = -1.0
    return retArray
    
"""
    找到数据集上最佳的单层决策树
    Parameters:
        dataArr - 数据矩阵
        classLabels - 数据标签
        D - 样本权重
    Returns:
        bestStump - 最佳单层决策树信息
        minError - 最小误差
        bestClasEst - 最佳的分类结果
 """

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 
    #遍历所有特征
    for i in range(n):
        #找到特征中最小的值和最大值
        rangeMin = dataMatrix[:,i].min(); rangeMax = dataMatrix[:,i].max();
        #计算步长
        stepSize = (rangeMax-rangeMin)/numSteps
        for j in range(-1,int(numSteps)+1):
            #大于和小于的情况,均遍历。lt:less than,gt:greater than
            for inequal in ['lt', 'gt']: #go over less than and greater than
                #计算阈值
                threshVal = (rangeMin + float(j) * stepSize)
                #计算分类结果
                predictedVals = stumpClassify(dataMatrix,i,threshVal,inequal)
                #初始化误差矩阵
                errArr = mat(ones((m,1)))
  
  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值