目录
类的输出: 属于哪一个类
例子: 信用评分(通过个人信息判断是否接受借贷申请), 医疗诊断, 手写辨识(中文至少8000字符)
(哈哈老师的小名叫大金)
应用例子-宝可梦
(你要说这个我可就不困了啊!)
分类问题是找一个function,它的input是一只宝可梦,它的输出是这个宝可梦属于哪一种type属性(18种)
数值化
怎么把某一只宝可梦当做function的input: 数值化
找到特性
Total: 整体实力(所有状态值之和), HP生命值, Attack攻击, Defense防御, SP Atk特攻, SP Def特防, Speed速度(相遇时谁先攻击)
用vector来描述它, vector由以上七种特性的数值所组成. 如皮卡丘(320, 35, 55, 40, 50, 50, 90)
是否能把这7个数字输入function, function输出宝可梦种类.
这件事情的作用: 决斗时因为属性相克关系, 若出现图鉴上没有的宝可梦, 就可以通过预测属性找到办法对付他.
如何完成分类任务
收集数据, 分成训练集与测试集. 再考虑如何解分类问题.
若把分类当作回归硬解
以二分类为例,把种类当成数值, (0为分界)输出接近1则取类1, 输出接近-1则取类2.
设模型为: y = b + w_1*x_1 + w_2*x_2
那么分界线即: b + w_1*x_1 + w_2*x_2
按照Regression思想,希望对于蓝色的这些属于class 1的宝可梦, 输出越接近1越好;
红色的属于class 2的宝可梦,输出越接近-1越好.
那么对于分类1中远大于1(太正确)的结果对regression来说是错的, 但对于分类真实结果来说是对的. 这会导致分界线向右下偏移, 以减小error使远离线的那一坨更接近1. (惩罚太正确)
存在问题:
1. Regression的output是连续性质的数值, Regression的function使大部分样本点的output都集中在某几个点附近. 因此,Regression对model好坏的定义方式对classification来说是不适用的.
2.如果是多元分类问题,class 1- target 1,class 2-target2,class 3-target 3存在问题: 即假设了class 1接近class 2, class 2接近class 3, class 1远离class 3.
主要还是loss function的问题哦
理想方法
输出的不再是实数, 而是离散值(discrete)
Function(Model):
function f(x)里内建一个g(x),如果g(x)>0,那f(x)的输出就是class 1,如果g(x)<0,那f(x)的输出就是class 2,这个方法保证了function的output都是离散的表示class的数值.
$$ \begin{aligned}& g\left( x \right) > 0&Output= ~class~1\\ & else&Output=class~2\end{aligned} $$
Loss function:
这个model在所有的training data上predict预测错误的次数
$$ L\left( f \right) = {\sum_{n}{\delta\left( {f\left( x^{n} \right) \neq {\hat{y}}^{n}} \right)}} $$
其中, 当f=y hat, δ值为0, 否则为1.
这个式子无法微分, 无法用gradient descent的方法去解的,当然有Perceptron、SVM这些方法可以用,但这里先用另外一个方法来解决这个问题-几率观点(也同样包含机器学习3步骤).
模型求解方法-生成模型
贝叶斯-全概率公式
已知两个盒子中球数( 盒1 蓝球占4/5, 绿占1/5; 盒2蓝球占2/5, 绿占3/5), 从盒1抽的几率是2/3, 从盒2抽的几率是1/3, 拿出发现是蓝球, 分别求从盒1盒2拿的概率.
即给定一个蓝球, 求它从B1里面出来的概率:
$$ P\left( B1~ \middle| ~Blue \right) = \frac{P\left( {\text{Blue}\left| B_{1} \right.} \right)P\left( B_{1} \right)}{P\left( {\text{Blue}\left| B_{1} \right.} \right)P\left( B_{1} \right) + P\left( {\text{Blue}\left| B_{2} \right.} \right)P\left( B_{2} \right)} $$
将问题抽象为二分类, 所需已知条件为: 从C1抽的几率, 从C2抽的几率, 从C1中能抽出x的的几率, 从C2中能抽出x的的几率.
$$ P\left( C_{1} \middle| x \right) = \frac{P\left( x \middle| C_{1} \right)P\left( C_{1} \right)}{P\left( x \middle| C_{1} \right)P\left( C_{1} \right) + P\left( x \middle| C_{2} \right)P\left( C_{2} \right)} $$
知道这4个值就知道x从C1抽的概率, 就知道哪一类的几率最大, 那这个问题就得以解决, . 所以需要利用训练集, 把这四个值测出来.
这一整套想法为Generative model(生成模型): 因为这个model可以生成(generate)x. 即计算x出现的几率, 从而得到x的分布(distribution), 用这个分布来产生(sample)x示例(如果你可以计算出每一个x出现的概率,就可以用这个distribution分布来生成x、sample x出来)
相关知识: 全概率-贝叶斯公式
参考: https://www.bilibili.com/video/BV1a4411B7B4 已知, 能成功做A1的概率P(A1), A1做成后能成功做B的概率P(B|A1), 根据概率乘法, 从A这条路径到B的概率P(A1) P(B|A1).
这两个公式基于同一个模型. 全概率为所有路径相加, 贝叶斯已知结果B求某条路径概率(这一条路径/其他所有概率之和)
这一坨一坨都是路径的概率
全概率求的是B: 1+2+…+n
贝叶斯求的是A: 1/(1+2+…+n)
计算四个所需值
Prior
P(C1)和P(C1)为Prior
考虑二元分类, 假设C1为水系, C2为普通系, 编号小于400的data用来Training,编号大于400的data用来testing.
在Training data里面,有79只水系宝可梦(杰尼龟, 可达鸭, 蚊香蝌蚪…),61只一般系宝可梦.
抽样从类1取出一只宝可梦的几率为: P(C1) = 79 / (79 + 61) =0.56
抽样从类2取出一只宝可梦的几率为: P(C2) = 61 / (79 + 61) =0.44
求剩下两个概率值
假如抽到的是水系, 求他是原盖海龟的概率P(x|C_1) ( 海龟要用其特征值描述哦 )
以防御力Defense/特防SP Defence为例, 把水系宝可梦的特征值画出来:
假设训练集是从高斯分布中抽样出来的, 给出一个已知特征值的新点(海龟), 不存在训练集中. 求水系抽到原盖海龟的概率?
高斯分布
把高斯(高维正态)分布看成一个函数, 其输入为一个向量x, 输出的是某宝可梦在该分布的概率密度 (与被抽样的概率成正比):
$$ f_{\mu,\Sigma}\left( x \right) = \frac{1}{\left( {2\pi} \right)^{D/2}}\frac{1}{\left| \Sigma \right|^{1/2}}exp\left\{ {- \frac{1}{2}\left\{ {x - \mu} \right\}^{T}\Sigma^{- 1}\left\{ {x - \mu} \right\}} \right\} $$
这个概率由两个东西决定: 均值μ(期望向量), 方差Σ(covariance协方差矩阵). 将这两者代入f得到不同分布, μ决定几率分布最高点, Σ决定分布的密集程度.
从79个样本找到该高斯分布->估测其μ, Σ得到分布函数->得到某新点从该分布抽样出来的概率.
参数估计-极大似然法
极大似然估计法Maximum Likelihood
似然函数L代表: 对待估参数, 从其决定的高斯函数中采样出已知的79个点的可能性.
$$ L\left( \mu,\Sigma \right) = f_{\mu,\Sigma}\left( x^{1} \right)f_{\mu,\Sigma}\left( x^{2} \right)f_{\mu,\Sigma}\left( x^{3} \right)\ldots\ldots f_{\mu,\Sigma}\left( x^{79} \right) $$
抽出第一个点的概率是f(x1), 抽出这19个点的概率就是f(x1)*…*f(x79).
极大似然估计是要找一个高斯分布, 它抽出这79个点的概率(似然函数值)最大, 记作(