白话机器学习:模型--判别式模型 vs 生成式模型

​ 首先我们看一下机器学习的目的,机器学习就是想让机器从大量的现存的数据对中去找到某种规律。当新的数据来了之后,机器可以根据这个规律进行判断。

​ 我们可以把这个数据对抽象的定义为:
( X , Y ) , X = x 1 , x 2 . . . x n (X, Y), X = {x_1, x_2 ... x_n} (X,Y)X=x1,x2...xn
​ 其中X一般来说是一个矢量数据,也就是说从多个“因”推理出某种"果"。

​ 根据数据类型的不一样,比如数据为离散值,我们把这样的数据推理叫做分类,如果数据为连续值,那么这个问题就称作为回归。

​ 举个栗子:

​ 我们想通过数据来预测公交是否晚点。

​ 如果数据为:
( X , Y ) , X = ( 小 雨 ∣ 中 雨 ∣ 大 雨 ) , Y = ( 晚 点 , 不 晚 点 ) (X, Y), X = (小雨|中雨|大雨),Y=(晚点,不晚点) (X,Y)X=()Y=()

​ (小雨,不晚点)

​ (中雨,晚点)

​ (大雨,晚点)

​ 那么这个问题就是一个分类问题。

​ 假设数据变成:
( X , Y ) , X ∈ R , Y ∈ R (X, Y), X \in R, Y\in R (X,Y)XR,YR

​ (雨量:34mm,晚点3分钟)

​ (雨量:43mm,晚点5分钟)

​ (雨量:56mm,晚点10分钟)

​ 那么这个问题就是一个回归问题了。

​ 机器学习的任务就是从这样一大批数据中找出一定的规律:模型。待下一个数据来了,直接使用模型就行推理获得结论。

​ 我们标题中提到的判别式模型生成式模型讲的怎么去建立模型的事情。这两个模型的一个区别在于:判别式模型是针对 p ( y ∣ x ) p(y|x) p(yx)进行建模,而生成式模型是针对 p ( x , y ) p(x, y) p(x,y)的联合概率进行建模,然后再通过贝叶斯公式 p ( y ∣ x ) = p ( x , y ) p ( x ) p(y|x) = \frac{p(x, y)}{p(x)} p(yx)=p(x)p(x,y) 进行推理。

  • 判别式模型:模型通过已知数据获得了一个决策函数,用这个函数去对 p ( y ∣ x ) p(y|x) p(yx)进行建模,我的理解就是从x -> y的映射关系。比如某个二次函数
    y = f ( x ) = a x 2 + b x + c y = f(x) = ax^2 + bx +c y=f(x)=ax2+bx+c
    那么,下次来了一个新的数据,我们直接代入决策函数进行计算,就可以得到结果。

    比如之前的例子,假设我们得到晚点的时间与雨量成正比:
    y = f ( x ) = 0.2 x + 3 y = f(x) = 0.2x + 3 y=f(x)=0.2x+3
    那么假设下雨的量为50分钟,我们就可以直接通过这个模型计算得到晚点时间为13分钟。

    如果结果是分类问题的话,会根据阈值进行分类。
    f ( x ) = 0.2 x + 3 f(x) = 0.2x + 3 f(x)=0.2x+3

    y = g ( f ( x ) ) = { − 100 < f ( x ) < 0 1 , 0 < f ( x ) < 100 2 , 100 < f ( x ) < 200 y = g(f(x)) = \begin{cases} -100 < f(x) < 0 \\ 1, 0 < f(x) < 100 \\ 2, 100 < f(x) < 200 \end{cases} y=g(f(x))=100<f(x)<01,0<f(x)<1002,100<f(x)<200

    如果X是多维矢量的话,比如2维,那么假设是这种模型:
    y = f ( x ) = a x 1 2 + b x 2 3 + c y = f(x) = ax_1^2 + bx_2^3 +c y=f(x)=ax12+bx23+c
    不管什么形式,通过某种决策函数可以根据矢量X直接计算得出结果Y,那么这种模型我们称之为判别式模型,比如KNN,SVM等机器学习方法都是学习一个判别式模型。

    在判别式模型的学习过程中,模型的参数,比如上面提到的 a , b , c a, b, c a,b,c等都是需要根据数据进行训练调整的,也就是说,通过数据试着找出一个最好的分界线(或者面,二维的情况下),这个最好可以有不同的定义,典型的定义可以是各数据点到这个线或者面的距离和最小。

  • 生成式模型:

    生成式模型首先假设数据 ( x , y ) (x,y) (x,y)符合某种分布 D D D,比如符合高斯分布之类,获得起联合分布函数 P ( x , y ) P(x, y) P(x,y),然后再根据不同的类别,通过 p ( y ∣ x ) = p ( x , y ) p ( x ) p(y|x) = \frac{p(x, y)}{p(x)} p(yx)=p(x)p(x,y)计算各自的分布情况。如果有新的数据来了,代入到每个类别的分布中去计算概率,哪个概率大就说明属于哪个类别。

    举个栗子:

    当前我们有以下样本:
    ( x , y ) ∈ [ ( 2 , − 1 ) , ( 2 , − 1 ) , ( 3 , − 1 ) , ( 3 , 1 ) , ( 3 , 1 ) ] (x,y)\in [(2,-1),(2,-1),(3,-1),(3,1),(3,1)] (x,y)[(2,1),(2,1),(3,1),(3,1),(3,1)]
    那么,根据这个样本,我们可以得到 p ( x , y ) p(x,y) p(x,y)的联合分布函数为:

    img

    而条件概率 p ( y ∣ x ) p(y|x) p(yx)的概率函数为:

    img

    通过这个函数,计算得到了 p ( y = − 1 ∣ x = 3 ) p(y=-1|x=3) p(y=1x=3)的概率小于 p ( y = 1 ∣ x = 3 ) p(y=1|x=3) p(y=1x=3)的概率。因此,如果来了新的数据 x = 3,模型就会将这个数据分类到y=1类。

  • 不同点,从网上搬运了一张图过来,从图中可以看出,判别模型就是在不同的类别中划分一条界限,而生成模型就是用不同的区域(概率分布函数)把不同类型的数据"围住" 。

白话机器学习:模型--判别式模型 vs 生成式模型_第1张图片
因此,生成模型对新数据的适应性更好。但是生成式模型需要间接计算后验概率,而且需要计算多个 p ( x ∣ y ) p(x|y) p(xy),也就是每个类型下数据的分布情况,计算量会比判别模型大不少。

你可能感兴趣的:(白话机器学习,机器学习,生成式模型,判别式模型)