2.11
其他算法实验
SVM
使用非线性SVM,在训练集中(带生成数据)得到结果:
AccuracyF | precisionFn | recallFn |
---|---|---|
70.71% | 94.83% | 31.47% |
ANN
目前调整后的ANN,只能取得在训练集合中对查全率的优势
round | AccuracyF | precisionFn | recallFn |
---|---|---|---|
1 | 88.83% | 50.00% | 35.37% |
6 | 89.37% | 52.56% | 50.00% |
11 | 87.87% | 46.46% | 56.10% |
16 | 88.96% | 50.54% | 57.32% |
21 | 87.60% | 46.22% | 67.07% |
Random Forest
效果最好的是随机森林。从原始数据(不加入生成数据)直接开始训练,获得较好的训练精度,并在测试集获得结果:
AccuracyF | precisionFn | recallFn |
---|---|---|
93.19% | 83.33% | 35.71% |
结果再分析
数据标准化、归一化的问题。
对于ANN,生成负类数据能进一步提高其对负类分类的准确率。
再查看分类结果,发现模型对以下状况缺少判断能力:
1.出现连续不选用情况时,会有一次直接选用。
2.时间上相邻的两天都出现计量值,且计量值相差不大,第一天不选用,而第二天选用(是否选用也和曾经的计量值有关、和以后计量值有关)。(见1555,1556行)
3.未出现计量,但是存在控制变化。如开关井,只会出现在备注当中。(见3182行)
4.
目前也还有一些我也看不出来为什么不选用的但仍然保留的数据。(见2227行)
反思
现在工作基本上是对原数据的处理以及生成数据。人工提取信息。除开从备注中提取信息,其余工作是否有悖于让机器自己学习。
我甚至觉得拿正确率以及负类的查准查全率来直接衡量模型的效果并不好。而应该称之为与专家判断的重合度。待和专家讨论。
2.17
ANN
初步修改错误历史数据、增加提取信息:
round | AccuracyF | precisionFn | recallFn |
---|---|---|---|
1 | 67.98% | 17.67% | 59.46% |
6 | 89.65% | 48.68 % | 50.00% |
11 | 90.60% | 53.33% | 54.05% |
16 | 90.74% | 53.33% | 64.86% |
21 | 89.92% | 50.00% | 66.22% |
26 | 92.64% | 61.90% | 70.27% |
31 | 91.83% | 57.95% | 68.92% |
36 | 91.96% | 57.89% | 74.32% |
41 | 91.42% | 55.67% | 72.97% |
Random Forest
初步修改错误历史数据后训练效果:
AccuracyF | precisionFn | recallFn |
---|---|---|
94.55% | 83.33% | 41.66% |
2.26
1 号井
473 计量
原始数据:
fold | train loss | valid loss | AccuracyF | precisionFn | recallFn | f1-score |
---|---|---|---|---|---|---|
fold 1 | 0.036935 | 0.134181 | 40.13 | 13.08 | 93.33 | 22.95 |
fold 2 | 0.019199 | 0.030440 | 89.81 | 83.33 | 86.54 | 84.91 |
fold 3 | 0.022982 | 0.038105 | 80.56 | 80.56 | 93.33 | 80.56 |
人工去噪后:
fold | train loss | valid loss | AccuracyF | precisionFn | recallFn | f1-score |
---|---|---|---|---|---|---|
fold 1 | 0.017498 | 0.131981 | 40.13 | 12.96 | 100.00 | 22.95 |
fold 2 | 0.009566 | 0.019558 | 96.18 | 100.00 | 82.35 | 90.32 |
fold 3 | 0.012156 | 0.021183 | 92.36 | 78.38 | 87.88 | 82.86 |
********** fold 1 **********
train_loss:0.017498 train_acc:95.2229
valid loss:0.131981 valid_acc:40.1274
AccuracyF 40.13 posLabel 68.79
precisionF 12.96 recallF 100.00 f1score 22.95
********** fold 2 **********
train_loss:0.009566 train_acc:98.4076
valid loss:0.019558 valid_acc:96.1783
AccuracyF 96.18 posLabel 17.83
precisionF 100.00 recallF 82.35 f1score 90.32
********** fold 3 **********
train_loss:0.012156 train_acc:97.1338
valid loss:0.021183 valid_acc:92.3567
AccuracyF 92.36 posLabel 23.57
precisionF 78.38 recallF 87.88 f1score 82.86
2 号井
735 计量
原始数据:
fold | train loss | valid loss | AccuracyF | precisionFn | recallFn | f1-score |
---|---|---|---|---|---|---|
fold 1 | 0.019975 | 0.045306 | 84.90 | 35.71 | 95.24 | 51.95 |
fold 2 | 0.012172 | 0.021511 | 95.51 | 94.12 | 78.05 | 85.33 |
fold 3 | 0.010313 | 0.024738 | 94.69 | 87.76 | 86.00 | 86.87 |
********** fold 1 **********
train_loss:0.019975 train_acc:95.1020
valid loss:0.045306 valid_acc:84.8980
AccuracyF 84.90 posLabel 22.86
precisionF 35.71 recallF 95.24 f1score 51.95
********** fold 2 **********
train_loss:0.012172 train_acc:97.9592
valid loss:0.021511 valid_acc:95.5102
AccuracyF 95.51 posLabel 13.88
precisionF 94.12 recallF 78.05 f1score 85.33
********** fold 3 **********
train_loss:0.010313 train_acc:97.3469
valid loss:0.024738 valid_acc:94.6939
AccuracyF 94.69 posLabel 20.00
precisionF 87.76 recallF 86.00 f1score 86.87
人工去噪后:
fold | train loss | valid loss | AccuracyF | precisionFn | recallFn | f1-score |
---|---|---|---|---|---|---|
fold 1 | 0.008610 | 0.017070 | 95.51 | 70.00 | 73.68 | 71.79 |
fold 2 | 0.005306 | 0.015061 | 96.73 | 96.55 | 80.00 | 87.50 |
fold 3 | 0.007223 | 0.012422 | 97.96 | 89.47 | 85.00 | 87.18 |
********** fold 1 **********
train_loss:0.008610 train_acc:98.1633
valid loss:0.017070 valid_acc:95.5102
AccuracyF 95.51 posLabel 8.16
precisionF 70.00 recallF 73.68 f1score 71.79
********** fold 2 **********
train_loss:0.005306 train_acc:99.1837
valid loss:0.015061 valid_acc:96.7347
AccuracyF 96.73 posLabel 11.84
precisionF 96.55 recallF 80.00 f1score 87.50
********** fold 3 **********
train_loss:0.007223 train_acc:98.5714
valid loss:0.012422 valid_acc:97.9592
AccuracyF 97.96 posLabel 7.76
precisionF 89.47 recallF 85.00 f1score 87.18
3 号井
500 计量
原始数据:
fold | train loss | valid loss | AccuracyF | precisionFn | recallFn | f1-score |
---|---|---|---|---|---|---|
fold 1 | 0.006831 | 0.020066 | 97.59 | 71.43 | 100.00 | 83.33 |
fold 2 | 0.008887 | 0.011371 | 98.19 | 92.31 | 96.00 | 94.12 |
fold 3 | 0.002982 | 0.009007 | 98.19 | 100.00 | 86.36 | 92.68 |
********** fold 1 **********
train_loss:0.006831 train_acc:98.1928
valid loss:0.020066 valid_acc:97.5904
AccuracyF 97.59 posLabel 8.43
precisionF 71.43 recallF 100.00 f1score 83.33
********** fold 2 **********
train_loss:0.008887 train_acc:98.1928
valid loss:0.011371 valid_acc:98.1928
AccuracyF 98.19 posLabel 15.66
precisionF 92.31 recallF 96.00 f1score 94.12
********** fold 3 **********
train_loss:0.002982 train_acc:99.6988
valid loss:0.009007 valid_acc:98.1928
AccuracyF 98.19 posLabel 11.45
precisionF 100.00 recallF 86.36 f1score 92.68
4 号井
438 计量
原始数据:
fold | train loss | valid loss | AccuracyF | precisionFn | recallFn | f1-score |
---|---|---|---|---|---|---|
fold 1 | 0.036123 | 0.061221 | 80.14 | 75.00 | 32.43 | 45.28 |
fold 2 | 0.012165 | 0.046827 | 91.10 | 98.00 | 80.33 | 88.29 |
fold 3 | 0.034513 | 0.017605 | 98.63 | 95.45 | 95.45 | 95.45 |
********** fold 1 **********
train_loss:0.036123 train_acc:91.4384
valid loss:0.061221 valid_acc:80.1370
AccuracyF 80.14 posLabel 10.96
precisionF 75.00 recallF 32.43 f1score 45.28
********** fold 2 **********
train_loss:0.012165 train_acc:98.2877
valid loss:0.046827 valid_acc:91.0959
AccuracyF 91.10 posLabel 34.25
precisionF 98.00 recallF 80.33 f1score 88.29
********** fold 3 **********
train_loss:0.034513 train_acc:93.8356
valid loss:0.017605 valid_acc:98.6301
AccuracyF 98.63 posLabel 15.07
precisionF 95.45 recallF 95.45 f1score 95.45
5 号井
386 计量
原始数据:
fold | train loss | valid loss | AccuracyF | precisionFn | recallFn | f1-score |
---|---|---|---|---|---|---|
fold 1 | 0.018768 | 0.077099 | 81.25 | 47.83 | 47.83 | 47.83 |
fold 2 | 0.019433 | 0.022893 | 95.31 | 84.38 | 96.43 | 90.00 |
fold 3 | 0.008144 | 0.020113 | 95.31 | 96.43 | 84.38 | 90.00 |
********** fold 1 **********
train_loss:0.018768 train_acc:95.7031
valid loss:0.077099 valid_acc:81.2500
AccuracyF 81.25 posLabel 17.97
precisionF 47.83 recallF 47.83 f1score 47.83
********** fold 2 **********
train_loss:0.019433 train_acc:97.2656
valid loss:0.022893 valid_acc:95.3125
AccuracyF 95.31 posLabel 25.00
precisionF 84.38 recallF 96.43 f1score 90.00
********** fold 3 **********
train_loss:0.008144 train_acc:98.8281
valid loss:0.020113 valid_acc:95.3125
AccuracyF 95.31 posLabel 21.88
precisionF 96.43 recallF 84.38 f1score 90.00
老板的笔记
2.11
- 实际数据中,相对效果不重要,绝对效果才重要。应该达到甲方需求,而不是体现算法在对比中显示的先进性。
- 数据的可用性。离群点、标签含噪声。能否通过与专家交互改进数据质量。
- 数据的进一步使用。
- 模型的复杂性(样本不独立)。
- 正、负类的误分类代价不同,应该考虑代价敏感学习。
- 附加信息不可得。
关键信息不可得。 - 数据必须独立同分布。
garbage in, garbage out
2.28
实验观察的三个层次:
- 顶层,如测试精度。可以通过最终结果来观察。相当于系统测试。
- 中层,如:把数据分成几块,分别计算:
a) 训练集中的精度、召回率等,知道模型的拟合能力,这是一个基本保障。如果这个效果不好,就表示数据质量不好,无法保证内部的一致性;
b) 用一块训练,另一块测试,获取精度、召回率等。如果这个不好,就表示分布不同;
c) 用 k - 1 块训练,另一块测试,获取精度、召回率等。如果这个不好,就表示这一块与其它的分布不同;
d) 生成决策树等具有可读性的模型,比较不同数据块获得的模型;
相当于集成测试。 - 底层,对单个的样例分类。可以通过跟踪调拭来观察。相当于单元测试。
总之,要进行具体问题的定位。