『瀚思彼岸』» 智能家居技术论坛

 找回密码
 立即注册
查看: 7958|回复: 46

[文档汉化] HA官方文档/贝叶斯汉化(基于概率判断事件的方法)

  [复制链接]

9

主题

91

帖子

860

积分

超级版主

Rank: 8Rank: 8

积分
860
金钱
754
HASS币
20
发表于 2022-11-1 15:08:58 | 显示全部楼层 |阅读模式
本帖最后由 SilverWolf 于 2022-11-2 18:03 编辑

贝叶斯(一种基于概率判断事件的方法)

最新一次更新:2022/11/2
本文基于官方文档说明文件进行人工翻译。部分字段使用了机翻。如果有朋友发现翻译不恰当的地方望留言指出,我会第一时间跟进修改。
不了解贝叶斯的朋友可以先阅读下
lidicn大神写的文章https://bbs.hassbian.com/thread-4813-1-1.html

通过使用贝叶斯(bayesian)二进制传感器,可以监视多个传感器的状态,以贝叶斯定理(概率)根据指定传感器状态推测事件发生的概率。如果概率高于设定的阈值,则传感器打开,否则关闭。

这将更容易检测一些不易判断的复杂事件,例如烹饪、淋浴、是否上床、早晨例行活动的开始等。它可用于获取传感器不易直接监测到的状态。此时你需要依赖贝叶斯(概率)推测某一事件的状态。在达到可信赖的值时触发。例如:推测某些人或物是否存在。

理论
贝叶斯法则的一个关键概念是 "给定观察的事件之间的差异“。在某些情况下,这些概率是相似的。例如:房间内人体传感器检测到运动的概率与有人在房间里的概率近似,因为有人在房间里。在其他情况下,这种区别要重要得多。每次前门接触传感器报告开门时,我刚到家的概率(事件)(p=0.2)【可理解为20%】与我回家时前门接触传感器被触发的概率(p=0.999)是不同的。
在configuration中,可以使用指定事件(根据相关传感器状态)的概率推测(写入二进制传感器的状态)

估算概率
1、避免使用0和1,这些会扰乱概率,因为在概率学0% 100%是几乎不存在的,如果你要是100%那你还不如用(如果-就 if-else)去判断。
2、当使用0.99和0.001时。9和0的数量很重要。
3、大多数概率将是基于时间的--某件事情在同一时间所占据的比例也是它的概率。
4、使用HomeAssistant历史记录可以帮助你设置概率。
       prob_given_true:在您认为贝叶斯传感器应该为真的时间范围内选择传感器。prob_given_true:是传感器处于 to_state 的时间分数
        prob_given_false:在您认为贝叶斯传感器应该为假的时间范围内选择传感器查询。 prob_given_false:是传感器进入状态的时间分数

5、不要试图调整prob_given_trueprob_given_false来获得你想要的结果和行为,使用(第4条)来尝试并获得尽可能接近 "真相 "的概率,如果你的行为不符合预期,考虑添加更多的传感器。(第6条)
6、如果你的贝叶斯传感器最终太容易触发,重新检查所设置的概率是否合理,然后考虑增加probability_threshold,反之亦然。


配置
若要启用贝叶斯传感器,请将以下列行添加到 configuration.yaml 中
# 示例 configuration.yaml 条目
binary_sensor:
 - platform: bayesian
   prior: 0.1
   observations:
     - entity_id: "switch.kitchen_lights"
       prob_given_true: 0.6
       prob_given_false: 0.2
       platform: "state"
       to_state: "on"

配置变量

prior float 必填
    该事件的先验概率(0到1)。在任何时间点上(忽略所有的外部影响),这个事件发生的可能性有多大?

probability_threshold 浮点 (可选, 默认值: 0.5)
    传感器应触发为开启的后验概率。使用较高的值来减少假阳性(和增加假阴性) 注意:如果阈值高于先验,那么默认状态将是关闭。

name string (可选, 默认值: Bayesian Binary Sensor)
    要在UI使用的传感器名称。

device_class 字符串 (可选)
    更改设备的类,更改前端UI显示的设备状态和图标。


