55588


ある状態とは大きく違うデータが与えられた時に  
判別するプログラムを書こうとしています。  
１つの判別方法として、A_B間の標準偏差とA_C間の標準偏差を求めて、  
Aの状態と似ている/異なる判断ができるのではないかと考えました。

しかしながら、現在のコードでは想定通りにはならず、  
判別を行う閾値の設定方法もどうしたら良いかわからない状態です。

**想定しているデータ**

[code]

    #Aは標準のデータとする
    A =[9.43,5.04,8.86,2.48,5.27,5.21,7.95,1.96,1.53,3.13]
    #Aの状態とほとんど同じ
    B = [8.99,5.00,8,2.30,5.20,4.89,8.14,2.00,1.20,2.86]
    #Aの状態とは大きく違う
    C = [5.20,3.14,7.71,4.33,3.47,3.10,3.88,4.57,2.48,6.41]
    
[/code]

**実行コード**

[code]

    import numpy as np
    #Aは標準のデータとする
    A =[9.43,5.04,8.86,2.48,5.27,5.21,7.95,1.96,1.53,3.13]
    #Aの状態とほとんど同じ
    B = [8.99,5.00,8,12,2.30,5.20,4.89,8.14,2.00,1.20,2.86]
    #Aの状態とは大きく違う
    C = [5.20,3.14,7.71,4.33,3.47,3.10,3.88,4.57,2.48,6.41]
    
    marginAB = 0
    marginAC = 0
    #A_B間の標準偏差とA_C間の標準偏差を求めて、Aの状態と似ている/異なるの判断をしようとしています
    for i in range(len(A)):
            marginAB += (A[i] - B[i])**2
            marginAC += (A[i] - C[i])**2
    
    #sd：標準偏差(standard deviation)
    sdAB = marginAB / len(A) *2
    sdAC = marginAC / len(A)*2
    
    #sdACの方が同じ配列番号間の差は大きくなるからsdABよりも標準偏差が大きいと考えられる
    #似ているか/異なるかの判断
    #sdABにかけている値はどのように決定すべきかわからないため適当に想定
    if sdAC > 2*sdAB:
        print('異なる')
    else:
        print('似ている')
    
[/code]

**出力**

[code]

    似ている→異なる（修正後）
    
[/code]

**確認したこと**  
判別がうまくいかなかったことからsdABとsdACを確認しましたが、予想に反してsdACの値の方がsdABよりも小さかったことも理解できませんでした。（修正後解決しました）

sdAB,sdACの値（今回の例の場合）

[code]

    0.2587999999999998
    13.795580000000001
    
[/code]


CC BY-SA 4.0
2019-06-06T13:07:56.553
55585
2019-06-06T22:16:01.900
2019-06-06T22:16:01.900
question
python jupyter-notebook 数学
データの特性を判別するプログラムについて


`B`の4番目に`12`を入れているので、それ以降は`A`と`B`の値が全く違うものになっています。

[code]

    A =[    B = [
    9.43    8.99
    5.04    5
    8.86    8
    2.48    12
    5.27    2.3
    5.21    5.2
    7.95    4.89
    1.96    8.14
    1.53    2
    3.13]   1.2
            2.86]
    
[/code]


CC BY-SA 4.0
2019-06-06T13:33:13.167
55588
2019-06-06T13:33:13.167
21092
55585
answer