Fisher最优分割算法分析、测试、应用!

申明:本文所有数据、内容、格式、图片都属于本人所有,珍惜劳动成果,任何组织和个人不得擅自用于商业用途,未经本人许可,不得引用、转载,谢谢

写于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 】

=====================================

算法系统主界面:
这里写图片描述

猜你喜欢

转载自blog.csdn.net/m0_38075987/article/details/80646888
今日推荐