측정 데이터 선택

이게 뭐야



당신은 제조 업체의 검사 기사입니다. 한 센서에서 얻은 100개의 계측 데이터를 가지고 있다.
다양한 상황에 따라이 측정 데이터가 "변동 할 수 있음"을 나타냅니다.
100개 중 10개를 선택하여 분산을 극대화하고 싶다.
다만, 센서가 정상이라고 말하고 싶기 때문에, 「평균치는 정확」이 되도록 하고 싶다.

파이썬으로 시도



측정 데이터 작성



난수로 측정 데이터를 생성한다.
%matplotlib inline
import matplotlib.pyplot as plt
import numpy as np, pandas as pd
np.random.seed(1)
測定データ = np.random.normal(50,1,100)
plt.hist(測定データ)
print('標準偏差', 測定データ.std())
>>>
標準偏差 0.885156213832



수리 최적화로 해결



분산을 극대화합시다. 보통이라면 2차 정수 최적화가 풀리기 어렵다.
평균값이 정확하다고 가정하면 $(값-평균)^2$는 고정값이 되므로 모델은 선형 즉 혼합 정수 최적화가 된다.
from pulp import *
from ortoolpy import addbinvars
選択数 = 10
eps = 0.0001

m = LpProblem(sense=LpMaximize)
x = addbinvars(len(測定データ))
m += lpDot((測定データ-50)**2, x)
m += lpSum(x) == 選択数
e = lpDot(測定データ, x) / 選択数
m += 50-eps <= e
m +=           e <= 50+eps
m.solve()
%time m.solve() # 求解
r = np.vectorize(value)(x).astype(int) # 結果
print(LpStatus[m.status])
>>>
Wall time: 181 ms
Optimal
print('平均', 測定データ[r>0].mean())
print('標準偏差', 測定データ[r>0].std())
>>>
平均 49.9999119632
標準偏差 1.82811635001

평균은 정확하고 표준 편차는 원래 두 배 이상의 데이터를 선택할 수 있었다.

이상

좋은 웹페이지 즐겨찾기