我在寻找一个解决使用机器学习的优化问题的起点。
假设我有一大堆砖块,我需要从中挑选出50块砖来建造一堵墙。我的砖块有不同的类型:有些砖块比其他砖块更坚固,有些则更重,因此每次我选择一组砖块时,我都需要进行一次(相对较慢的)结构计算,以确保墙不会倒塌。我的砖块数量太多,无法通过暴力穷举每一种排列组合,因此我想使用机器学习来帮助我找到可能有效的砖块排列,因为我有几百组之前知道可行的砖块组合。
墙壁还需要满足一些主观标准——如果绿色砖块太多,墙可能会显得难看。我对哪些标准是主观评估的有很好的了解(例如,我知道建筑师关心有多少绿色砖块),但我想通过之前的数据训练一个机器学习模型,以了解应该给这些标准赋予什么样的权重,因为我没有关于绿色砖块数量上限的硬性限制——我只有一组数据显示建筑师过去不喜欢一些有很多绿色砖块的墙壁。
这是机器学习可以帮助我解决的问题吗?应该调查哪些框架/模型来解决这种类型的问题?我很难找到一个起点!
回答:
答案部分取决于你是否需要帮助生成新的组合,还是你想理解哪些变量影响成功/接受的可能性。
如果是后者,你可以将这个问题视为一个分类任务。根据你的描述,你可能会提出一些特征来描述你测试过的或将要测试的砖块集合,例如:绿色砖块的数量、砖块的总重量、砖块的平均重量、最底层砖块的重量。
然后你会有一个表格,每行代表一种砖块配置,每列代表上述生成的特征。你还有一个额外的列用于目标变量,根据配置是否成功,该列的值为真/假。
+---------+------------+-------------+---------------+----------------+| n_green | weight_sum | weight_mean | weight_br_sum | target_success |+---------+------------+-------------+---------------+----------------+| 10 | 102 | 0.6 | 15 | true || 2 | 60 | 0.5 | 30 | false || 40 | 250 | 1.1 | 15 | true |+---------+------------+-------------+---------------+----------------+
你可以使用线性模型(例如逻辑回归),其中X为从n_green到target_success列的值数组,y为目标列。你可以查看拟合模型的系数,以了解哪些特征对成功影响最大(尽管你应该首先标准化你的特征)。
然后你可以生成新的组合,并通过拟合的模型运行它们以获得成功的概率。
如果砖块的排列/配置很重要,你可能需要研究神经网络,特别是卷积神经网络(CNN)。你需要使用像ELI5或Shap这样的库来研究特征的重要性。
如果是前者,你应该研究生成对抗网络(GANs)。