VC维度

转载自:http://blog.csdn.net/tianguokaka/article/details/16868567

Vc维度是针对某个分类器而言。Vc维度与分类器的复杂度有关。在学习分析时候,把分类器看做是来自于某类分类器集合,从而进行误差分析。直观来讲,分类器的复杂度正比于它所在的集合的元素个数,而元素个数与参数的个数由关。例如某个分类器有d个参数,每个参数由32位表示,那么可以推得分类器集合包含了个不同的元素,也就是参数越多分类器复杂度越高。但这仅仅是最直观的理解,如何精确定义分类器的复杂度?这就涉及到了vc维度。

可以直观定义vc维度是单个分类器可最多分类的数据点的个数(隐含条件是不要求对在同一直线的点的分类)。下面举例图解:

在二维空间上,一个线性分类器的vc维度是3,因为它可以准确对任意三个点进行正确分类,无论它们如何排列。需要强调的是,不要求对共线的情况分类。



但是线性分类器无法对四个点进行准确分类,即使它们不共线,如下图。


要想分类这四个点,单个线性分类器是不行的。

所以线性分类器vc维度是3.

### VC 维度中的 Break Point 在机器学习理论中,VC维(Vapnik-Chervonenkis Dimension)用于衡量模型复杂性和泛化能力。Break point 是与之紧密关联的一个概念。 对于给定假设空间 \( H \),如果存在某个整数 \( k \) 使得任何由 \( k \) 个数据点组成的集合都不能被完全打散(shattered),而任意少于 \( k \) 的点集可以被打散,则称 \( k \) 为 break point[^1]。 具体来说: - 当样本数量小于 break point 时,所有可能的分类情况都能通过该假设类实现。 - 超过此数值后,至少有一组特定配置无法用当前假设来区分正负实例。 这一特性有助于理解模型容量以及预防过拟合现象的发生,在构建算法时提供重要的指导意义。 ```python def is_shatterable(points, hypothesis_set): """ 判断一组点是否能被指定假设集打散 参数: points (list): 数据点列表 hypothesis_set (set): 假设集合 返回: bool: 如果能够打散返回True;否则False """ all_possible_classifications = generate_all_binary_labels(len(points)) for classification in all_possible_classifications: can_be_separated = True for h in hypothesis_set: if not check_consistency(h, points, classification): can_be_separated = False break if can_be_separated: return True return False def find_break_point(max_points_to_check, hypothesis_set): """ 查找给定假设下的break point 参数: max_points_to_check (int): 需要测试的最大点数目 hypothesis_set (set): 使用的假设集合 返回: int: 找到的第一个不能被打散的数据点数量作为break point """ for n in range(1, max_points_to_check + 1): sample_points = create_sample(n) if not is_shatterable(sample_points, hypothesis_set): return n return None ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值