3 Matching Annotations
  1. Sep 2018
    1. 如何解决分类问题无法微分

      1. perceptron(introduce in future)
      2. SVM(introduce in future)
      3. generative model: probability based method(introduce here)

      基于概率(Bayes)的分类问题解法 --- 生成模型:

      蓝盒子,绿盒子,其中各置5个球,球也有蓝色和绿色。已知:

      1. 蓝盒:4蓝 + 1绿
      2. 绿盒:2蓝 + 3绿

      问:现抽出一蓝球,问他来自两个盒子概率各是多少:P(blueBox | blueBubble)=?

      这个问题使用 bayes 条件概率公式非常好求,只需要知道四个值

      1. Prior of blueBox: \(P(blueBox)\)
      2. Priof of greenBox: \(P(greenBox)\)
      3. condition probability of blueBubble given blueBox: \(P(blueBubble | blueBox)\)
      4. condition probability of blueBubble given greenBox: \(P(blueBubble | greenBox)\)

      类比:

      蓝盒子 --- class 1;

      绿盒子 --- class 2;

      class 1,class 2,各有很多样本。已知:

      1. class 1:海龟,金枪鱼,
      2. class 2:老鹰,白鸽,

      问:现有一鸭嘴兽,问他来自两个分类的概率各是多少?

      我们同样需要知道 4 个值

      1. Prior
      2. Prior
      3. condition prob
      4. condition prob

      counting based method for Prior

      从训练集中,直接“数”出标签为 C1 的样本数量,和标签为 C2 的样本数量各是多少,记做 N1 , N2.

      \(P(C1) = N1/(N1 + N2)\)

      \(P(C2) = N2/(N1 + N2)\)

      naive bayes method for condition probability

      分类问题中的条件概率不同于“盒子抽球”的最大地方在于:你要计算的 \(P(x|C1)\) 中的 x 是现有样本集中没有的

      把当前 c1 样本 和 c2 样本都想象成概率分布,而当前数据集仅仅是根据概率分布做的抽样(全体中的部分)

      如果我们能得到这个概率分布,我们就可以知道鸭嘴兽属于陆生和海生的概率各是多少。

      假设:c1 和 c2 的概率分布是高斯分布,且他们都是高斯分布集合( gaussian distribution hypothesis )中的一个 gaussian distribution, 我们该如何找到这个高斯分布呢 --- 只需确定 \(\Sigma\) 和 \(\mu \), 就可以唯一确定一个高斯分布。

      那如何通过样本来倒推出 \(\Sigma\) 和 \(\mu \) 呢?

      maximum likelihood

      找到一个 \(\mu, \Sigma\) ,由他确定的高斯分布在所有的高斯分布中,产生数据集的概率是最高的。

      \(f_{\mu,\Sigma}(x) = \frac{1}{(2\pi)^{D/2}}\frac{1}{|\Sigma|^{1/2}}exp(-\frac{1}{2}(x-\mu)^T\Sigma^-1(x-\mu))\)

      \(L(\mu,\Sigma) =f_{\mu,\Sigma}(x^1)f_{\mu,\Sigma}(x^2)f_{\mu,\Sigma}(x^3)......f_{\mu,\Sigma}(x^N)\)

      \(\mu^\star, \Sigma^\star = \arg\max_{\mu,\Sigma}L(\mu,\Sigma)\)

      这个 \(argmax\) 有一个很直观的公式解,可以直接记住:

      \(\mu^\star = \frac{1}{N}\sum_{n=1}^{N}x^n\)

      \(\Sigma^\star = \frac{1}{N}\sum_{n=1}^{N}(x^n-\mu^\star)(x^n-\mu^\star)^T\)

      Naive Bayes

      如果不适用极大似然估计,也可以使用 Naive Bayes 方法来推算 Prior probability.

      \(P(y|x) = \frac{P(x|y)P(y)}{P(x)=\sum^K_{i=1}{P(x|y_i)P(y_i)}}\)

      通过 count-based methodNaive Bayes(

      \(P([1,3,9,0] | y_1)=P(1|y_1)P(3|y_1)P(9|y_1)P(0|y_1)\) ) 先计算出:

      \(P(x|y_1)P(y_1)\)

      \(P(x|y_2)P(y_2)\)

      \(P(x|y_3)P(y_3)\)

      ...

      All done

      一旦得到了这个 \(\mu,\Sigma\) 我们就可以得到分类1 产生 x 的概率(即便他不存在于数据集中)的概率:

      \( P(x | C_1) = P(x | Gaussian_1(\mu_1, \Sigma_1))\)

      分类2 产生 x 的概率, 也很容易得到:

      \( P(x | C_2) = P(x | Gaussian_2(\mu_2, \Sigma_2))\)

      根据 bayes 公式:

      \(P(C_1 | x) = \frac{P(x | C_1) * P(C_1)}{P( x | C_1) * P(C_1) + P(x | C_2) * P(C_2)}\)

    2. one step further

      为了防止 overfitting,防止参数量太多而引起的数据集和模型的优化方向 mis-match 的情况。我们经常人为设定:

      \(\Sigma_1 = \Sigma_2\)

      需要说明的是:如果做了公用 \(Sigma\) 这种假设的话,最后得到的就是一个直线边界,不做这一假设的话得到的是一个曲线边界。

      likelihood 公式就变成:

      \(N1 = num(samples of C1)\)

      \(N2 = num(samples of C2)\)

      \(L(\mu_1, \mu_2, \Sigma) = f_{\mu_1,\Sigma}(x^1)f_{\mu_1,\Sigma}(x^2)f_{\mu_1,\Sigma}(x^3)......f_{\mu_1,\Sigma}(x^{N1}) * f_{\mu_2,\Sigma}(x^1)f_{\mu_2,\Sigma}(x^2)f_{\mu_2,\Sigma}(x^3)......f_{\mu_2,\Sigma}(x^{N2})\)

      对上面的式子可以通过微分,或者直接记住下面的公式解(其中 \(\mu_1\) \(\mu_2\) 跟原来一样,都是 样本的均值,\(\Sigma\) 是某类别的样本比例作为权重的 \(\Sigma\) 之和):

      \(\mu_1 = avg(sample of C1)\)

      \(\mu_1 = avg(sample of C1)\)

      \(\Sigma = \frac{N_1}{N_1+N_2}\Sigma^1 + \frac{N_2}{N_1+N_2}\Sigma^2\)

    3. 直接用【线性回归】模型解【分类问题】的弊端

      线性回归的标签值 \(y\) 都是实数(亦即可能任意大or任意小),同时线性回归的代价函数是平方误差 \((y-\hat{y})^2\) --- square error. 而代价函数又会通过 GD 直接影响 w 和 b --- 分界线。

      在分类问题中,无论错误程度多高,错点的代价永远算作‘1’;而在线性回归中,做错点的代价与他的错误程度平方正比(远大于1)。两者的代价函数不一样,两者得到的函数(分界线)就肯定不一样。