observations list 必填
    应该影响给定事件发生概率的观察。

    platform 字符串 必填
        支持的platform有state、numeric_state和template。它们的模型是根据其相应的自动化触发器
        要求to_state(用于状态),低于总和/或高于(数字状态)或value_template(用于模板)。

    entity_id 字符串 (可选)
        要监视的实体名称。对于state和numeric_state是必需的。

    to_state 字符串 (可选)
        定义观察的实体状态。需要(for state).

    value_template template (可选)
        定义要使用的模板,应评估为真或假。对模板来说是必需的。

    prob_given_true 浮点 必填
        当贝叶斯二进制传感器为true时所需要的实体状态可信度概率。

    prob_given_false 浮点 必填
        当贝叶斯二进制传感器为false时所需要的实体状态可信度概率。

完整示例
以下是stateobservation platform的示例
# 示例 configuration.yaml 条目
binary_sensor:
  name: "in_bed"
  platform: "bayesian"
  prior: 0.25 # 我每天花6个小时在床上6小时/24小时是0.25
  probability_threshold: 0.8 # 我将使用此传感器来熄灯,所以我只想在确定时激活
  observations:
    - platform: "state"
      entity_id: "sensor.living_room_motion"
      prob_given_true: 0.05 # 如果我在床上,那么我不应该在客厅里,但是我偶尔会有客人
      prob_given_false: 0.2 # 我的传感器历史记录显示如果我不在床上,我会花大约五分之一的时间在客厅里
      to_state: "on"
    - platform: "state"
      entity_id: "sensor.basement_motion"
      prob_given_true: 0.5 # 我的传感器历史记录显示,当我躺在床上时,由于我的猫,我的地下室运动传感器大约一半的时间处于活动状态
      prob_given_false: 0.3 # 如上所述,但我的猫在我醒着时倾向于在楼上或外面花更多的时间,且我很少使用地下室
      to_state: "on"
    - platform: "state"
      entity_id: "sensor.bedroom_motion"
      prob_given_true: 0.5 # 我的传感器历史记录显示,当我躺在床上时,传感器大约一半的时间会检测到我
      prob_given_false: 0.1 # 我的传感器历史记录显示,我大约 10% 的清醒时间都在卧室里度过
      to_state: "on"
    - platform: "state"
      entity_id: "sun.sun"
      prob_given_true: 0.7 # 如果我躺在床上,那么太阳很有可能会下山,但在夏天的早晨,我可能仍然在床上。
      prob_given_false: 0.45 # 如果我醒着,那么太阳很有可能在地平线以下 - 特别是在冬天
      to_state: "below_horizon"
    - platform: "state"
      entity_id: "sensor.android_charger_type"
      prob_given_true: 0.95 # 当我躺在床上时,我几乎总是插上手机充电
      prob_given_false: 0.1 # 当我醒来时,我偶尔会给手机充电
      to_state: "ac"


接下来是一个针对numeric_state观察平台的例子,从配置上看,它需要低于总和/或高于它,来替代to_state
binary_sensor:
  name: "Heat On"
  platform: "bayesian"
  prior: 0.2
  probability_threshold: 0.9
  observations:
    - platform: "numeric_state"
      entity_id: "sensor.outside_air_temperature_fahrenheit"
      prob_given_true: 0.95
      prob_given_false: 0.05
      below: 50

最后,这里有一个例子,从配置上看,它需要value_template。如果设备追踪器device_tracker.paulus显示not_home,并且它最后一次改变状态是在5分钟之前,这个模板将返回true。
# 示例 configuration.yaml 条目
binary_sensor:
  name: "Paulus Home"
  platform: "bayesian"
  device_class: "presence"
  prior: 0.5
  probability_threshold: 0.9
  observations:
    - platform: template
      value_template: >
        {{is_state('device_tracker.paulus','not_home') and ((as_timestamp(now()) - as_timestamp(states.device_tracker.paulus.last_changed)) > 300)}}
      prob_given_true: 0.05
      prob_given_false: 0.99


游客,如果您要查看本帖隐藏内容请回复


评分

参与人数 7金钱 +57 收起 理由
jjcs + 12 在下对你的景仰犹如滔滔长江之水,连绵不绝.
griddz + 5 膜拜大神!
tangyali + 8 这才是真正高手玩的
咸味土豆 + 12 厉害了word楼主!
dscao + 10 纳尼,还有这种操作?
moz111 + 5 高手,这是高手!
brigcn + 5 这才是我们真正需要的东西啊!.

