机器学习--Hoeffding Inequality--界定概率边界

问题


假设空间的样本复杂度(sample complexity):随着问题规模的增长导致所需训练样本的增长称为sample complexity。实际情况中,最有可能限制学习器成功的因素是训练数据的有限性。

在使用学习器的过程中,我们希望得到与训练数据拟合程度高的假设(hypothesis)。(在前面文章中提到,这样的假设我们称之为g)。这就要求训练错误率为0。而实际上,大部分情况下,我们找不到这样的hypothesis(通过学习机得到的hypothesis)在训练集上有错误率为0。所以退而求其次,我们只能要求通过学习机得到的hypothesis在训练集上错误率越低越好,最好接近0。

令D为有限的训练集,Ein(h)(in-sample error)为假设h在训练集D上的训练错误率,Eout(h)(out-of-sample error)是定义在全部数据的错误率。(由此可知Eout(h)是不可直接求出的,因为不太可能将学习完无限的数据)。令g代表假设集中训练错误率最小的假设。

Hoeffding Inequality


这里写图片描述
Hoeffding Inequality刻画的是某个事件的真实概率与m各不同的Bernoulli试验中观察到的频率之间的差异。由上述的Hoeffding Inequality可知,对我们是不可能得到真实的Eout(h),但我们可以通过让假设h在有限的训练集D上的错误率Ein(h)代表Eout(h)。什么意思呢?Hoeffding Inequality告诉我们:较好拟合训练数据的假设与该假设针对整个数据集的预测,这两者的误差率相差很大的情况发生的概率其实是很小的。

Bad Sample and Bad Data


坏的样本(Bad Sample):假设h在有限的训练集D上的错误率Ein(h)=0,而真实错误率Eout(h)=1/2的情况。
坏的数据(Bad Data):Ein和Eout差别很大的情况。(通常情况下是Eout很大,Ein很小。)
下面就将包含Bad data的Data用在多个h上。
这里写图片描述
上图说明:
对于任一个假设hi,由Hoeffding可知其在所有的数据上(包括Bad Data)上出现不好的情况的总体概率是很小的。

Bound of Bad Data
由上面的表中可以得到下面的结论:
这里写图片描述
对于所有的M(假设的个数),N(数据集规模)和阈值,Hoeffding Inequality都是有效的
我们不必要知道Eout,可以通过Ein来代替Eout(这句话的意思是Ein(g)=Eout(g) is PAC).

感谢台大林老师的课。
参考:

>[原]【机器学习基础】理解为什么机器可以学习2——Hoeffding不等式

更多技术干货请关注:
这里写图片描述

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
scikit-multiflow是一个用于处理数据流的Python库,它提供了多种概念漂移检测方法。概念漂移检测是在数据流中检测到概念漂移(即数据分布的突变)的过程。 在scikit-multiflow中,你可以使用以下方法进行概念漂移检测: 1. ADWIN: ADWIN是一种经典的概念漂移检测算法,它基于窗口大小的调整和统计指标来判断概念漂移。你可以使用`ADWIN`类来执行ADWIN算法。 2. DDM: DDM(Drift Detection Method)是另一种常用的概念漂移检测算法,它基于错误率的变化来判断概念漂移。你可以使用`DDM`类来执行DDM算法。 3. EDDM: EDDM(Early Drift Detection Method)是一种快速检测概念漂移的算法,它通过动态调整窗口大小和错误率来尽早地检测到漂移。你可以使用`EDDM`类来执行EDDM算法。 除了以上方法,scikit-multiflow还提供了其他一些概念漂移检测算法,如HDDM(Hoeffding's Drift Detection Method)和PH(Page Hinkley)。你可以根据具体需求选择适合的概念漂移检测方法,并使用相应的类来执行检测。 以下是一个使用scikit-multiflow进行概念漂移检测的示例代码: ```python from skmultiflow.drift_detection import ADWIN # 创建ADWIN实例 adwin_detector = ADWIN() # 模拟数据流 data_stream = [0, 1, 0, 0, 0, 1, 1, 1, 0, 0] # 检测概念漂移 for i, data in enumerate(data_stream): adwin_detector.add_element(data) if adwin_detector.detected_change(): print(f"概念漂移在位置 {i} 检测到!") ``` 在上述示例代码中,我们首先创建了一个ADWIN实例`adwin_detector`。然后,我们模拟了一个数据流`data_stream`,其中包含了一些概念漂移。 接下来,我们使用`add_element`方法将数据逐个添加到ADWIN实例中,并使用`detected_change`方法检测概念漂移。如果检测到概念漂移,我们打印出相应的信息。 需要注意的是,这只是一个简单的示例,实际使用时你可能需要根据具体需求进行更复杂的设置和处理。你可以参考scikit-multiflow的文档和示例代码来了解更多关于概念漂移检测的用法和技术细节。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

脑机接口社区

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值