机器学习原理入门。
问题描述 (1)
现有一些HDD磁盘的性能数据(通过iostat采集),如下所示:
| idx | rrqms | wrqms | rs | ws | ios | rsecs | wsecs | iosecs | await |
|---|---|---|---|---|---|---|---|---|---|
| 1 | 2.08 | 5.63 | 35.72 | 106.82 | 142.54 | 3200.0 | 14500.0 | 17700.0 | 5.34 |
| 2 | 2.23 | 7.42 | 19.10 | 109.62 | 128.72 | 2600.0 | 15100.0 | 17700.0 | 4.44 |
| 3 | 2.47 | 9.78 | 18.17 | 74.43 | 92.60 | 2700.0 | 8700.0 | 11400.0 | 5.55 |
| 4 | 2.57 | 9.52 | 17.85 | 69.00 | 86.85 | 2900.0 | 8000.0 | 10900.0 | 6.05 |
| 5 | 2.35 | 7.52 | 16.17 | 60.10 | 76.27 | 2400.0 | 7100.0 | 9500.0 | 5.66 |
| 6 | 2.30 | 6.67 | 16.13 | 54.10 | 70.23 | 2400.0 | 6600.0 | 9000.0 | 5.94 |
| 7 | 1.83 | 4.15 | 16.13 | 41.03 | 57.16 | 2300.0 | 4400.0 | 6700.0 | 6.18 |
| 8 | 1.28 | 3.28 | 12.27 | 32.50 | 44.77 | 1600.0 | 3600.0 | 5200.0 | 6.34 |
| 9 | 1.05 | 1.75 | 52.85 | 34.50 | 87.35 | 2300.0 | 3200.0 | 5500.0 | 7.67 |
| 10 | 0.87 | 1900.00 | 118.17 | 46.87 | 165.04 | 18400.0 | 18400.0 | 36800.0 | 26.19 |
| 11 | 0.57 | 1.62 | 54.40 | 30.15 | 84.55 | 2700.0 | 2800.0 | 5500.0 | 7.82 |
| 12 | 0.45 | 1700.00 | 113.00 | 42.75 | 155.75 | 16000.0 | 17200.0 | 33200.0 | 26.00 |
| 13 | 0.57 | 4600.00 | 218.90 | 72.85 | 291.75 | 39000.0 | 40700.0 | 79700.0 | 34.55 |
| 14 | 0.80 | 3300.00 | 178.38 | 65.62 | 244.00 | 29000.0 | 30500.0 | 59500.0 | 30.65 |
| 15 | 0.72 | 2900.00 | 158.85 | 62.03 | 220.88 | 25200.0 | 27300.0 | 52500.0 | 29.51 |
| 16 | 1.37 | 6.77 | 56.90 | 79.83 | 136.73 | 2500.0 | 8400.0 | 10900.0 | 7.22 |
| 17 | 1.60 | 6.48 | 63.85 | 68.55 | 132.40 | 2900.0 | 7900.0 | 10800.0 | 7.52 |
| 18 | 1.23 | 6.03 | 55.65 | 62.70 | 118.35 | 2700.0 | 7200.0 | 9900.0 | 7.54 |
| 19 | 1.53 | 6.03 | 35.93 | 89.67 | 125.60 | 2300.0 | 13700.0 | 16000.0 | 5.92 |
| 20 | 1.53 | 6.82 | 48.83 | 101.32 | 150.15 | 2700.0 | 16100.0 | 18800.0 | 7.42 |
| 21 | 1.73 | 7.48 | 57.03 | 100.82 | 157.85 | 2900.0 | 16400.0 | 19300.0 | 7.13 |
| 22 | 1.95 | 6.03 | 24.35 | 73.90 | 98.25 | 2300.0 | 15000.0 | 17300.0 | 5.95 |
| 23 | 1.90 | 7.02 | 26.77 | 88.12 | 114.89 | 2500.0 | 15400.0 | 17900.0 | 5.04 |
| 24 | 2.20 | 6.72 | 37.12 | 85.57 | 122.69 | 3500.0 | 14600.0 | 18100.0 | 5.67 |
其中:
- rrqms: 每秒合并的read io
- wrqms: 每秒合并的write io
- rs: read io per second
- ws: write io per second
- ios: rs + ws
- rsecs: read sectors (512B) per second, i.e. read bandwidth
- wsecs: write sectors (512B) per second, i.e. write bandwidth
- iosecs: rsecs + wsecs, i.e. total bandwidth
- await: latency in milliseconds
要通过机器学习的方法,找出await与其它指标(ios, rs, ws, iosecs, rsecs, wsecs, …)的关系,即:
$$
await = f(x_1, x_2, …)
$$
其中$x1$, $x2$, … 代表磁盘的其它指标(ios, rs, ws, iosecs, rsecs, wsecs, …);
有了这个模型之后,就可以判断一个磁盘是否故障:若实际await高出模型计算出的期望await太多(例如实际await大于2倍的期望await),就判定为故障。
机器学习的步骤 (2)
所谓机器学习(训练),就是要生成一个上一节提到的函数$f$;分为3步:
- step1: 定义模型,即一个带有未知参数的函数
- step2: 定义损失函数;
- step3: 优化,以确定step1中的未知参数;
这里“参数”的意义不同意编程中的参数;以C语言为例
1 | float f(float x1, float x2) |
其中的x1和x2是参数;但在机器学习中,w1、w2和b是参数;x1和x2是input;
定义模型 (2.1)
为了简单,先假定只有ios这一个input,即只通过ios这一个指标来预测磁盘的await;
那么,await和ios什么关系呢?拍脑袋猜测是线性关系,即
$$
await = w \cdot x
$$
其中$x$代表input ios,$w$即未知参数。
- 注意1:实际工程中,选择模型需要专业知识,即domain knowledge;姑且认为拍脑袋也算专业知识吧!
- 注意3:这里假定模型只有一个未知参数$w$;很多课程此时会假定有2个未知参数,除$w$外还有一个bias参数$b$;我们从最简单的情形开始:只有一个参数时,损失函数的图像是一条曲线,计算其微分也不涉及偏微分。搞明白道理之后,再扩展为2个及更多参数。
训练的过程,就是找到一个最优的$w$使得通过模型计算出来的结果和真实结果最接近;如何衡量模型计算出来的结果和真实结果是否接近呢,这就是损失函数。
定义损失函数 (2.2)
损失函数用来衡量$w$有多好。对于我们的例子,可以这样:
- 使用模型计算await;
- 和真实的await做差,然后再平方;24条训练数据,会得到24个平方;
- 把这些平方累加起来;
注意:一般情况,还会对累加结果再开根号;为了简单这里也不再开根号了,反正它们的趋势是一样的;
$$
L(w) = \sum_{n=1}^{24} (w x_n - a_n)^2
$$