查看全部评分

一名野生的HA玩家。致力于打造让自己变成废人的智能家居系统。
回复

使用道具 举报

11

主题

134

帖子

1158

积分

金牌会员

Rank: 6Rank: 6

积分
1158
金钱
1024
HASS币
0
发表于 2022-11-1 16:19:25 | 显示全部楼层
看不懂,但是好像和我的智能家居一比我的就是傻瓜
回复

使用道具 举报

9

主题

91

帖子

860

积分

超级版主

Rank: 8Rank: 8

积分
860
金钱
754
HASS币
20
 楼主| 发表于 2022-11-1 16:34:52 | 显示全部楼层
moz111 发表于 2022-11-1 16:19
看不懂,但是好像和我的智能家居一比我的就是傻瓜

简单点说就是让HA思考。不再是简单的因为所以。因为触发了传感器所以执行自动化。这很傻。这个就可以让ha主动思考你要干啥,他要做什么。
一名野生的HA玩家。致力于打造让自己变成废人的智能家居系统。
回复

使用道具 举报

8

主题

691

帖子

4594

积分

论坛元老

Rank: 8Rank: 8

积分
4594
金钱
3898
HASS币
0
QQ
发表于 2022-11-1 16:41:30 | 显示全部楼层
这才是我们真正需要的东西啊!.
回复

使用道具 举报

9

主题

527

帖子

2352

积分

金牌会员

Rank: 6Rank: 6

积分
2352
金钱
1825
HASS币
0
发表于 2022-11-1 18:15:56 | 显示全部楼层
没想到毕业好多年了还要学习数学
回复

使用道具 举报

9

主题

91

帖子

860

积分

超级版主

Rank: 8Rank: 8

积分
860
金钱
754
HASS币
20
 楼主| 发表于 2022-11-1 18:33:00 | 显示全部楼层
yylwhy 发表于 2022-11-1 18:15
没想到毕业好多年了还要学习数学

给你讲个故事,HA甚至支持定积分
一名野生的HA玩家。致力于打造让自己变成废人的智能家居系统。
回复

使用道具 举报

3

主题

119

帖子

1175

积分

金牌会员

Rank: 6Rank: 6

积分
1175
金钱
1056
HASS币
0
发表于 2022-11-1 18:53:44 来自手机 | 显示全部楼层
这才是智能
回复

使用道具 举报

0

主题

43

帖子

986

积分

高级会员

Rank: 4

积分
986
金钱
943
HASS币
0
发表于 2022-11-1 21:47:55 | 显示全部楼层
佩服佩服~ 看来现在对HA的理解仅仅是皮毛中的皮毛
回复

使用道具 举报

0

主题

12

帖子

73

积分

注册会员

Rank: 2

积分
73
金钱
61
HASS币
0
发表于 2022-11-2 14:59:58 | 显示全部楼层
看了两三遍,没看明白,哈哈哈哈哈哈哈
回复

使用道具 举报

9

主题

91

帖子

860

积分

超级版主

Rank: 8Rank: 8

积分
860
金钱
754
HASS币
20
 楼主| 发表于 2022-11-2 18:11:40 | 显示全部楼层
WatchHey 发表于 2022-11-2 14:59
看了两三遍,没看明白,哈哈哈哈哈哈哈

建议先从最简单的自动化玩起。
这个其实也不是特别难。
具体有用的就6个值
整个事件有多大可能发生。prior
  实体是什么类型的platform (可以是state也可以是其他的,自己学习学习很快就能理解)
  哪一个实体作为判断条件  entity_id:
  实体返回什么值   to_state: "on" (不好给你解释,自己琢磨琢磨)
  具体某一项条件可信赖的概率是多少 prob_given_true    (20%对应0.2依次类推)
  不信赖概率又是多少prob_given_false
  看看示例这个并不难
一名野生的HA玩家。致力于打造让自己变成废人的智能家居系统。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|Hassbian

GMT+8, 2024-12-22 14:31 , Processed in 0.067503 second(s), 33 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表