感谢:
1. 预测神奇宝贝(回归)
举例应用
通过输入进化前的宝可梦cp值预测进化后宝可梦的cp值,其中的变量有
x
c
p
,
x
s
,
x
h
p
x_{cp},x_s,x_{hp}
xcp,xs,xhp等
1.1 Step1:确定模型
- 假设模型为
y
=
b
+
w
∗
x
c
p
y = b + w*x_{cp}
y=b+w∗xcp,理论上可以选择无穷的参数,但显然输出的
c
p
cp
cp值不能为负,
f
3
f_3
f3不可能
考虑到身高体重等因素,可以得到底部所示的线性函数
1.2 Step2:定义模型好坏
- 需要许多数据集来进行训练,因此需要很多宝可梦的进化前后数据,十个数据组成的数据集
- 定义Loss function,Loss function是函数的函数,即损失值受
w
,
b
w,b
w,b影响
y ^ \widehat{y} y 为真实值,损失值为真实值减预测值求平方再相加
3. 绘制
w
,
b
,
l
o
s
s
w,b,loss
w,b,loss图形,颜色越红代表损失值越大,越蓝代表损失值越小,函数越好
1.3 Step3:挑选最好的函数模型
- 挑选一个最 好的函数,找出一组
w
、
b
w、b
w、b代入函数,使
L
o
s
s
Loss
Loss 最小
- Gradient Descent
- 一个参数
- 随机选取 w 0 w_0 w0
- 计算 w = w 0 w=w_0 w=w0时的微分(求偏导得出函数斜率)如果斜率为正,则增加 w w w值,反之斜率为负,减少 w w w值,增加或减少 w w w值取决于斜率的大小。
- 反复上面两个步骤
- 两个参数,和一个参数没什么不同
- 一个参数
- 梯度下降有可能会进入局部最优点,但线性回归模型不存在这个问题
1.4 How’s the results?
- 经过训练,得到
b
=
−
188.4
;
w
=
2.7
b = -188.4; w = 2.7
b=−188.4;w=2.7为最佳的值,误差为31.9(训练数据上),得到的结果如图所示
- 又抓取10个样本作为测试集,平均误差为35,如何才能做的更好呢?
- 引入二次项式,找到最佳损失函数为15.4(训练集),18.4(测试集)
- 那引入三次式呢?Loss分别是15.3和18.1
- 那引入四次式呢?Loss分别是14.9和28.8,在测试集上Loss反而变高了,继续引入5次式,测试Loss更高了
- 这种在训练集上得到好的结果但测试集损失爆炸的现象叫做过拟合Overfitting
- 如果只考虑到进化前的CP值的话,那么在Pokemon较多的情况下会出现更大的误差,所以,我们还要把Pokemon的品种考虑进去。
1.5 Back to step1:Redesign the Model
- 如果Pokemon的品种是Pidgey,对应的函数是
y
=
b
1
+
w
1
∗
x
y = b_1 + w_1*x
y=b1+w1∗x
如果Pokemon的品种是Weedle,对应的函数是 y = b 2 + w 2 ∗ x y = b_2 + w_2*x y=b2+w2∗x
如果Pokemon的品种是Caterpie,对应的函数是 y = b 3 + w 3 ∗ x y = b_3 + w_3*x y=b3+w3∗x;
如果Pokemon的品种是Eevee,对应的函数是 y = b 4 + w 4 ∗ x y = b_4 + w_4*x y=b4+w4∗x。(不同的品种代不同的函数)
可以改写成一个linear function,假如输入的是Pidgey,函数输出的就是1,否则输出的就是0
- 在考虑了宝可梦的品种后,在Training Data上得到了更低的误差,平均误差为3.8,在Testing Data上也有明显的效果,误差更低,平均误差为14.3。
- 如果将更多的参数加入进去,Weight(身高)、Height(体重)、HP(血量)考虑进去的话,得到的结果误差会不会更低呢?结果训练集上损失很低,测试集过拟合了
1.6 Back to step2:Regularization
- 重新定义Loss Function,原来的Loss Function只考虑了预测的结果与正确的差的平方,现在,加上额外的w的平方的和,再乘以一个参数。前面的平方和越小代表函数误差越小,这个model就越好,加上后面的代表我们找到的w越接近0就越好,函数就越平滑。(测试时有一些干扰项输入,如果函数比较平滑,则对函数的输出影响较小,w越接近0代表输出受输入的影响就越小)
- 当 λ \lambda λ越来越大时,则代表后面一项的影响越大,函数就越平滑,训练集损失增加,因为考虑了更多 w 2 w^2 w2,但测试集的损失逐渐变小,因为整个函数变的平滑,对于输入的噪声不敏感,但是当λ值超过一定数值时,反而平均误差会增大。所以函数不是越平滑越好,我们要找一个合适的λ值。(这就需要我们调整λ的值)
2. 分类神奇宝贝(分类)
神奇宝贝有18种属性:水、电、火等等,现在找出一个函数,输入是一只Pokemon,输出的是这只Pokemon属 于哪一种属性。如输入的是皮卡丘,输出的是雷;输入的是杰尼龟,输出的是水;输入的是妙娃草,输出的是草。
一只Pokemon的整体强度、生命值、攻击力、防御力、特殊攻击力、特殊防御力、速度可以用数字所表示。
将一种神奇宝贝的7个参数用矩阵表示作为输入
2.1 How to do Classification
- 分类问题也可以理解成回归,比如有两个类别:输入结果接近-1为一类(class1),接近+1为另一类(class2),输入有两个参数,
x
1
和
x
2
x_1和x_2
x1和x2,图中绿色线为方程等于0的线
蓝色为结果更接近1,橘色为结果更接近-1(正负1和图上坐标没关系),但是如果有远大于1的点,右下角一些点,整体直线就会偏移成紫色的线
所以用Regression的方式来做,会不利于那些太正确的点,得不到好的结果。
- Ideal Alternatives
- Function:找一个函数,将值代入,如果大于0,输出class1,否则输出class2
- Loss Function:在Training data上得到的错误的次数,错误次数越少代表model越好
- 寻找最佳的函数
step 1:Function Set- 例:有两个盒子,盒子里面有蓝球、绿球。得到一个蓝球的概率如图。(其实就是贝叶斯公式,全概率公式,考研概率论知识),第一个盒子中抽出一个球的的概率是2/3,这个球是蓝球的概率是4/5。第二个盒子中抽出一个球的概率是1/3
- 同理,将盒子换成class1和class2,给定一个x,属于C1的公式如图所示,
- 先计算先验概率,分别计算
P
(
C
1
)
和
P
(
C
2
)
P(C_1)和P(C_2)
P(C1)和P(C2)
P ( C 1 ) P(C_1) P(C1)是在水系和一般系中选出一个水系的概率,为0.56
- 计算给定class,某一只宝可梦是从这个类别中挑选出来的几率,
例如, P ( x ∣ C 1 ) P(x|C_1) P(x∣C1)为从一堆水系动物中挑出一只乌龟的概率
5. 每个宝可梦有一个由七个数字组成的向量来进行表示,将79只宝可梦的防御力特殊防御力组成的training data画在图中
水系的神奇宝贝一共有79种,这只海龟不属于这79只当中。但是这只海龟是水系的。把79只水系的神奇宝贝的防御力、特殊防御力画图如图所示,某个点就表示一只Pokemon。不能说这个概率就是0,可以假设这79只Pokemon只是水系Pokemon的冰山一角。假设这79个点是从Gaussian distribution中找到的。
6. 高斯分布可以理解成输入x的向量,输出这只神奇宝贝从这个分布被sample出来的概率。(其实就是正态分布)
这个分布由 mean 、covariance matrix 决定。
7. 从Gaussian 中sample出79个点如图所示,估测出mean 、covariance matrix。给出一个新的点x,可以经过运算,得出x从Gaussian中sample出来的概率。
step 2:Goodness of a function- 那么如何找出mean 、covariance matrix呢?
这79个点可以从任何的高斯分布sample出来,不论mean和covariance matrix的位置,因此要找到能够求出概率最大的mean和covariance matrix组合,每个组合的likelyhood是79个点的概率的乘积
- 如何能够求出最大的组合呢?其中
μ
∗
\mu^*
μ∗为
x
n
x^n
xn之和的平均值,再根据
μ
∗
\mu^*
μ∗计算
Σ
∗
\Sigma^*
Σ∗
3. 因此,通过这样的方法就能将x所属类别的概率计算出来
4. 将得到的数据绘制出来,可以将几率大于0.5的为类别1,几率小于0.5的为类别2, 画出红蓝两个区域
- 那么如何找出mean 、covariance matrix呢?
- 例:有两个盒子,盒子里面有蓝球、绿球。得到一个蓝球的概率如图。(其实就是贝叶斯公式,全概率公式,考研概率论知识),第一个盒子中抽出一个球的的概率是2/3,这个球是蓝球的概率是4/5。第二个盒子中抽出一个球的概率是1/3