python - 使用 2 个重叠列表恢复 MinMax 缩放
问题描述
在我的问题之后:Revert MinMax scaling,我正在尝试另一种方法。
这一次,我有两个大清单:
[ ...many values, 0, 20, 22, 32, 11, 24, 0, 12, 11, 33]
[26, 25, 34, 45, 45, 35, 71, 27, 27, 34, many values...]
两个大列表中的值已使用 MinMax 缩放器进行缩放:
V = (actual - min) / (max - min)
min 和 max 在列表中是常数。两个大列表的 min 和 max 不同。
两个大列表在两个较小的列表中“重叠”:
[ 0, 20, 22, 32, 11, 24, 0, 12, 11, 33]
[26, 25, 34, 45, 45, 35, 71, 27, 27, 34]
对于第一个列表,我知道:
V = (actual - min1) / (max1 - min1)
对于第二个列表,我知道:
V = (actual - min2) / (max2 - min2)
所以从技术上讲,我可以表达actual
为min1, min2, max1, max2
V1.max1 - V1.min1 + min1 - V2.max2 +V2.min2 - min2 = 0
<=> V1.x0 - (V1+1).x1 - V2.x2 + (V2-1).x3 = 0
得到一组 4 个方程,并用 求解numpy.linalg.solve
:
data = [(V1, V1+1, V2, V2-1) for V1, V2 in zip(vals1, vals2) if V1 !=0 and V2 != 0]
res = [0 for v in data]
x = np.linalg.solve(data, res)
但是LinAlgError: Singular matrix
每次我尝试这样做时都会遇到异常:
lib/python3.7/site-packages/numpy/linalg/linalg.py in solve(a, b)
401 signature = 'DD->D' if isComplexType(t) else 'dd->d'
402 extobj = get_linalg_error_extobj(_raise_linalgerror_singular)
--> 403 r = gufunc(a, b, signature=signature, extobj=extobj)
404
405 return wrap(r.astype(result_t, copy=False))
lib/python3.7/site-packages/numpy/linalg/linalg.py in _raise_linalgerror_singular(err, flag)
95
96 def _raise_linalgerror_singular(err, flag):
---> 97 raise LinAlgError("Singular matrix")
98
99 def _raise_linalgerror_nonposdef(err, flag):
LinAlgError: Singular matrix
我是否又错过了独立方程?
解决方案
具有相同的 V 并不意味着您有 2 个方程对应 2 个变量,而是 2 个方程对应 4 个变量,不幸的是,这仍然无法解决。
要求解具有 n 个未知变量的系统,您至少需要 n 个独立方程。
一件好事是,您可以“设置”min1 和 min2,并可以推导出 max1 和 max2(例如,如果您知道 min1 将始终为 0,或者您不关心实际的最小值)
推荐阅读
- ios - iOS 圆角后面的颜色
- scala - Scala:我如何理解咖喱机制
- javascript - 使用 Javascript 标记的模板文字编写解释器
- node.js - MongoDB和node.js:在一个路由中通过多个查询创建数组
- javascript - 将一个 HTML 表格复制到另一个页面
- express - Express Heroku 无法提供静态文件
- mysql - SQL - 查找最高温度及其时间
- java - 使用 Jackson 将 MultipartFile 从 Angular 反序列化为 Java
- python - 通过放大来增加数据
- python - 按计数使熊猫数据框组具有列名