learning

week17 决策树 信息增益 贝叶斯网络 机械臂实验

2019-11-04  本文已影响0人  吃醋不吃辣的雷儿

空气越来越冷,没有叶子的树依然安详,我和风中的枯叶一同飞翔

10.30

陈老师带着我们做了一套卷子——机器与深度学习随堂测验,哇不做不知道一做才发现自己好多基础的知识没有学精学扎实,来补一补

MLE(最大似然估计)

MLE简单的理解可以这样:假设我们手上有一批数据(样本),而且我们假设这些数据(样本)服从某个分布( 模型已知),但是参数未知.这个时候,我们希望对这个参数进行估计,而MLE的思想就是找到一个参数值,使得每条样本出现的概率最大!

具体来说假设样本为x1,x2.....xn,待估计的参数为θ.
那么要优化的目标为:

argmax P(x1,x2,...xn|θ) image.png
假设每个样本间独立同分布那么我们有:
argmax ∏ni=1P(xi|θ) image.png

后面一般是取对数,把连乘转化成连加的形式

MAP(最大后验概率)

还是同样的场景:我们有一批数据(样本),我们假设其服从某个分布(模型已知),参数未知.但是,我们还有一个额外的信息就是,我们虽然不知道参数具体是多少,但是我们知道这个参数也服从某个分布,MAP就是加上这个条件后,去对我们的参数进行估计.
具体可以表现为:

argmax P(θ|x1,x2,...xn) image.png
做一步贝叶斯公式有:
argmax P(θ|x1,x2,...xn)=P(x1,..xn|θ)P(θ)/P(x1,x2...xn) image.png

其中P(θ)就是我们对θ的一个先验分布
MLE是通过直接最大化似然概率P(x1,..xn|θ)来求解参数θ,而MAP是通过最大化似然概率×先验分布,即P(x1,..xn|θ)P(θ)来求解参数θ,两者都是用于模型已知,参数未知下对参数进行估计的方法.

10.31

决策树和信息增益

庄子·秋水

庄子与惠子游于濠梁之上。庄子曰:"鲦鱼出游从容,是鱼之乐也。"惠子曰:"子非鱼,安知鱼之乐?"庄子曰:"子非我,安知我不知鱼之乐?"惠子曰:"我非子,固不知子矣;子固非鱼也,子之不知鱼之乐,全矣!"庄子曰:"请循其本。子曰'汝安知鱼乐'云者,既已知吾知之而问我。我知之濠上也。


例题

p1=p(鱼类)=0.4 p2(非鱼)=0.6 H1 = 以二为底的对数信息熵(p1,p2)= 0.97

根据不浮出水面是否可以生存画 “||” 是否属于鱼类分为AB两类 划分情况为 AAB || BB
h1 = 以二为底的对数信息熵(1/3, 2/3)=0.92,h2 = 0,H2 = 0.6 * h1 + 0.4 * h2 = 0.55 Gain(H1,H2) = H1 - H2 = 0.42

根据是否有脚蹼 画"||" 判断是否属于鱼类为最终的分类目标 划分情况为 AABB || B
h1 = 以二为底的对数信息熵(2/4, 2/4)=1,h2=0,H3 = 0.8 * h1 + 0.2 * h2 = 0.8 Gain(H1, H3)= H1- H3 =0.17

第一种划分明显比第二种的信息增益大,因此这个特征是更好的划分数据集的特征(根据信息增益原则)

import math


feature_dict = {'feature1': [1, 1, 1, 0, 0], 'feature2': [1, 1, 0, 1, 1], 'feature3': [1, 1, 0, 0, 0],
            'feature4': [1, 1, 0, 0, 0], 'feature5': [0, 0, 1, 1, 1]}


def calculate_entropy(problist):  # 输入概率列表,和为1,计算信息熵
    if sum(problist) != 1:
        problist = [p/sum(problist) for p in problist]
        print("Wrong input!\nThe problist has been changed!")
    entropy_list = [-p * math.log2(p) for p in problist]
    entropy = sum(entropy_list)
    return entropy


def calculate_gain(list1, list2):  # list1代表最终的分类目标的分布,list2是要计算其信息增益的特征的分布
    list3 = [list1[i] for i in range(len(list2)) if list2[i] == 1]
    list4 = [list1[i] for i in range(len(list2)) if list2[i] == 0]
    number_1 = sum([k for k in list3 if k == 1])
    number_2 = sum([k for k in list4 if k == 1])
    number_0 = sum([k for k in list1 if k == 1])
    if number_1 == 0 or number_1 == len(list3):
        list5 = [1]
    else:
        list5 = [number_1/len(list3), 1 - number_1/len(list3)]
    if number_2 == 0 or number_2 == len(list4):
        list6 = [1]
    else:
        list6 = [number_2/len(list4), 1 - number_2/len(list4)]
    if number_0 == 0 or number_0 == len(list1):
        list7 = [1]
    else:
        list7 = [number_0 / len(list1), 1 - number_0 / len(list1)]
    entropy1 = calculate_entropy(list5)
    entropy2 = calculate_entropy(list6)
    entropy0 = calculate_entropy(list7)
    gain = entropy0 - entropy1 * len(list3)/(len(list3) + len(list4)) - entropy2 * len(list4)/(len(list3) + len(list4))
    print(gain)
    return gain


calculate_gain(feature_dict['feature3'], feature_dict['feature1'])

11.2

贝叶斯网络

部分转载自:从贝叶斯方法谈到贝叶斯网络 - zdy0_2004的专栏 - CSDN博客 https://blog.csdn.net/zdy0_2004/article/details/41096141
模拟人处理事情时因果关系的不确定性模型,网络拓扑结构为有向无环图
节点为随机变量,表示可观测到的变量,或隐变量、未知参数。两个节点用有向箭头连接起来,表示有因果关系,父节点表示自变量,子节点表示因变量,二者非条件独立。

