奶品质监测模拟
2019-10-13 本文已影响0人
ww4u
- 奶品质和时间相关,而且是一个前后相关的系统,即任何时刻的奶品质是和前一个时刻的奶品质相关的
- 需要在一个指定的时刻得到当前品质的估计值
- 这个估计值是奶品质的变化曲线
- 可以大致得到这样的函数关系: 奶品质(t) = f( t, 温度,湿度,其他的一些参数)
- 如何来拟合这样一个函数呢?因为我们并不是科学家,不能进行定性的分析,也不能确切地知道品质的变化具体因素
- 用机器学习的方法来估计这个函数
- 首先需要数据,构造一组模拟数据,有一个随机因子,不断累计随机因子的函数,从而可以得到一个得分
- 例如,在下面的我们构造一个函数来模拟参数到结果的映射;参数n个数据,表示时间累计。
def fx(x):
return x + x*x + x*x*x
def genGpData():
Xs = [ random.randint(1,10) for i in range(100) ]
Ys = []
last = None
for x in Xs:
if last:
last = last + fx(x)
else:
last = fx(x)
Ys.append( last )
return Xs, np.array(Ys).reshape( 100,1 )
image.png
- 我们采样了100个时间,从而形成[100*100]的矢量
-
可以看到,只有下面的部分有数值,即矩阵对角线上是全是0。0的意义是,时间还没有到。
image.png - 所以从横轴上看,是各个时间点的参数。这样,我们将时间信息给从公式中给去掉了,转而需要各个时间所采集的对应参数
- 训练:选用线性模型进行回归训练
from sklearn.svm import LinearSVR
regr = LinearSVR( random_state = 0 )
regr.fit( xds[0::1,:], Ys[0::1] )
print( regr.score( xds, Ys ) )
- 这里每次产生的一组数据,实际上对应一个样本的全过程变化,不同的样本有不同的环境和参数变化。
- 模拟参数 N * 100 的 矩阵数据,其中N为100的倍数
- 模拟中并没有针对所有的数据进行训练
-
例如,模拟10个样本的数据
image.png - 正确率可以得到:0.9976769587649769
-
用下面单独产生的样本进行验证 得分 0.9900302499171195
image.png
结论
- 用线性回归算法就可以很好地预测曲线变化
- 用于训练的数据要足够