程序输出与预期结果不相同

from numpy import *
def loadSimData():
    dataMat=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 dataMat,classLabels
def stumpClassify(dataMatrix, dimen, threshVal, threshIneq):
    retArray = ones((shape(dataMatrix)[0], 1))
    if threshIneq == 'lt':  # 如果分类标志为'lt',则分类规则:小于等于阈值,归类到-1
        retArray[dataMatrix[:, dimen] <= threshVal] = -1.0  # 如果小于阈值,则赋值为-1
    else:
        retArray[dataMatrix[:, dimen] > threshVal] = -1.0  # 如果大于阈值,则赋值为-1
        return retArray


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 = float('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):
            for inequal in ['lt', 'gt']:  # 大于和小于的情况,均遍历
                threshVal = (rangeMin + float(j) * stepSize)  # 计算阈值
                predictedVals = stumpClassify(dataMatrix, i, threshVal, inequal)  # 计算分类结果
                errArr = mat(ones((m, 1)))  # 初始化误差矩阵
                errArr[predictedVals == labelMat] = 0  # 分类正确的,赋值为0
                weightedError = D.T * errArr  # 计算误差
                print("split: dim %d, threshVal %.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
D=mat(ones((5,1))/5)
datMat,classLabels=adaboost.loadSimData()
adaboost.buildStump(datMat,classLabels,D)

一样的数据为什么我的输出结果和书上不一样

问题出现在buildStump函数的最后。你的return语句在for循环内部,而应该在for循环结束后才返回最终的结果。

拉长缩进你看看


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 = float('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):
            for inequal in ['lt', 'gt']:  # 大于和小于的情况,均遍历
                threshVal = (rangeMin + float(j) * stepSize)  # 计算阈值
                predictedVals = stumpClassify(dataMatrix, i, threshVal, inequal)  # 计算分类结果
                errArr = mat(ones((m, 1)))  # 初始化误差矩阵
                errArr[predictedVals == labelMat] = 0  # 分类正确的,赋值为0
                weightedError = D.T * errArr  # 计算误差
                print("split: dim %d, threshVal %.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

  • 这有个类似的问题, 你可以参考下: https://ask.csdn.net/questions/7502549
  • 这篇博客你也可以参考下:利用互信息比较不同的聚类结果
  • 除此之外, 这篇博客: 改动模型后,加载部分预训练权重文件中的 首先,我们需要将我们实例化删改后的模型: 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • model = YOUR_changed_model(**)
    
  • 您还可以看一下 王恩龙老师的软件测试基础课程中的 软件测试准入准出条件小节, 巩固相关知识点
  • 以下回答由chatgpt基于相关博客总结生成:

    问题标题:程序输出与预期结果不相同 问题内容:当使用相同的数据时,为什么我的输出结果与书上的结果不一样?

    首先,理解问题的原因可能有多种。以下是一些可能导致输出结果不同的原因以及解决方案:

    1. 代码错误:检查你的代码是否有任何语法或逻辑错误。确保你理解代码并正确地实现了所需的功能。使用调试工具或打印语句来帮助你识别问题所在。

    2. 数据差异:确保你的输入数据与书上的数据相匹配。检查数据类型、格式和内容是否与书上的示例一致。

    3. 算法参数:有些算法可能具有一些可调整的参数,这些参数会影响输出结果。确保你对算法的参数进行了正确的设置,并与书上的示例进行比较。

    4. 环境差异:你的程序可能在不同的环境中运行。验证你的程序运行的环境是否与书上的示例环境相同。包括操作系统、库版本等方面。

    以下是一个示例解决方案:

    # 问题标题:程序输出与预期结果不相同
    # 问题内容:当使用相同的数据时,为什么我的输出结果与书上的结果不一样?
    
    # 1. 代码错误:
    # 检查你的代码是否有任何语法或逻辑错误。确保你理解代码并正确地实现了所需的功能。使用调试工具或打印语句来帮助你识别问题所在。
    
    def your_function(data):
        # 代码逻辑...
        pass
    
    # 2. 数据差异:
    # 确保你的输入数据与书上的数据相匹配。检查数据类型、格式和内容是否与书上的示例一致。
    
    data = [1, 2, 3, 4, 5]
    expected_result = [2, 4, 6, 8, 10]
    
    result = your_function(data)
    
    # 检查结果是否与预期结果相同
    if result == expected_result:
        print("输出结果与预期结果相同")
    else:
        print("输出结果与预期结果不相同")
    
    # 3. 算法参数:
    # 有些算法可能具有一些可调整的参数,这些参数会影响输出结果。确保你对算法的参数进行了正确的设置,并与书上的示例进行比较。
    
    def your_algorithm(data, parameter):
        # 算法逻辑...
        pass
    
    # 设置算法参数
    parameter = 0.5
    
    result = your_algorithm(data, parameter)
    
    # 检查结果是否与预期结果相同
    if result == expected_result:
        print("输出结果与预期结果相同")
    else:
        print("输出结果与预期结果不相同")
    
    # 4. 环境差异:
    # 你的程序可能在不同的环境中运行。验证你的程序运行的环境是否与书上的示例环境相同。包括操作系统、库版本等方面。
    
    # 检查你的环境和库版本是否与书上的示例环境相同
    

    希望以上的解决方案能够帮助你找到问题所在,如果仍然存在问题,请提供更多详细信息以便我们提供更准确的帮助。