正向化:指将指标转化为越大越好,例如求最小值,乘以符号转化为求最大值
注:x为numpy数组
- 极小型指标正向化:
- 中间型指标正向化(例如PH值需要越接近7越好,xbest=7.0,转化为越大越好):
- 区间型指标正向化
# RegularizeData.py
# 数据正向化
# 指标名称 指标特点
# 极大型(效益型)指标 越大(多)越好
# 极小型(成本型)指标 越小(少)越好
# 中间型指标 越接近某个值越好
# 区间型指标 落在某个区间最好
import numpy as np
# method = 0, 1, 2
# 0: 极小型(成本型)指标
# 1: 中间型指标 越接近某个值越好,传入best_value
# 2: 区间型指标 落在某个区间最好,传入left_bound, right_bound
def regularize_column_vector(data: np.ndarray, best_value: float = None,
left_bound: float = None,
right_bound: float = None,
method: int = 0) -> np.ndarray:
if len(data.shape) != 1:
raise ValueError("data must be a row vector")
return None
if method == 0:
return data.max() - data
elif method == 1:
dis = max(data.max() - best_value, best_value - data.min())
return 1 - ((data - best_value).__abs__()/dis)
elif method == 2:
dis = max(data.max() - right_bound, left_bound - data.min())
for i in range(data.shape[0]):
if data[i] > right_bound:
data[i] = 1 - ((data[i] - right_bound) / dis)
elif data[i] < left_bound:
data[i] = 1 - ((left_bound - data[i]) / dis)
else:
data[i] = 1
return data
使用示例
if __name__ == '__main__':
print(RegularizeData.regularize_column_vector(np.array([1, 2, 3, 4, 5]),
method=1, best_value=3.0))
输出结果文章来源:https://www.toymoban.com/news/detail-581979.html
[0. 0.5 1. 0.5 0. ]文章来源地址https://www.toymoban.com/news/detail-581979.html
到了这里,关于Python 数据正向化 (数学建模)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!