申明:本文所有数据、内容、格式、图片都属于本人所有,珍惜劳动成果,任何组织和个人不得擅自用于商业用途,未经本人许可,不得引用、转载,谢谢
写于2010年
我们先来看客户石油行业的需求:
有一点:它说的其最优K分割的公式有些错误,它说在后段继续分割,但是要在全部上,重新分割,这点要提下。
采样数据比如为
1 ,2 ,3 ,4 ,5 ,6 ,
分为4层
采样数据大于2个数据才有意义,分层情况要大于1,小于采样数据个数,否则没有意义了,我们开始算法分析:
首先分2层:
第一种情况:1 | 2 3 4 5 6
第二种情况:1 2 | 3 4 5 6
第三种情况:1 2 3 | 4 5 6
第四种情况:1 2 3 4 | 5 6
第五种情况:1 2 3 4 5 | 6
根据最优分割是逐层递进的,那么变差是层内方差和层间方差的组合,我们先算出每层的平均数,很简单,比如:
第一种情况第一层的平均数:P1 = 1 / 1,
第二层的平均数是:P2 = (2 + 3 + 4 + 5 +6) / 5,
第一种情况总的平均数:P3 = (1 + 2 + 3 + 4 + 5 +6) / 6
第一种情况的层内方差是:
A1 = (1 – P1 )2
A2 = (2 – P2)2 + (3 – P2)2 + (4 – P2)2 + (5 – P2)2 + (6 – P2)2
第一种情况的层间方差是:
A3 = (1 – P3)2 + (2 – P3)2 + (3 – P3)2 + (4 – P3)2 + (5 – P3)2 + (6 – P3)2
变差为:Q1 = A1 + A2 + A3,然后分别得出第二种情况变差为Q2,然后分别得出第三种情况变差为Q3,然后分别得出第四种情况变差为Q4,然后分别得出第五种情况变差为Q5,然后比较min(Q1,Q2,Q3,Q4,Q5),得出最小的,比如我们假定得出Q3,那么第三种情况是最佳分割点,那么第三层划分的数据如下:
1 ,2 ,3 | 4 ,5 ,6 ,
分3层,注意 3 和 4 中间确定的最佳分割点不能动
第一种情况:1 | 2 3 | 4 5 6
第二种情况:1 2 | 3 | 4 5 6
第三种情况:1 2 3 | 4 | 5 6
第四种情况:1 2 3 | 4 5 | 6
同样,比如我们假定得出变差Q2是最小值,第二种情况是最佳分割点,那么第四层划分的数据如下:
1 ,2 | 3 | 4 ,5 ,6
分4层,注意 2 和 3 中间、 3 和 4 中间确定的最佳分割点不能动
第一种情况:1 | 2 | 3 | 4 5 6
第二种情况:1 2 | 3 | 4 | 5 6
第三种情况:1 2 | 3 | 4 5 | 6
同样,比如我们假定得出变差Q2是最小值,第二种情况是最佳分割点,那么第四层划分的数据如下:
1 ,2 | 3 | 4 | 5 ,6
那么采样数据:
1 ,2 ,3 ,4 ,5 ,6
分为4层的最优分割点在:
2,3 ,4
在自动岩性归为系统中,是根据GR、SP、CAL三条曲线进行最优化分割区间分割的,如下图,如下图绿框下面的三条曲线:
每条曲线是根据电测数据进行连接的,也就是根据井深递增输出GR、SP和CAL值,然后每条曲线根据井深对应的每条曲线的值连成“曲线”,如下图:
根据刚才提到的“有序样品”,也就是每个列的值(GR、SP和CAL),我们分别存在3个表中,每个表包含井名和井深是主键,如下图:
如果一口井电测数据太大,到1万左右,因为最优分割我采用的是递归,速度一开始很慢,10000的样本分1000层,每层要1-2秒的时间,
所以我后来分析里面最耗时的地方,优化了代码。
我们找出最优分层的地方,也就是每条曲线数据的最优分割点,然后输出这些点连成线,就成了如下的“分层后规整化曲线”,呵呵:
我的测试数据如图,由于我们的图形系统是曲线,没有矩形线,所以输出图是这个样子的:
至于分多少层,是按照井深比如1000米~2000米,如果按照0.125进行变化,那么就有1米/0.125=8,1000米就有8000条数据,按照5米进行采样进行分割,那么就有8000/(5/0.125)=200层了,比如下面的测试数据:
64, 68, 65, 25, 28, 38, 40, 41, 100, 104, 102, 58, 57, 54, 80, 81
分为8层来看最优分割点在什么位置,也就相当于把数据库的GR、SP和CAL按照5米取采样数据,分为200层了,如下图:
意思就是这样,那么我们还是按照测试数据进行算法输出测试如下:
| 64 68 65 25 28 38 40 41 100 104 102 58 57 54 80 81 |
开始分:2
| 64 | 68 65 25 28 38 40 41 100 104 102 58 57 54 80 81 | 变差是:19323.370839
| 64 68 | 65 25 28 38 40 41 100 104 102 58 57 54 80 81 | 变差是:19301.651790
| 64 68 65 | 25 28 38 40 41 100 104 102 58 57 54 80 81 | 变差是:19294.796479
| 64 68 65 25 | 28 38 40 41 100 104 102 58 57 54 80 81 | 变差是:19039.687504
| 64 68 65 25 28 | 38 40 41 100 104 102 58 57 54 80 81 | 变差是:18130.982960
| 64 68 65 25 28 38 | 40 41 100 104 102 58 57 54 80 81 | 变差是:17218.537504
| 64 68 65 25 28 38 40 | 41 100 104 102 58 57 54 80 81 | 变差是:16156.850203
| 64 68 65 25 28 38 40 41 | 100 104 102 58 57 54 80 81 | 变差是:14869.312504
| 64 68 65 25 28 38 40 41 100 | 104 102 58 57 54 80 81 | 变差是:16969.040680
| 64 68 65 25 28 38 40 41 100 104 | 102 58 57 54 80 81 | 变差是:18514.537504
| 64 68 65 25 28 38 40 41 100 104 102 | 58 57 54 80 81 | 变差是:19250.982960
| 64 68 65 25 28 38 40 41 100 104 102 58 | 57 54 80 81 | 变差是:19181.354172
| 64 68 65 25 28 38 40 41 100 104 102 58 57 | 54 80 81 | 变差是:19035.411864
| 64 68 65 25 28 38 40 41 100 104 102 58 57 54 | 80 81 | 变差是:18609.794648
| 64 68 65 25 28 38 40 41 100 104 102 58 57 54 80 | 81 | 变差是:18972.037504
【19323.370839
19301.651790
19294.796479
19039.687504
18130.982960
17218.537504
16156.850203
14869.312504
16969.040680
18514.537504
19250.982960
19181.354172
19035.411864
18609.794648
18972.037504
】
分割点:8 最小变差为:14869.312504
分割点【0 8 】
=====================================
| 64 68 65 25 28 38 40 41 | 100 104 102 58 57 54 80 81 |
开始分:3
| 64 | 68 65 25 28 38 40 41 | 100 104 102 58 57 54 80 81 | 变差是:14504.151791
| 64 68 | 65 25 28 38 40 41 | 100 104 102 58 57 54 80 81 | 变差是:13815.937504
| 64 68 65 | 25 28 38 40 41 | 100 104 102 58 57 54 80 81 | 变差是:13036.304171
| 64 68 65 25 | 28 38 40 41 | 100 104 102 58 57 54 80 81 | 变差是:14166.187504
| 64 68 65 25 28 | 38 40 41 | 100 104 102 58 57 54 80 81 | 变差是:14669.104171
| 64 68 65 25 28 38 | 40 41 | 100 104 102 58 57 54 80 81 | 变差是:14784.937504
| 64 68 65 25 28 38 40 | 41 | 100 104 102 58 57 54 80 81 | 变差是:14839.294647
| 64 68 65 25 28 38 40 41 | 100 | 104 102 58 57 54 80 81 | 变差是:14389.026791
| 64 68 65 25 28 38 40 41 | 100 104 | 102 58 57 54 80 81 | 变差是:13519.312504
| 64 68 65 25 28 38 40 41 | 100 104 102 | 58 57 54 80 81 | 变差是:12439.312504
| 64 68 65 25 28 38 40 41 | 100 104 102 58 | 57 54 80 81 | 变差是:13811.312504
| 64 68 65 25 28 38 40 41 | 100 104 102 58 57 | 54 80 81 | 变差是:14574.779171
| 64 68 65 25 28 38 40 41 | 100 104 102 58 57 54 | 80 81 | 变差是:14866.645838
| 64 68 65 25 28 38 40 41 | 100 104 102 58 57 54 80 | 81 | 变差是:14866.741076
【14504.151791
13815.937504
13036.304171
14166.187504
14669.104171
14784.937504
14839.294647
79228162514264337593543950335
14389.026791
13519.312504
12439.312504
13811.312504
14574.779171
14866.645838
14866.741076
】
分割点:11 最小变差为:12439.312504
分割点【0 8 11 】
=====================================
| 64 68 65 25 28 38 40 41 | 100 104 102 | 58 57 54 80 81 |
开始分:4
| 64 | 68 65 25 28 38 40 41 | 100 104 102 | 58 57 54 80 81 | 变差是:12074.151791
| 64 68 | 65 25 28 38 40 41 | 100 104 102 | 58 57 54 80 81 | 变差是:11385.937504
| 64 68 65 | 25 28 38 40 41 | 100 104 102 | 58 57 54 80 81 | 变差是:10606.304171
| 64 68 65 25 | 28 38 40 41 | 100 104 102 | 58 57 54 80 81 | 变差是:11736.187504
| 64 68 65 25 28 | 38 40 41 | 100 104 102 | 58 57 54 80 81 | 变差是:12239.104171
| 64 68 65 25 28 38 | 40 41 | 100 104 102 | 58 57 54 80 81 | 变差是:12354.937504
| 64 68 65 25 28 38 40 | 41 | 100 104 102 | 58 57 54 80 81 | 变差是:12409.294647
| 64 68 65 25 28 38 40 41 | 100 | 104 102 | 58 57 54 80 81 | 变差是:12433.312504
| 64 68 65 25 28 38 40 41 | 100 104 | 102 | 58 57 54 80 81 | 变差是:12439.312504
| 64 68 65 25 28 38 40 41 | 100 104 102 | 58 | 57 54 80 81 | 变差是:12359.312504
| 64 68 65 25 28 38 40 41 | 100 104 102 | 58 57 | 54 80 81 | 变差是:12198.479171
| 64 68 65 25 28 38 40 41 | 100 104 102 | 58 57 54 | 80 81 | 变差是:11738.479171
| 64 68 65 25 28 38 40 41 | 100 104 102 | 58 57 54 80 | 81 | 变差是:12158.062504
【12074.151791
11385.937504
10606.304171
11736.187504
12239.104171
12354.937504
12409.294647
79228162514264337593543950335
12433.312504
12439.312504
79228162514264337593543950335
12359.312504
12198.479171
11738.479171
12158.062504
】
分割点:3 最小变差为:10606.304171
分割点【0 8 11 3 】
=====================================
| 64 68 65 | 25 28 38 40 41 | 100 104 102 | 58 57 54 80 81 |
开始分:5
| 64 | 68 65 | 25 28 38 40 41 | 100 104 102 | 58 57 54 80 81 | 变差是:10602.137504
| 64 68 | 65 | 25 28 38 40 41 | 100 104 102 | 58 57 54 80 81 | 变差是:10605.637504
| 64 68 65 | 25 | 28 38 40 41 | 100 104 102 | 58 57 54 80 81 | 变差是:10495.854171
| 64 68 65 | 25 28 | 38 40 41 | 100 104 102 | 58 57 54 80 81 | 变差是:10398.270838
| 64 68 65 | 25 28 38 | 40 41 | 100 104 102 | 58 57 54 80 81 | 变差是:10482.270838
| 64 68 65 | 25 28 38 40 | 41 | 100 104 102 | 58 57 54 80 81 | 变差是:10551.854171
| 64 68 65 | 25 28 38 40 41 | 100 | 104 102 | 58 57 54 80 81 | 变差是:10600.304171
| 64 68 65 | 25 28 38 40 41 | 100 104 | 102 | 58 57 54 80 81 | 变差是:10606.304171
| 64 68 65 | 25 28 38 40 41 | 100 104 102 | 58 | 57 54 80 81 | 变差是:10526.304171
| 64 68 65 | 25 28 38 40 41 | 100 104 102 | 58 57 | 54 80 81 | 变差是:10365.470838
| 64 68 65 | 25 28 38 40 41 | 100 104 102 | 58 57 54 | 80 81 | 变差是:9905.470838
| 64 68 65 | 25 28 38 40 41 | 100 104 102 | 58 57 54 80 | 81 | 变差是:10325.054171
【10602.137504
10605.637504
79228162514264337593543950335
10495.854171
10398.270838
10482.270838
10551.854171
79228162514264337593543950335
10600.304171
10606.304171
79228162514264337593543950335
10526.304171
10365.470838
9905.470838
10325.054171
】
分割点:14 最小变差为:9905.470838
分割点【0 3 8 11 14 】
=====================================
| 64 68 65 | 25 28 38 40 41 | 100 104 102 | 58 57 54 | 80 81 |
开始分:6
| 64 | 68 65 | 25 28 38 40 41 | 100 104 102 | 58 57 54 | 80 81 变差是:9901.304171
| 64 68 | 65 | 25 28 38 40 41 | 100 104 102 | 58 57 54 | 80 81 变差是:9904.804171
| 64 68 65 | 25 | 28 38 40 41 | 100 104 102 | 58 57 54 | 80 81 变差是:9795.020838
| 64 68 65 | 25 28 | 38 40 41 | 100 104 102 | 58 57 54 | 80 81 变差是:9697.437505
| 64 68 65 | 25 28 38 | 40 41 | 100 104 102 | 58 57 54 | 80 81 变差是:9781.437505
| 64 68 65 | 25 28 38 40 | 41 | 100 104 102 | 58 57 54 | 80 81 变差是:9851.020838
| 64 68 65 | 25 28 38 40 41 | 100 | 104 102 | 58 57 54 | 80 81 变差是:9899.470838
| 64 68 65 | 25 28 38 40 41 | 100 104 | 102 | 58 57 54 | 80 81 变差是:9905.470838
| 64 68 65 | 25 28 38 40 41 | 100 104 102 | 58 | 57 54 | 80 81 变差是:9901.304171
| 64 68 65 | 25 28 38 40 41 | 100 104 102 | 58 57 | 54 | 80 81 变差是:9897.304171
| 64 68 65 | 25 28 38 40 41 | 100 104 102 | 58 57 54 | 80 | 81 变差是:9904.970838
【9901.304171
9904.804171
79228162514264337593543950335
9795.020838
9697.437505
9781.437505
9851.020838
79228162514264337593543950335
9899.470838
9905.470838
79228162514264337593543950335
9901.304171
9897.304171
79228162514264337593543950335
9904.970838
】
分割点:5 最小变差为:9697.437505
分割点【0 3 8 11 14 5 】
=====================================
| 64 68 65 | 25 28 | 38 40 41 | 100 104 102 | 58 57 54 | 80 81 |
开始分:7
| 64 | 68 65 | 25 28 | 38 40 41 | 100 104 102 | 58 57 54 | 80 81 | 变差是:9693.270838
| 64 68 | 65 | 25 28 | 38 40 41 | 100 104 102 | 58 57 54 | 80 81 | 变差是:9696.770838
| 64 68 65 | 25 | 28 | 38 40 41 | 100 104 102 | 58 57 54 | 80 81 |变差是:9692.937505
| 64 68 65 | 25 28 | 38 | 40 41 | 100 104 102 | 58 57 54 | 80 81 |变差是:9693.270838
| 64 68 65 | 25 28 | 38 40 | 41 | 100 104 102 | 58 57 54 | 80 81 |变差是:9694.770838
| 64 68 65 | 25 28 | 38 40 41 | 100 | 104 102 | 58 57 54 | 80 81 |变差是:9691.437505
| 64 68 65 | 25 28 | 38 40 41 | 100 104 | 102 | 58 57 54 | 80 81 |变差是:9697.437505
| 64 68 65 | 25 28 | 38 40 41 | 100 104 102 | 58 | 57 54 | 80 81 |变差是:9693.270838
| 64 68 65 | 25 28 | 38 40 41 | 100 104 102 | 58 57 | 54 | 80 81 |变差是:9689.270838
| 64 68 65 | 25 28 | 38 40 41 | 100 104 102 | 58 57 54 | 80 | 81 |变差是:9696.937505
【9693.270838
9696.770838
79228162514264337593543950335
9692.937505
79228162514264337593543950335
9693.270838
9694.770838
79228162514264337593543950335
9691.437505
9697.437505
79228162514264337593543950335
9693.270838
9689.270838
79228162514264337593543950335
9696.937505
】
分割点:13 最小变差为:9689.270838
分割点【0 3 5 8 11 14 13 】
=====================================
| 64 68 65 | 25 28 | 38 40 41 | 100 104 102 | 58 57 | 54 | 80 81 |
开始分:8
| 64 | 68 65 | 25 28 | 38 40 41 | 100 104 102 | 58 57 | 54 | 80 81 |变差是:9685.104171
| 64 68 | 65 | 25 28 | 38 40 41 | 100 104 102 | 58 57 | 54 | 80 81 |变差是:9688.604171
| 64 68 65 | 25 | 28 | 38 40 41 | 100 104 102 | 58 57 | 54 | 80 81 |变差是:9684.770838
| 64 68 65 | 25 28 | 38 | 40 41 | 100 104 102 | 58 57 | 54 | 80 81 |变差是:9685.104171
| 64 68 65 | 25 28 | 38 40 | 41 | 100 104 102 | 58 57 | 54 | 80 81 |变差是:9686.604171
| 64 68 65 | 25 28 | 38 40 41 | 100 | 104 102 | 58 57 | 54 | 80 81 |变差是:9683.270838
| 64 68 65 | 25 28 | 38 40 41 | 100 104 | 102 | 58 57 | 54 | 80 81 |变差是:9689.270838
| 64 68 65 | 25 28 | 38 40 41 | 100 104 102 | 58 | 57 | 54 | 80 81 |变差是:9688.770838
| 64 68 65 | 25 28 | 38 40 41 | 100 104 102 | 58 57 | 54 | 80 81 |变差是:9689.270838
| 64 68 65 | 25 28 | 38 40 41 | 100 104 102 | 58 57 | 54 | 80 | 81 |变差是:9688.770838
【9685.104171
9688.604171
79228162514264337593543950335
9684.770838
79228162514264337593543950335
9685.104171
9686.604171
79228162514264337593543950335
9683.270838
9689.270838
79228162514264337593543950335
9688.770838
79228162514264337593543950335
9689.270838
79228162514264337593543950335
9688.770838
】
分割点:9 最小变差为:9683.270838
分割点【0 3 5 8 11 13 14 9 】
=====================================
算法系统主界面: