简单分类
训练数据样本包含输入向量以及对应的目标向量的应用被称作有监督学习,例如MNIST手写识别。如果训练样本仅有输入向量,而没有目标向量,则称为是无监督学习。
若一个输入样本的目标是将其映射到有限个离散标签中的一个,则称其为分类问题;若一个样本的目标是将其映射到一个连续区间,则称其为回归问题。
增强学习关注的是在给定条件下,找到合适的动作,使得获得的奖励达到最大值。所以这种学习没有给定最优目标,而Agent需要在一系列试验中寻找最优解。
多项式拟合
通过多项式拟合,我们来看看什么叫欠拟合和过拟合。
设N个样本构成的矩阵为
x=(x1,x2,...,xN)T
,对应的观测值为
t=(t1,t2,...,tN)T
。对应的拟合值为
y=y(x,W)=w0+w1∗x+w2∗x2+...+wM∗xM
, 由此构成的代价函数为:
E(W)=12∗∑n=1N{y(xn,w)−tn}
,所以目标就是最小化代价函数,使得整体上y与t最接近。
示例:
设要拟合的函数为 sin(2π∗x)
# -*- coding: utf-8 -*-
"""
Created on Tue Mar 15 09:02:46 2016
@author: thesby
"""
import numpy as np
import matplotlib.pylab as plt
x = range(10);
x = np.asarray(x, dtype=np.float32)
x = x / 10
#x = np.transpose(x)
t = np.sin(x*2*np.pi)
y = t + 0.1 * np.random.rand(10)
M = 1
p = np.polyfit(x, y,deg=M)
predict = np.polyval(p,x)
cost = np.sum(np.square(predict-y))
plt.figure()
plt.plot(x, y, '*')
x_show = range(100)
x_show = np.asarray(x_show, dtype=np.float32) / 100
t_show = np.sin(2 * np.pi * x_show)
predict_show = np.polyval(p, x_show)
plt.plot(x_show, t_show)
plt.plot(x_show, predict_show)
plt.show()
通过改变M,可以看到不同的拟合线。
可以看到在M=1,2时,明显曲线无法跟踪样本点,这是欠拟合现象,到了M=3,拟合曲线表现变好,这个拟合还算可以,但是到了M=10,虽然每个样本点都基本在拟合曲线上,但是最后那个翘脚表明了它后面肯定不是 sin(2∗π∗x) 的样子,这就是过拟合。
Excercise: 把M从0取到15,看看cost的变化,并用plt画出来。
未完待续(贝叶斯理论)