精华内容
下载资源
问答
  • 不可能事件的频率
    千次阅读
    2018-10-24 05:50:17

    当我们使用Vue进行项目开发时,因为Vue的简介和易用性使我们可能会忽略,Vue的生命周期这件事儿。 尤其是在使用事件时,稍有不意就会造成意外发生!

    本文章使用常见的拖拽为案例。

    当拖拽一个div元素时,很明显会造成鼠标快速滑动时div跟随卡顿

    共通代码:

    <script>
        export default {
            data() {
                return {
                    // 测试数据
                    testData: [
                        {value: '1'},
                        {value: '2'},
                        {value: '3'},
                        {value: '4'},
                        {value: '5'},
                        {value: '6'},
                        {value: '7'},
                        {value: '9'},
                        {value: '10'}
                    ],
                    /// ...
                };
            },
            methods: {
                testFun(name) {
                    console.time(name + '-delay');
                    for (let i = 0; i < 10240000; i++) {}
                    console.timeEnd(name + '-delay');
                },
                // ...
            }
        }
    </script>
    <style>
      *::selection {
        background: none;
      }
      .box {
        position: fixed;
        z-index: 100;
        width: 200px;
        height: 80px;
      }
      .dargbtn {
        margin: 15px;
        color: #222222;
        background: #eee;
        cursor: pointer;
      }
      .box1 {
        background: #c0c;
      }
      .box2 {
        background: #0cc;
      }
    </style>
    复制代码

    上述所示,testData是测试的数据(用于数据数据循环),testFun是测试的方法(此方法用于拉长函数执行时长), 以及Style。

    Box1代码:

    <template>
        <div class="box box1"
             :style="box1Style"
             ref="box1"
        >
          <div class="dargbtn" @mousedown="box1ButtonDown">点此拖拽1</div>
          <div class="delay-box">
            <span
              v-for="(item, index) in testData"
              :key="index"
              :data-testdata="testFun('box1')"
            >{{item.value}}</span>
          </div>
        </div>
    </template>
    <script>
        export default {
            data() {
                return {
                    // 1
                    box1X: 0,
                    box1Y: 0,
                    box1L: 0,
                    box1T: 0,
                    box1CurrentX: 0,
                    box1CurrentY: 0,
                };
            },
            computed: {
              box1Style() {
                return {
                  top: this.box1CurrentY + 'px',
                  left: this.box1CurrentX + 'px'
                };
              }
            },
            methods: {
              box1Start(e) {
                let dv = this.$refs.box1;
                this.box1X = e.clientX;
                this.box1Y = e.clientY;
        
                this.box1L = dv.offsetLeft;
                this.box1T = dv.offsetTop;
              },
              box1Move(e) {
                console.log('box1 move');
                let nx = e.clientX;
                let ny = e.clientY;
        
                let nl = nx - (this.box1X - this.box1L);
                let nt = ny - (this.box1Y - this.box1T);
        
                // 代码关键处
                this.box1CurrentX = nl;
                this.box1CurrentY = nt;
              },
              box1End(e) {
                window.removeEventListener('mousemove', this.box1Move);
                window.removeEventListener('mouseup', this.box1End);
              },
              box1ButtonDown(e) {
                this.box1Start(e);
                window.addEventListener('mousemove', this.box1Move);
                window.addEventListener('mouseup', this.box1End);
              }
            }
        }
    </script>
    复制代码

    Box2代码:

    <template>
        <div class="box box2"
             :style="box2Style"
             ref="box2"
        >
          <div class="dargbtn" @mousedown="box2ButtonDown">点此拖拽2</div>
          <div class="delay-box">
            <span
                v-for="(item, index) in testData2"
                :key="index"
                :data-testdata="testFun('box2')"
            >{{item.value}}</span>
          </div>
        </div>
    </template>
    <script>
        export default {
            data() {
                return {
                    // 2
                    box2X: 0,
                    box2Y: 0,
                    box2L: 0,
                    box2T: 0,
                    box2CurrentX: 0,
                    box2CurrentY: 100
                };
            },
            computed: {
              box2Style() {
                return {
                  top: '100px',
                  left: '0px'
                };
              }
            },
            methods: {
                box2Start(e) {
                    let dv = this.$refs.box2;
                    this.box2X = e.clientX;
                    this.box2Y = e.clientY;
                    
                    this.box2L = dv.offsetLeft;
                    this.box2T = dv.offsetTop;
                },
                box2Move(e) {
                    console.log('box2 move');
                    let nx = e.clientX;
                    let ny = e.clientY;
                    let nl = nx - (this.box2X - this.box2L);
                    let nt = ny - (this.box2Y - this.box2T);
                    
                    // 代码关键处
                    this.box2CurrentX = nl;
                    this.box2CurrentY = nt;
                    let legendBox = this.$refs.box2;
                    legendBox.style.left = nl + 'px';
                    legendBox.style.top = nt + 'px';
                },
                box2End(e) {
                    window.removeEventListener('mousemove', this.box2Move);
                    window.removeEventListener('mouseup', this.box2End);
                },
                box2ButtonDown(e) {
                    this.box2Start(e);
                    window.addEventListener('mousemove', this.box2Move);
                    window.addEventListener('mouseup', this.box2End);
                }
            }
        }
    </script>
    复制代码

    运行代码如图所示:

    代码分析

    上诉两段代码中,我们发现唯一的差别只有 box1是通过computed的计算属性对style赋值进行的赋值 box2是通过methos的Move方法对style赋值进行的赋值 但是实际问题不在于此,这也就是该代码的炸弹!

    在Vue中数据绑定有两种方式:计算属性和方法

    计算属性缓存 vs 方法

    <p>Reversed message: "{{ reversedMessage() }}"</p>
    // 在组件中
    methods: {
      reversedMessage: function () {
        return this.message.split('').reverse().join('')
      }
    }
    复制代码

    我们可以将同一函数定义为一个方法而不是一个计算属性。两种方式的最终结果确实是完全相同的。然而,不同的是计算属性是基于它们的依赖进行缓存的。只在相关依赖发生改变时它们才会重新求值。这就意味着只要 message 还没有发生改变,多次访问 reversedMessage 计算属性会立即返回之前的计算结果,而不必再次执行函数。

    这也同样意味着下面的计算属性将不再更新,因为 Date.now() 不是响应式依赖:

    computed: {
      now: function () {
        return Date.now()
      }
    }
    复制代码

    相比之下,每当触发重新渲染时,调用方法将总会再次执行函数。

    我们为什么需要缓存?假设我们有一个性能开销比较大的计算属性 A,它需要遍历一个巨大的数组并做大量的计算。然后我们可能有其他的计算属性依赖于 A 。如果没有缓存,我们将不可避免的多次执行 A 的 getter!如果你不希望有缓存,请用方法来替代。

    总结

    如果能用计算属性满足需求优先使用,如果使用方法需注意方法执行时长

    例子:

    本文提供demo见:GitHub

    *版权声明:本文为原创文章,未经允许不得转载。

    更多相关内容
  • 河北省保定市莲池区七年级数学下册第六章频率初步6.3等可能事件的概率6.3.1等可能事件的概率导学案无答案新版北师大版20180817371
  • 河北省保定市莲池区七年级数学下册第六章频率初步6.3等可能事件的概率6.3.2等可能事件的概率导学案无答案新版北师大版20180817372
  • 七年级数学下册第六章频率初步3等可能事件的概率第1课时简单概率的计算练习2新版北师大版201912041121
  • 七年级数学下册第六章频率初步3等可能事件的概率第1课时简单概率的计算练习1新版北师大版201912041122
  • 七年级数学下册第六章频率初步3等可能事件的概率第2课时与摸球相关的概率练习1新版北师大版201912041120
  • 七年级数学下册第六章频率初步3等可能事件的概率第2课时与摸球相关的概率练习2新版北师大版201912041119
  • 七年级数学下册第六章频率初步3等可能事件的概率第4课时与面积相关的概率2转盘游戏练习1新版北师大版201912041116
  • 七年级数学下册第六章频率初步3等可能事件的概率第3课时与面积相关的概率1面积型概率练习1新版北师大版201912041118
  • 异构事件长短期记忆模型加入了一个可以控制事件访问频率的门,以对不同事件规则采样频率建模,同时抓住事件中的复杂时序依赖关系。真实临床数据的实验表明,该方法可以在一系列先进模型的基础上,提升死亡预测和...
  • 10.3.1频率的稳定性.pptx
  • 频率的性质1、当重复试验的e5a48de588b662616964757a686964616f31333431363565次数n逐渐增大时,频率fn(A)呈现出稳定性,逐渐稳定于某个常数,这个常数就是事件A的概率.这种“频率稳定性”也就是通常所说的统计规律...

    展开全部

    频率=频数/数据总数。

    频率的性质

    1、当重复试验的e5a48de588b662616964757a686964616f31333431363565次数n逐渐增大时,频率fn(A)呈现出稳定性,逐渐稳定于某个常数,这个常数就是事件A的概率.这种“频率稳定性”也就是通常所说的统计规律性。

    2、频率有如下性质:

    (1)非负性:0小于等于fn(A)小于等于1

    (2)规范性:fn(Ω)=1 (注:Ω表示样本空间)

    (3)可加性

    频率分布直方图能清楚显示各组频数分布情况又易于显示各组之间频数的差别。它主要是为了将我们获取的数据直观、形象地表示出来,让我们能够更好了解数据的分布情况,因此其中组距、组数起关键作用。

    分组过少,数据就非常集中;分组过多,数据就非常分散,这就掩盖了分布的特征。当数据在100以内时,一般分5~12组为宜。

    直方图用长方形的面积表示频数,长方形的面积越大,表示这组数据的频数越大;只有当长方形的底宽都相等即组距相等时,才可以用长方形的高表示频数的大小。条形图用条形的高度表示频数的大小。

    扩展资料

    频率在随机事件在n次试验中发生m次的相对频次m/n。一般物理科学中频率指每秒中的振动次数,可以是随机的,也可以是确定性的。

    在一定条件下,对所研究的对象进行观察或测验,每实现一次条件组,称为一次试验。其结果称为事件。在一次试验中,可能发生也可能不发生的事件称为随机事件。

    随机事件 A发生的概率p(A)是该事件出现的可能性大小的度量。其数值在0与1之间。在一定条件下进行试验,如果事件A不可能发生,则p(A)=0;如果事件A必然发生,则p(A)=1。随着试验次数n的增大,频率接近于概率的可能性也越大。

    参考资料来源:百度百科-频率

    展开全文
  • 在Jungle的上一篇文章中(Qt键盘事件(一)——检测按键输入及解决无法响应方向键问题),Jungle简单实现了利用qt检测用户按键操作并将键按下\释放操作打印在Qt界面上的一个小程序。但是在测试过程中会出现一个现象...

    1.问题描述

    在Jungle的上一篇文章中(Qt键盘事件(一)——检测按键输入及解决无法响应方向键问题),Jungle简单实现了利用qt检测用户按键操作并将键按下\释放操作打印在Qt界面上的一个小程序。但是在测试过程中会出现一个现象,那就是长按某个键不放,界面一直在刷新press、release、press、release……(如下图)

    也就是说,在长按某个键不释放的情况下,keyPressEvent和keyReleaseEvent事件会不断被触发。尽管这是Qt设计实现好的事件机制,但在用户体验上,这是不合常理的。我们希望实现的是:按下某个键(比如Tab键),界面只打印一次"Key_Tab Press";当手松开时,界面上才打印"Key_Tab Release"

    2.问题说明event->isAutoRepeat()

    为此,Jungle查询了Qt官方文档和几篇博客。

    官方文档上提到一个QKeyEvent的成员函数isAutoRepeat:

    bool QKeyEvent::isAutoRepeat () const
    Returns true if this event comes from an auto-repeating key; returns false if it comes from an initial key press.

    Note that if the event is a multiple-key compressed event that is partly due to auto-repeat, this function could return either true or false indeterminately.

     可以看到,当event来自于auto-repeating key,isAutoRepeat返回true;当event事件来自于最初的按键,则sAutoRepeat返回false。这么说可能不好理解,那不妨Jungle做个小测试。

    2.1.在keyPressEvent里打印isAutoRepeat返回值

    • 操作:长按Tab键,在keyPressEvent里打印isAutoRepeat返回值,松开Tab键后,再次长按Tab键,再松开
    void QKeyBoard::keyPressEvent(QKeyEvent *event){
    	switch(event->key()){
    		case Qt::Key_Tab:
    			if(event->isAutoRepeat()==true){
    				this->ui.textEdit_press->append("true");
    			}
    			else{
    				this->ui.textEdit_press->append("false");
    			}
    			this->ui.textEdit_press->append("Key_Tab Press");
    			break;
    		/*default:
    			this->ui.textEdit->append("KeyEvent");*/
    	}
    }
    

     测试结果如下图:

    从测试结果可以看到,长按下Tab键第一次触发keyPressEvent事件时isAutoRepeat返回false,之后长按过程中isAutoRepeat返回值均为true。松键后再次长按,isAutoRepeat返回false,之后长按过程中isAutoRepeat返回值均为true即只有首次按下Tab键时,isAutoRepeat返回值为false。结合这个结果来看Qt官方文档的描述,似乎更好理解一点。

    2.2.在keyReleaseEvent里打印isAutoRepeat返回值

    同样,Jungle在keyReleaseEvent里打印isAutoRepeat返回值,运行结果如下(代码略):

    可以看到, 长按下Tab键,自动触发keyReleaseEvent事件时isAutoRepeat返回true,真正松键后触发keyReleaseEvent事件时isAutoRepeat返回true。

    2.3.测试总结

    结合Qt官方文档和上述测试,可以得出如下结论:

    • 按键触发的keyPressEvent事件,isAutoRepeat返回false;自动触发的keyPressEvent事件,isAutoRepeat返回true;
    • 松键触发的keyReleaseEvent事件,isAutoRepeat返回true;自动触发的keyReleaseEvent事件,isAutoRepeat返回false。

    3.解决

    在真正按键和松键事件触发时,加上对isAutoRepeat返回值的判断,具体判断如2.3总结所言,示例代码如下:

    void QKeyBoard::keyPressEvent(QKeyEvent *event){
    	switch(event->key()){
    		case Qt::Key_Tab:
    			if(!event->isAutoRepeat()){
    				this->ui.textEdit_press->append("Key_Tab Press");
                    /* add your code here*/
    			}
    			break;
    	
    		/*default:
    			this->ui.textEdit->append("KeyEvent");*/
    	}
    }
    
    void QKeyBoard::keyReleaseEvent(QKeyEvent *event){
    	switch(event->key()){
    		case Qt::Key_Tab:
    			if(!event->isAutoRepeat()){
    				this->ui.textEdit_release->append("Key_Tab Release");
                    /* add your code here*/
    			}
    			break;
    		/*default:
    			this->ui.textEdit->append("KeyEvent");*/
    	}
    }

    在某些博客里,作者可能增设了某个变量来标记键是否被按下,并在按下和松键时更新标记。但Jungle认为并没有必要,像上述那样加入判断即可。

    相关代码请访问Jungle的GitHub主页:https://github.com/FengJungle/Qt_Project

    展开全文
  • 贝叶斯统计为什么优于频率统计?

    千次阅读 2019-03-08 17:55:52
    这句话导致了丹尼斯林德利对克伦威尔规则的定义,这提出了如果一个先验概率等于零(我知道某些...在本文中,我们通过形象举例深刻剖析频率统计与贝叶斯统计之间的区别,深入探讨贝叶斯统计的神秘世界,以及它的...

    https://www.toutiao.com/a6665142092601229837/

     

    这句话导致了丹尼斯林德利对克伦威尔规则的定义,这提出了如果一个先验概率等于零(我知道某些事情不是真的)或一个(我知道某事是真的)的想法,然后,尽管向你展示了什么证据,你的信念也不会被动摇。

    在本文中,我们通过形象举例深刻剖析频率统计与贝叶斯统计之间的区别,深入探讨贝叶斯统计的神秘世界,以及它的一些原则,如克伦威尔规则、伯恩斯坦 - 冯米塞斯定理、伯努利审判,有助于分析现实世界的机器学习问题。

    贝叶斯统计为什么优于频率统计?

     

    贝叶斯缩小了范围、指明了方向

    拿例子说话。

    我把手机放在了家里的某个地方。我可以使用仪器底座上的电话定位器来定位电话,当我按下电话定位器时,电话会开始发出哔哔声。

    问题:我应该搜索我家的哪个区域?

    频繁推理

    我能听到手机发出的哔哔声。我还有一个心理猜测模型,即根据声音来确定区域。因此,在听到哔哔声后,我推断出我家的区域,我必须遍历搜索来找到手机。

    贝叶斯推理

    我能听到手机发出的哔哔声。现在,除了帮助我识别声音来自哪个区域的心理模型之外,我还知道过去经常放错电话的位置。因此,我结合我的推论使用了哔哔声和我之前关于我过去放错电话的位置的先验信息,以确定我必须搜索以找到手机的区域。

    从这个例子,可以看出两者的区别,贝叶斯推理比频繁推理应用了更多的经验,缩小了范围、避免盲目。

    贝叶斯统计捕获真正关心的信息:逆概率

    假设在医院,患者健康(H)或生病(S),我们将对患者进行测试,结果将为阳性(+)或阴性(- )。如果患者生病,他们将始终获得阳性结果。我们称之为正确的(Correct)结果。

    P(+ | S)= 1

    也就是说:

    P(Correct | S)= 1

    如果患者健康,95%的时间测试将是阴性,但会有一些误报。

    P(- | H)= 0.95

    P(+ | H)= 0.05

    对于健康人来说,测试正确的概率是95%。

    因此,该测试要么100%准确,要么准确率为95%,具体取决于患者是健康还是生病。总之,这意味着测试至少95%准确。

    到现在为止这些还是频率论者的陈述。这些陈述很容易理解。

    但是,当你试图换一种方式,让事情变得有趣。鉴于测试结果,你可以了解患者的健康状况。如果测试结果为阴性,患者显然是健康的,因为没有假阴性。

    但我们也必须考虑测试是阳性的情况。是因为患者实际上病了,还是假阳性?这是频率论者和贝叶斯派的分歧。每个频率论支持者都会同意目前无法回答这个问题。他们会拒绝回答。贝叶斯将准备给你一个答案,贝叶斯先生告诉它患病的比例是多少。

    总结一下,以下陈述是正确的:

    • 对于健康人,测试很准确。
    • 对于病人,测试非常准确。

    如果您对此类陈述感到满意,那么你事实上在使用频率统计的解释。

    但如果让你做出不同的陈述并回答以下问题:

    • 对于那些测试结果为阳性的患者,测试的准确度如何?

    这需要先验和贝叶斯定理。另注意,这是医生唯一感兴趣的问题。医生会说“我知道患者会得到阳性结果或阴性结果。阴性结果意味着患者健康并且可以送回家。现在我感兴趣的是获得阳性结果的人- 他们生病吗?”

    总之,在这样的例子中,贝叶斯将同意频率论者所说的一切。但贝叶斯认为,频率论者的陈述虽然是真实的,但并不是很有用

    频率论者将依次考虑参数(H或S)的每个可能值,并询问“参数是否等于该值,我的测试正确的概率是多少?

    相反,贝叶斯将反过来考虑每个可能的观测值(+或- )并询问“如果我刚刚观察到这个值,那么它告诉我健康(H)和生病(S)的条件概率是什么?

    从这个例子,可以看出两者的区别,贝叶斯统计(推理)能够获得逆概率的信息,这个是贝叶斯定理公式中一目了然的。为什么这个很重要呢?观察值(测量者)往往不一定是准确的,而真正的实际情况的条件概率才是我们关心的,才是最重要的。

    贝叶斯统计的作用过程

    极小概率问题:日出问题

    “不管发生了什么,太阳第二天仍然会照常升起”,你对这个真理的坚信来源于你从来没碰见过一天,太阳没有升起。但是...

    贝叶斯统计为什么优于频率统计?

     

    想象一下,有一天早上你醒来,太阳决定休息一天。这不仅会(最有可能)破坏你的一天并搞砸你的生物钟,这也会直接改变你对太阳升落的感觉。你不再坚信太阳永远会第二天升起来的真理了!更有可能预测到第二天太阳也不会升起。或者说,你对太阳将再次休息一天的期望将会比以前高很多。

    贝叶斯统计的作用过程就是:我们根据新证据改变了对事件发生概率的先有的、固有的看法。这是所有贝叶斯统计数据的关键。

    更数学的描述一下,贝叶斯规则:

    贝叶斯的规则告诉我们,我们必须从一些关于事件发生可能性的固有概率开始(事前)。我们称之为先验概率。逐渐地,随着我们获得新的观察和证据,我们查看证据,决定我们当前立场的可能性基础上更新我们的信念。这种更新的信念称为后验概率(事后)。

    贝叶斯统计为什么优于频率统计?

     

    回到我们的日出问题,我们每天都观察到太阳升起,每当它发生时我们都会更确定它会在第二天再次升起。但是,如果有一天我们发现太阳没有上升,这将根据新的证据对我们的后验概率产生巨大影响。

    这在数学上以下面的形式表达,起初看起来令人生畏但可以被抽象:我们更新的信念是基于我们最初的信念和基于我们当前信念(可能性)呈现的新证据。有多少新的证据,我们的信念有有多少可能是正确的。如果最初信念是太阳明天不上升的概率是百万分之一,如果某一天(仅仅是如果)太阳没有照常升起,那么我的信念错误的可能性非常高,后验概率会更新以预测它是更有可能再次发生。

    贝叶斯统计为什么优于频率统计?

     

    先验至上主义:克伦威尔规则

    奥利弗·克伦威尔(Oliver Cromwell)是英国历史上的杰出人物,1658年在苏格兰教会大会上引用了一句名言:

    "“我恳求你们,以基督的同情心想一想,你们可能错了。”

    贝叶斯统计为什么优于频率统计?

     

    这句话导致了丹尼斯林德利对克伦威尔规则的定义,这提出了如果一个先验概率等于零(我知道某些事情不是真的)或一个(我知道某事是真的)的想法,然后,尽管向你展示了什么证据,你的信念也不会被动摇。

    这向我们展示了在观察可以经验观察的事物时绝对主义观点的危险性。如果我坚信一种信念,我确信我是对的,没有人会说或做任何事情都不会说服我。这是无知的高度,而不是我们想要融入机器学习模型的东西。如果我们回顾贝叶斯定理,我们可以看出为什么会出现这种情况,如果我们的先验概率为零,那么将它乘以任何东西仍然会给我们一个后验概率为零。

    原则上,没有可能将某种概率设置为零,因为物理世界中的任何东西都不应该被认为是完全不可能的 - 即使与所有观察的和当前的理论相反。

    可能发生这种情况的一个理想例子是神经网络。当你启动神经网络时,节点会以某些固有值开始。如果将这些节点全部分配为权重为零,则节点将无法自行更新,因为梯度下降算法的所有迭代都将乘以零。而是进行随机初始化(通常对用户不可见),这通常可以防止诸如此类的问题。

    贝叶斯定理的另一个有趣的特性来自于我们观察在无数次观察之后发生的事情,通常称为伯恩斯坦 - 冯米塞斯定理。

    伯恩斯坦 - 冯米塞斯定理

    简单来说,伯恩斯坦 - 冯米塞斯Bernstein-von Mises定理告诉我们,当我们获得更多数据时,我们的后验估计将渐近地独立于我们的初始(先验)信念 - 当然,它假设它遵循克伦威尔规则。这在某些方面类似于频率统计中的数字法则,它告诉我们样本的平均值最终将与总体相同,因为我们获得的数据越来越多。

    机器学习中贝叶斯统计与频率统计

    以硬币翻转为例 - 不公平硬币(不均匀)出现的可能性是多少?

    贝叶斯统计为什么优于频率统计?

     

    频率统计解释

    翻转不公平硬币时看到头部的概率是在重复翻转硬币时看到头部的长期相对频率。也就是说,当我们进行更多的硬币翻转时,作为总翻转的比例获得的头数倾向于硬币作为头部出现的“真实”或“物理”概率。特别是运行实验的个人并没有结合他们自己对其他硬币公平性的看法。

    贝叶斯统计解释

    在任何翻转硬币之前,个人可能认为硬币是公平的。几次翻转后,硬币不断上升。因此,对硬币公平性的先前信念进行了修改,以解释三个头已经连续出现的事实,因此硬币可能不公平。在500次翻转后,有400个头,个人更强烈的认为硬币不太可能公平。后验信念在很大程度上修改先前对公平硬币的信念。

    在机器学习中,贝叶斯方法和频率方法之间的根本区别在于随机性存在的位置。在频率范畴中,数据被认为是随机的,而参数(例如,均值,方差)是固定的。在贝叶斯范畴中,参数被认为是随机的而数据是固定的。这是因为相比于数据,我们更关心产生这些数据的系统(参数)。

    伯努利审判:机器学习更加关注产生数据的参数

    对于硬币试验,以机器学习的视角来审视贝叶斯统计的魅力!

    伯努利试验是一项随机试验,只有两种结果,通常标记为“成功”或“失败”,其中每次试验时成功的概率都完全相同。成功的概率由θ给出θ,这是0和1之间。

    在进行一些硬币翻转实验(重复伯努利试验)的过程中,我们将生成一些数据D,关于头或尾。

    一个自然的例子问题是“给出一个公平的硬币(θ=0.5),在8次翻转中看到3个头的概率是多少?”。

    模型帮助我们确定给定参数θ的值,此数据D的概率。表示为:P(D | θ )。

    但是,如果你考虑一下,我们实际上对另一个问题感兴趣,“考虑到我看到了特定的头尾序列,硬币是公平的的概率是多少?”

    因此,我们对P(θ | D )概率分布感兴趣,这反映了我们对θ的不同可能值的信念。鉴于我们已观察到一些数据D,可得P(D | θ )。那么我们如何在这两个概率之间得到什么呢?事实证明,贝叶斯的规则是允许我们在两种情况之间进行的链接。

    贝叶斯统计为什么优于频率统计?

     

    贝叶斯统计推理的规则:

    P(θ | D )= P(D | θ )P(θ )/P(D )

    • P(θ )是先验这是我们对θ的信念的力量,不考虑证据D。我们之前关于硬币有多公平的可能性的看法。
    • P(θ | D )是后验这是一旦证据D已被考虑在内,我们对θ的信念的力量θ。在看到8次翻转中的4个头之后,比如说,这是我们关于硬币公平性的最新观点。
    • P(D | θ )是可能性这是由具有参数θ的模型生成数据D的概率。如果我们知道硬币是公平的,这就告诉我们在特定数量的翻转中看到许多头的数据D的概率。
    • P(D )是证据这是通过对所有可能的θ值求和(或积分)确定的数据的概率,其中加权我们对θ的特定值的相信程度。如果我们对硬币的公平性有多种看法(但不确定),那么这就告诉我们看到一系列翻转的可能性,以便我们相信硬币的公平性。

    贝叶斯推断的整个目标是为我们提供一个合理的,数学上合理的程序,以便将我们先前的信念与手头的任何证据结合起来,以产生更新的后验信念。使其成为如此有价值的技术的原因在于后验信念本身可以用作新数据生成的先验信念。因此,贝叶斯推理允许我们通过反复应用贝叶斯规则来不断调整我们在新数据下的信念。

    我们什么时候应该使用贝叶斯统计?

    贝叶斯统计包含可用于机器学习的特定类型的模型。通常,由于各种原因中的一个或多个原因,人们会使用贝叶斯模型,例如:

    • 数据点相对较少
    • 具有强大的先前直觉(来自预先存在的观察/模型)关于事物是如何工作的
    • 具有高度不确定性,或强烈需要量化特定模型或比较模型的不确定性水平
    • 想要对替代假设的可能性提出一些要求,而不是简单地接受/拒绝零假设

    我们可以清楚地看到,频率论和贝叶斯方法之间存在很大的协同作用,特别是在当今大数据和预测分析变得如此突出的世界中。我们为各种系统提供大量数据,我们可以不断地对系统进行数据驱动的推断,并在越来越多的数据可用时不断更新。由于贝叶斯统计提供了更新"知识"的框架,实际上它在机器学习中使用了很多。

    展开全文
  • 随机事件 引例一,掷两次硬币,其可能结果有...则出现偶数点的事件A,点数≤4的事件B都是可能出现,也可能不出现的事件。 从引例一与引例二可见,有些事件在一次试验中,有可能出现,也可能不出现,即它没有确定
  • 在这种方式下,所有的数据都被并行的采集到,所有的事件都会在实时的状态下被比较。但通过使用一个多路复用器,如图3.01所示,将会从多个通道中切换输入并且驱动一个单一的模拟数字转换器,从而极大地降低系统的成本...
  • 前段时间需要做一款频率采集设备,由于成本考虑,使用了APM32F103作为主控,频率信号为11KHz到23KHz,精度要求在任何频率范围误差能大于当前频率的万分之五以上(排除温度影响),采集速度要100次每秒以上。...
  • 要说贝叶斯和频率学派,那简直太有意思了。为什么这么说呢?因为两个学派的理解对于我来说真的是一场持久战。我是在学习机器学习的时候接触到的这两个学派,此前并知道,当时就被深深吸引了,于是找了各种资料学习...
  • 如何区分统计学中的概率与频率

    千次阅读 多人点赞 2021-08-08 14:04:59
    概率和频率算是统计学中的一个基本概念。统计学就是通过频率估测概率,达到参数估计和推论事件的目的。---即概率判断
  • rc振荡器振荡频率计算 微控制器中的振荡器频率 (Oscillator Frequency in Microcontrollers) The digital computer systems must contain an oscillator circuit for its functioning. The oscillator circuit is ...
  • *如果数据窗口的DoubleClicked事件中编写了脚本,那么在数据窗口的C1icked事件中的脚本应该尽量短,否则双击事件中的脚本永远不可能得到执行。一般来说,Cliked中脚本的执行时间和两次击鼠标之间的间隔时间之和,...
  • 统计学中的频率学派与贝叶斯学派

    万次阅读 多人点赞 2018-08-18 13:18:40
    这篇博文里,不会呈现任何计算公式,只是讨论一下贝叶斯学派与频率学派之间的问题。  贝叶斯学派与频率学派是当今数理统计学的两大学派,基于各自的理论,在诸多领域中都起到了重要作用。自20世纪初数理统计学大...
  • 一、场景分析 ...一般来说,这种重复请求会在后端进行过滤,但是只靠后端无法保证能够处理所有...那么问题来了,全站可能有几十上百个按钮,该如何进行限制? 二、解决方案 1. 方案一 给每个按钮绑定一个变量,在按...
  • 光速、频率、波长三者的关系:波长=光速/频率,即射频信号频率越高波长越短,波长越长频率越低 射频信号在空气和介质中传输时,信号强度会下降(衰减),通常人们认为频率越高、波长越短的电磁信号衰减得越快,但...
  • 在最初接触概率的时候,我们学习的是古典概率,是频率派的解释。...0.5这个概率是客观存在的,但是我们只能通过对事件结果发生的频率来猜测这个值。如果我们将重复抛硬币抽象为重复发生的事件,抛硬币...
  • 很明显,这些事件的概率通过频率学派是很难进行估计的,因为这些事件不可能在相同条件下重复。 不过,频率派的优点则是没有假设一个先验分布,因此更加客观,也更加无偏。由此,在一些保守的领域(比如制药业、法律...
  • 什么是事件驱动架构(EDA)?

    千次阅读 2020-05-21 01:03:56
    事件驱动就是在保持了事件和核心逻辑的稳定性和被修改的前提下,通过定义不同的“响应”从而达到了对“扩展的开放”。 Event-driven architecture components An event-driven architecture typically consists ...
  • 频率和概率的区别

    万次阅读 2019-07-15 15:48:01
    频率是变化的每次试验可能不同,概率是稳定值不变.在一定条件下频率可以近似代替概率. 就比如,抛硬币,正面的次数/总的次数=正面出现的频率,当抛得的次数越来越多的时候,频率就可以近似于正面出现的概率。 ...
  • 事件相机整理】信号处理、噪声与滤波

    千次阅读 热门讨论 2020-05-22 11:29:11
    本文仅用于自己学习整理,保证内容的完整性和准确性,仅供其他朋友参考。转载请注明出处。 噪声和信号处理是比较低层次的一种处理,但也非常重要。近日学习了一些信号处理与噪声处理的论文,做以下梳理。 1. 灰度...
  • CPU频率被锁定到800mhz怎么办?

    千次阅读 2020-12-19 21:35:00
    春节假期很快就过去了,大家开始“热情地”投入工作中,这,有网友在胖了三斤后,终于开始为自己的电脑运行缓慢而发愁了。他发现电脑总是卡顿,在运行AIDA64后,发现自己电脑在开机后,CPU总是被锁定在800MHz的...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 114,432
精华内容 45,772
关键字:

不可能事件的频率