0%

机器学习入门

机器学习原理入门。

问题描述 (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
2
3
4
float f(float x1, float x2)
{
return w1 * x1 + w2 * x2 + b;
}

其中的x1x2是参数;但在机器学习中,w1w2b是参数;x1x2是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
$$

写的不错,有赏!