正向化:指將指標轉化為越大越好,例如求最小值,乘以符號轉化為求最大值
注:x為numpy數組
- 極小型指標正向化:
- 中間型指標正向化(例如PH值需要越接近7越好,xbest=7.0,轉化為越大越好):
- 區(qū)間型指標正向化
# RegularizeData.py
# 數據正向化
# 指標名稱 指標特點
# 極大型(效益型)指標 越大(多)越好
# 極小型(成本型)指標 越小(少)越好
# 中間型指標 越接近某個值越好
# 區(qū)間型指標 落在某個區(qū)間最好
import numpy as np
# method = 0, 1, 2
# 0: 極小型(成本型)指標
# 1: 中間型指標 越接近某個值越好,傳入best_value
# 2: 區(qū)間型指標 落在某個區(qū)間最好,傳入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))
輸出結果文章來源:http://www.zghlxwxcb.cn/news/detail-581979.html
[0. ?0.5 1. ?0.5 0. ]文章來源地址http://www.zghlxwxcb.cn/news/detail-581979.html
到了這里,關于Python 數據正向化 (數學建模)的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網!