- Sep 2018
-
192.168.199.102:5000 192.168.199.102:5000
-
如何解决分类问题无法微分
- perceptron(introduce in future)
- SVM(introduce in future)
- generative model: probability based method(introduce here)
基于概率(Bayes)的分类问题解法 --- 生成模型:
蓝盒子,绿盒子,其中各置5个球,球也有蓝色和绿色。已知:
- 蓝盒:4蓝 + 1绿
- 绿盒:2蓝 + 3绿
问:现抽出一蓝球,问他来自两个盒子概率各是多少:P(blueBox | blueBubble)=?
这个问题使用 bayes 条件概率公式非常好求,只需要知道四个值:
- Prior of blueBox: \(P(blueBox)\)
- Priof of greenBox: \(P(greenBox)\)
- condition probability of blueBubble given blueBox: \(P(blueBubble | blueBox)\)
- condition probability of blueBubble given greenBox: \(P(blueBubble | greenBox)\)
类比:
蓝盒子 --- class 1;
绿盒子 --- class 2;
class 1,class 2,各有很多样本。已知:
- class 1:海龟,金枪鱼,
- class 2:老鹰,白鸽,
问:现有一鸭嘴兽,问他来自两个分类的概率各是多少?
我们同样需要知道 4 个值:
- Prior
- Prior
- condition prob
- 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 method 和 Naive 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)}\)
-
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\)
-
直接用【线性回归】模型解【分类问题】的弊端
线性回归的标签值 \(y\) 都是实数(亦即可能任意大or任意小),同时线性回归的代价函数是平方误差 \((y-\hat{y})^2\) --- square error. 而代价函数又会通过 GD 直接影响 w 和 b --- 分界线。
在分类问题中,无论错误程度多高,错点的代价永远算作‘1’;而在线性回归中,做错点的代价与他的错误程度平方正比(远大于1)。两者的代价函数不一样,两者得到的函数(分界线)就肯定不一样。
Tags
Annotators
URL
-