我正在使用 R。
假设您有以下数据:
#generate data
set.seed(123)
a1 = rnorm(1000,100,10)
b1 = rnorm(1000,100,10)
c1 = rnorm(1000,5,1)
train_data = data.frame(a1,b1,c1)
#view data
a1 b1 c1
1 94.39524 90.04201 4.488396
2 97.69823 89.60045 5.236938
3 115.58708 99.82020 4.458411
4 100.70508 98.67825 6.219228
5 101.29288 74.50657 5.174136
6 117.15065 110.40573 4.384732
我们可以将数据可视化如下:
#visualize data
par(mfrow=c(2,2))
plot(train_data$a1, train_data$b1, col = train_data$c1, main = "plot of a1 vs b1, points colored by c1")
hist(train_data$a1)
hist(train_data$b1)
hist(train_data$c1)
这是问题:
从数据中,只取变量“a1”和“b1”:使用仅2个“逻辑条件”,将此数据分成3个区域(例如区域 1 WHERE 20 > a1 >0 AND 0< b1 < 25)
在每个区域中,您希望该区域内的“c1 的平均值”尽可能小——但每个区域必须至少有一些最小数量的数据点,例如100 个数据点(以防止琐碎的解决方案)
目标:是否有可能确定这 3 个区域的“边界”以使其最小化:
c_avg = (region1_c1_avg + region2_c1_avg + region3_c1_avg) / 3
)最后,对于给定的组合,您会发现以下内容,例如(编造数字):
并希望 (region1_c1_avg, region2_c1_avg, region3_c1_avg and c_avg
) 最小化
我的问题:
这种问题有“确切的解决方案”吗?我唯一能想到的就是执行“随机搜索”,其中考虑了 (Region 1, Region 2 and Region 3
) 和比较 (region1_c1_avg, region2_c1_avg, region3_c1_avg and c_avg
) 的对应值,直到找到最小值。这是线性规划或多目标优化(例如遗传算法)的应用吗?以前有人做过这样的事情吗?
我做了很多研究,还没有发现类似的问题。我决定将这个问题表述为“多目标约束优化问题”,并想出如何实现“随机搜索”和“遗传算法”等算法。
谢谢
注 1: 在多目标优化的上下文中,对于给定的 (Region1, Region2 and Region3
) 定义集:集体比较 (region1_c1_avg, region2_c1_avg, region3_c1_avg and c_avg
的一组值是否}}) 是令人满意的,“帕累托最优”(https://en.wikipedia.org/wiki/Multi-objective_optimization#Visualization_of_the_Pareto_front) 的概念经常被用来比较不同的 {(Region1, Region2 and Region3
) 和 (region1_c1_avg, region2_c1_avg, region3_c1_avg and c_avg
)}
注意 2:最终,这 3 个区域可以由任意一组 4 个数字定义。如果这 4 个数字中的每一个都可以在“0 到 100”之间,并且通过 0.1 增量(例如 12、12.1、12.2、12.3 等):这意味着存在 1000 ^ 4 = 1 e^12 个可能的解决方案(大约 1万亿)进行比较。有太多的解决方案需要单独验证和比较。我认为基于数学的搜索/优化问题可用于战略性地搜索最佳解决方案。