机器学习(周志华) 参考答案 第一章 绪论 1.2

探讨使用析合范式增强假设表示能力,通过计算不同泛化级别的假设数量,解析假设空间的组合数学特性。

题目:与使用单个合取式来进行假设表示相比,使用“析合范式”将使得假设空间具有更强的表示能力。若使用最多包含k个合取式的析合范式来表达1.1的西瓜分类问题的假设空间,试估算有多少种可能的假设。

      表1.1包含4个样例,3种属性,假设空间中有3∗4∗4+1=493∗4∗4+1=49种假设。最多包含k个合取式来表达假设空间,显然k的最大值是49。

不考虑空集的话,剩下48种可能:

    全部不泛化 2∗3∗3=182∗3∗3=18种假设

    一个属性泛化:2∗3+3∗3+2∗3=212∗3+3∗3+2∗3=21种假设

    两个属性泛化:2+3+3=82+3+3=8种假设

    三属性泛化:1种假设

 

用这48种假设的排列组合来组成析合范式,展开序列为(也就是杨辉三角的一排):

1, 48, 1128, 17296,...... 17296, 1128, 48, 1 共49个数,  左边的1代表‘空’,一个都不选,右边的1代表全部选。

如果k=48,就是说最多采用48种合取式来组成析合范式,排除一种都不选的情况,就是2^48 - 1种。(2^48是根据二项式定理得的)

如果0<k<48,那就把展开序列的前k+1(因为展开序列从0开始数)项全部加起来再减1 

如果指定了k的个数,那就是展开序列的第k+1(因为展开序列从0开始数)项的数

但是,这个结果得去重才行,因为泛化是对若干种假设的包含(包容),它本身不是某种假设。把泛化的 * 展开后,

就是若干种具体的假设。如果此题采取48,那么把 * 展开后,假设集合中一定有重复,而且一种具体假设还不止重复一次。

此题应该采用18种具体假设来计算, 就是: 2^18 - 1 

 

以下python代码没有考虑全部为空的情况(-1),且没有考虑去重。

# -*- coding: utf-8 -*-

def strige(max):#杨辉三角
    S = [1]
    while max: 
        N = S[:]
        N.append(0)
        S = [N[i-1]+N[i] for i in range(len(N))]
        max -= 1
    return S 

def cal_Permutations(total_num =0,select_num= 0,most_num = 0):
    re_total_num = 0
    re_select_num = 0
    re_most_num = 0
    if total_num == 0:
        raise ValueError,'pls indicate total numbers'
        return

    if select_num>total_num or most_num>total_num:
        raise ValueError,'select_num or most_num can not bigger than total_num'
        return

    s = strige(total_num)

    for x in s:
        re_total_num += x

    re_select_num = s[select_num]

    for y in range(0,most_num+1):
        re_most_num += s[y]

    return {'input_parameter':{'total_num':total_num,'most_num':most_num,'select_num':select_num},'output_permutations':s,'output_usual_count':{'total_num':re_total_num,'most_num':re_most_num,'select_num':re_select_num}}

result = cal_Permutations(48,40,48)
print (result)

### 关于《机器学习周志华第二章答案 当考虑模型评估选择时,不同评价指标提供了多角度的理解方法。对于给定的学习器而言,在特定条件下其性能可以通过多种方衡量。例如,通过McNemar检验来判断两个分类算法在相同数据集上的表现差异是否具有统计学意义[^1]。 若要对比两学习器的总体性能,除了依赖传统的准确率之外,还可以借助受试者工作特征曲线(ROC),特别是当面对不平衡的数据分布情况时为有效。如果一个学习器的ROC曲线完全覆盖住了另一条,则表明前者的整体性能佳;而对于存在交叠的情况,则推荐采用曲线下面积(AUC)作为评判标准[^2]。 另外,“平衡点”(Break-Event Point,简称BEP),定义为查准率等于查全率时对应的值,也被用来辅助评估。比如,当某个学习器拥有高的F1分数时,意味着它同样具备较大的BEP数值,这暗示着该模型可能处理那些对误报和漏报敏感的应用场景[^4]。 针对具体题目解答部分,《机器学习》一书中关于真正例率(True Positive Rate, TPR)、假正例率(False Positive Rate, FPR)以及查准率(Precision, P)、查全率(Recall, R)之间关系进行了深入探讨: - **TPR** 和 **R** 实际上是同一个概念的不同表述形; - **FPR** 则反映了负样本被错误标记的比例; - 查准率P关注的是预测为正类别的实例中有多少是真的正类别成员; - 而查全率R侧重考察实际属于正类别的对象有多少被成功识别出来。 这些度量共同构成了全面理解分类效果的基础框架[^5]。 ```python def calculate_metrics(tp, tn, fp, fn): """ 计算并返回精度(precision), 召回率(recall), 真阳性率(true positive rate) 和 假阳性率(false positive rate). 参数: tp -- 正确预测为正的数量 tn -- 正确预测为负的数量 fp -- 错误预测为正的数量 fn -- 错误预测为负的数量 返回: precision -- 召回率/真阳性率 fpr -- 假阳性率 """ try: precision = tp / (tp + fp) recall_tpr = tp / (tp + fn) fpr = fp / (fp + tn) return round(precision, 3), round(recall_tpr, 3), round(fpr, 3) except ZeroDivisionError as e: print("除数不能为零:", str(e)) ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值