[英]Python Data Optimal Spreading of Parameters
假設我有一定數量的描述系統的參數:
IE
position, velocity, mass, length, width
現在每個參數都有一個關聯的上限和下限:
position = [0,100]
velocity = [10,300]
mass = [50,200]
length = [2,10]
width = [2,10]
數據點由這些參數的某種組合定義:即
data_point = [10,250,50,4,2]
現在,問題是:是否有 python 包/算法,以便我可以初始化一定數量的數據點(即 5 個),以便這些數據點最佳地分布在參數空間中。
邊注:
是的,我知道“最佳傳播”沒有明確定義,但我真的不確定如何在這里 go。 一種可能的定義是:
最大化數據點之間的距離(向量之間的歐幾里得距離)
編輯:
使用 linspace 是一個非常好的主意。 但是,我很快注意到我的數據存在問題。 我實際上忘了談論約束:
有些數據點是不可能的。 IE
constraints = [lenght*2-width, position-velocity]
...如果這些值大於或等於零,則可以認為數據點是可行的。
所以我的問題是:我怎樣才能以一種聰明的方式包含約束?
使用 linspace,您將看到速度始終大於 position,因此我們將無法獲得可行的數據點。
position = [0,100]
velocity = [10,300]
mass = [50,200]
length = [2,10]
width = [2,10]
# Find Samples
start = [s[0] for s in [position, velocity, mass, length, width]]
end = [s[1] for s in [position, velocity, mass, length, width]]
num_samples = 5
samples = np.linspace(start, end, num_samples)
print(samples)
這是 output:
[[ 0. 10. 50. 2. 2. ]
[ 25. 82.5 87.5 4. 4. ]
[ 50. 155. 125. 6. 6. ]
[ 75. 227.5 162.5 8. 8. ]
[100. 300. 200. 10. 10. ]]
現在,讓我們檢查約束:
def check_constraint(samples, constraints):
checked_samples = []
for dimensions in samples:
position, velocity, mass, length, width = dimensions
# Here I am checking the constraints:
if any([i<0 for i in [length*2-width, position-velocity]]):
pass
else:
checked_samples.append(dimensions)
return checked_samples
samples_checked = check_onstraint(samples, constraints)
print(samples_checked)
這些將是檢查約束后留下的樣本:
[]
你可以做這樣的事情來獲得一個均勻的網格點:
import numpy as np
...
start = [s[0] for s in [position, velocity, ...]]
end = [s[1] for s in [position, velocity, ...]]
num_samples = 5
samples = np.linspace(start, end, num_samples)
這將返回在整個參數空間中均勻分布的點。
編輯要包含更多約束,最好執行以下操作:
start = ...
end = ...
num_results = 5
results = []
while len(results) < num_results:
sample = np.random.uniform(start, end)
if is_valid(sample):
results.append(sample)
這樣您就可以定義is_valid
function 並檢查您想要的任何條件。 結果點應均勻分布在參數空間周圍。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.