측정 데이터 선택
이게 뭐야
당신은 제조 업체의 검사 기사입니다. 한 센서에서 얻은 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
평균은 정확하고 표준 편차는 원래 두 배 이상의 데이터를 선택할 수 있었다.
이상
                
                    
        
    
    
    
    
    
                
                
                
                
                    
                        
                            
                            
                            Reference
                            
                            이 문제에 관하여(측정 데이터 선택), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
                                
                                https://qiita.com/SaitoTsutomu/items/d3a6633bbe7304d98734
                            
                            
                            
                                텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
                            
                            
                                
                                
                                 우수한 개발자 콘텐츠 발견에 전념
                                (Collection and Share based on the CC Protocol.)
                                
                                
                                우수한 개발자 콘텐츠 발견에 전념
                                (Collection and Share based on the CC Protocol.)
                            
                            
                        
                    
                
                
                
            
측정 데이터 작성
난수로 측정 데이터를 생성한다.
%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
평균은 정확하고 표준 편차는 원래 두 배 이상의 데이터를 선택할 수 있었다.
이상
Reference
이 문제에 관하여(측정 데이터 선택), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/SaitoTsutomu/items/d3a6633bbe7304d98734텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
                                
                                
                                
                                
                                
                                우수한 개발자 콘텐츠 발견에 전념
                                (Collection and Share based on the CC Protocol.)