节点
简而言这,把某个研究系统中涉及的随机变量,根据是否条件独立绘制在一个有向图中,就形成了贝叶斯网络。其主要用来描述随机变量之间的条件依赖,用圈表示随机变量(random variables),用箭头表示条件依赖(conditional dependencies)。

定义

令G = (I,E)表示一个有向无环图(DAG),其中I代表图形中所有的节点的集合,而E代表有向连接线段的集合,且令X = (Xi)i ∈ I为其有向无环图中的某一节点i所代表的随机变量,若节点X的联合概率可以表示成:


概率学定义

则称X为相对于一有向无环图G 的贝叶斯网络,其中,pa(i)表示节点i之“因”,或称pa(i)是i的parents(父母)。 此外,对于任意的随机变量,其联合概率可由各自的局部条件概率分布相乘而得出:


相乘
简单贝叶斯网络
概率
网络

可以很明显地看到,x1、x2、x3相互独立,那我们怎么判断x2和x6、x7有没有关系呢?所以要引入D-Seperation这个概念
D-Separation是一种用来判断变量是否条件独立的图形化方法。换言之,对于一个DAG(有向无环图)E,D-Separation方法可以快速的判断出两个节点之间是否是条件独立的。

形式1:head-to-head
形式1
推导

即在c未知的条件下,a、b被阻断(blocked),是独立的,称之为head-to-head条件独立,对应网络图中的“x1、x2独立”。

形式2:tai-to-tail
形式2
有P(a,b,c)=P(c)P(a|c)P(b|c),则:P(a,b|c)=P(a,b|c)/P(c),然后将P(a,b,c)=P(c)P(a|c)P(b|c)带入上式,得到:P(a,b|c)=P(a|c)*P(b|c)。
即在c给定的条件下,a,b被阻断(blocked),是独立的,称之为tail-to-tail条件独立,对应网络图中的“x6和x7在x4给定的条件下独立”。
形式3:head-to-tail
形式3
推导

在c给定的条件下,a,b被阻断(blocked),是独立的,称之为head-to-tail条件独立。
这个head-to-tail其实就是一个链式网络,如下图所示:


链式网络
在xi给定的条件下,xi+1的分布和x1,x2…xi-1条件独立。即:xi+1的分布状态只和xi有关,和其他变量条件独立,这种顺次演变的随机过程,就叫做马尔科夫链(Markov chain)。且有:
马尔可夫链

11.3

Dobot Magician 机械臂

坐标轴

MOVJ:关节运动
由A点运动到B点,各个关节从起始位置A对应的关节角运行到结束位置B的关节角,运动过程中要
求各轴运行时间一致,同时到达终点。
MOVL:直线运动,A点到B点的路径是直线。


movej与movel

JUMP:门型轨迹
由A点到B点的JUMP运动,等价于先设置一个Height,将A点和B点的竖坐标Z
加上Height,分别得到C点和D点,再做以A-C-D-B为轨迹的三个MOVL运动。


jump
CP:连续轨迹功能的指令,用于连续轨迹相关的运动设置和配置。
其中包括关节参数、坐标系参数、功能设置参数等。连续轨迹功能和上位机Dobot CP对应,可以实
现写字、画画、激光雕刻等功能。
ARC:设置和获取圆弧插补功能参数
示教再现

① 移动鼠标到起始点
② 打开吸盘
③ 移到鼠标到终点
④ 关闭吸盘
…… 以此类推
⑤ 保存一系列点后,可自动重复搬运

画图
  1. 连接普通笔
  2. 安装相关插件(在配置环境中已经实现,但可能会有更新)
  3. 手动移动机械臂到纸面上(不可太轻或过重,否则导致画图不清晰或纸张破裂)
  4. autoZ,返回记录纸面的Z值
  5. 软件中输入需要画的图形(只能画出线条,无法画填充背景)或文字
  6. 将图形或文字移到两条弧形中间(两条弧形为水平面XY方向的范围限制)
  7. 点击开始即可自动打印
    注意:1. XY方向范围限制问题 2. 只能画出线条(其字体粗化操作无用)
激光雕刻
  1. 连接激光发射器
  2. 安装相关插件(在配置环境中已经实现,但可能会有更新)
  3. 手动移动机械臂到距离牛皮纸面约10cm(不宜太远或太近)
  4. autoZ,返回记录高度的Z值
  5. 软件中打开需要画的图形文件,会显示图片和灰度图
  6. 将图片移到两条弧形中间(两条弧形为水平面XY方向的范围限制)
  7. 点击开始即可自动打印
    注意:1. XY方向范围限制问题 2. 灰度图问题
问题

① 坐标系的定义及转换:根据关节处舵机的角度构成J(关节)坐标系、根据关节坐标系以及各部分臂长,可以计算X Y Z轴坐标,而R坐标系直接与J4相对应
② 吸盘延时:在释放点到吸取点途中便打开吸盘 —— 避免吸盘打开延迟
③ 碰撞物品:在吸取点到达释放点附近时,应当采用垂直下降方式靠近释放点 —— 避免惯性使物品位置偏移,尽量走jump运动
④ 摆放角度:注意R轴(操作物品)旋转时机,若在可触碰到一定范围内有障碍,应当避免
⑤ 画图时只画线:画图时一笔连成区域一起画,由里到外,先画内部简单部分,再画外部复杂框架


搬运
写helloworld
激光雕刻
上一篇下一篇

猜你喜欢

热点阅读