我正在尝试将 pymoo 优化算法与回归模型结合起来。我在 github 上发现了这个很棒的示例,并尝试遵循从 In[16] 开始的步骤。 示例问题可能是使用过时的加载 pickle 文件的方法(它对我不起作用),因此我使用
Model= load_model('RegModel')
作为我的第一个模型输出,类似地使用 Model2=load_model('Reg2Model')
作为我的第二个输出。我能够遵循示例的其余部分直到 In[69]。我还使用两个不同的 pkl 文件来预测数据的两个不同结果,但是当我使用
result=pd.DataFrame(list(res.X))
result['Output1']=res.F
result['Output2']=Model2.predict(result)
我在问题标题中得到错误,即:
ValueError: Length of values (1) does not match length of index (11)
(请注意,我的长度是 11,而不是示例中的 5,因为我使用的是不同的数据集。但是方法是相同的)。
我尝试不使用 pd.DataFrame 对象并将其作为 numpy 列表传递,但这也不起作用。此时我很困惑。 如果我不定义输出2而简单地单独定义输出1 Output=res.F 我的代码可以编译,但这显然是无意义的。
感谢任何帮助,包括 In[69] 背后的直觉。 附加的是完整的错误消息:
---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
Cell In[14], line 4
1 result= pd.DataFrame(list(res.X))
2 result
----> 4 result['Output1']= res.F
5 result['Output2']=Reg2Model.predict(result)
File ~\AppData\Local\Programs\Python\Python311\Lib\site-packages\pandas\core\frame.py:3980, in DataFrame.__setitem__(self, key, value)
3977 self._setitem_array([key], value)
3978 else:
3979 # set column
-> 3980 self._set_item(key, value)
File ~\AppData\Local\Programs\Python\Python311\Lib\site-packages\pandas\core\frame.py:4174, in DataFrame._set_item(self, key, value)
4164 def _set_item(self, key, value) -> None:
4165 """
4166 Add series to DataFrame in specified column.
4167
(...)
4172 ensure homogeneity.
4173 """
-> 4174 value = self._sanitize_column(value)
4176 if (
4177 key in self.columns
4178 and value.ndim == 1
4179 and not is_extension_array_dtype(value)
4180 ):
4181 # broadcast across multiple columns if necessary
4182 if not self.columns.is_unique or isinstance(self.columns, MultiIndex):
File ~\AppData\Local\Programs\Python\Python311\Lib\site-packages\pandas\core\frame.py:4915, in DataFrame._sanitize_column(self, value)
4912 return _reindex_for_setitem(Series(value), self.index)
4914 if is_list_like(value):
-> 4915 com.require_length_match(value, self.index)
4916 return sanitize_array(value, self.index, copy=True, allow_2d=True)
File ~\AppData\Local\Programs\Python\Python311\Lib\site-packages\pandas\core\common.py:571, in require_length_match(data, index)
567 """
568 Check the length of data matches the length of the index.
569 """
570 if len(data) != len(index):
--> 571 raise ValueError(
572 "Length of values "
573 f"({len(data)}) "
574 "does not match length of index "
575 f"({len(index)})"
576 )
ValueError: Length of values (1) does not match length of index (11)
您的错误是由于尝试将长度为 1 的数组添加到大小为 11 的数据帧(索引长度为 11)。
您应该检查
res.X
和 res.F
的外观。它们一致吗?数据框是什么样子的?数据框中还有其他内容吗?
通常,解决方案空间中的解决方案数量
res.F
应等于设计空间中的集合数量 res.X
。