BATTERYML 부록2
# Code 6: Config Setting : Use the newly added preprocessor Min-Max normalization.
# src/data/transformation/min_max.py
import torch
from src.builders import DATA_TRANSFORMATIONS
from src.data.transformation.base import BaseDataTransformation
@DATA_TRANSFORMATIONS.register()
class MinMaxDataTransformation(BaseDataTransformation):
def __init__(self, base: float = None):
self.min = None
self.max = None
def fit(self, data: torch.Tensor) -> torch.Tensor:
self.min = torch.min(data)
self.max = torch.max(data)
def assert_fitted(self):
assert self.min is not None, ’Transformation not fitted!’
assert self.max is not None, ’Transformation not fitted!’
@torch.no_grad()
def transform(self, data: torch.Tensor) -> torch.Tensor:
self.assert_fitted()
data = (data - self.min ) / (self.max - self.min )
return data
@torch.no_grad()
def inverse_transform(self, data: torch.Tensor) -> torch.Tensor:
self.assert_fitted()
data = data * (self.max - self.min ) + self.min
return data
def to(self, device):
self.min = self.min.to(device)
self.max = self.max.to(device)
return self
코드 7은 학습을 위해 이 최소-최대 정규화 기능을 사용하는 구성 예시를 보여줍니다.
# Code 7: Example configuration file that uses custom feature preprocessor for learning.
model:
name: ’LinearRegressionRULPredictor’
train_test_split:
name: ’MATRPrimaryTestTrainTestSplitter’
cell_data_path: ’data/processed/MATR’
feature:
name: ’DischargeModelFeatureExtractor’
interp_dims: 1000
critical_cycles:
-2
-9
- 99
use_precalculated_qdlin: True
label:
name: ’RULLabelAnnotator’
feature_transformation:
name: ’MinMaxDataTransformation’
label_transformation:
name: ’SequentialDataTransformation’
transformations:
- name: ’LogScaleDataTransformation’
- name: ’MinMaxDataTransformation’
E.5 MODEL INTERFACE FOR CUSTOM BATTERY MODELS
맞춤형 배터리 모델을 위한 E.5 모델 인터페이스
BatteryML은 다양한 학습에 유연한 모델 적용을 지원하기 위해 ‘scikit-learn’ 규칙을 따르는 일반 모델 인터페이스를 제공합니다. linear models(선형 모델), Gaussian Process Regression(가우스 프로세스 회귀), tree-based models(트리 기반 모델), SVM과 같은 전통적인 통계 모델은 자동 학습 프로세스를 위한 적합도 및 예측 방법을 구현하는 데 필요합니다.
반면에 Neural network 모델은 순방향 로직만 구현하면 됩니다.
BatteryML은 신경망의 훈련 및 평가 프로세스를 fit 및 predict 방법으로 캡슐화하여, 학습 파이프라인에서 일관된 동작을 위해 기존 통계 모델과 연계합니다.
여기에서는 RUL 예측에 LightGBM을 사용하는 예시를 제공합니다. lightgbm.LGBMRegressor는 이미 예측에 대한 적합도 및 예측을 지원하므로 batteryml.model.SklearnModel 클래스를 직접 상속하고 구성 파일을 통해 모델의 하이퍼파라미터를 전달할 수 있습니다.
코드 8은 LightGBM을 사용하는 RUL 예측자에 대한 구현 예시를 보여줍니다.
이 예제에서 BatteryML은 학습 및 평가를 위해 LightgbmRULPredictor.model의 적합 및 예측 메서드를 호출합니다.
마지막으로, 커스텀 LightGBM 모델은 @MODELS.register() 이후에 BatteryML에 등록되고 초기화 중에 임포트됩니다.
#Code 8: Implementation example of custom models: utilizing LightGBM as a case study. Hyperpa- rameters are configured and passed through the configuration files.
# batteryml/model/rul_predictor/lightgbm.py
from lightgbm import LGBMRegressor
from src.builders import MODELS
from src.models.sklearn_model import SklearnModel
@MODELS.register()
class LightgbmRULPredictor(SklearnModel):
def __init__(self, *args, workspace: str = None, **kwargs):
SklearnModel.__init__(self, workspace)
self.model = LGBMRegressor(*args, **kwargs)
모델을 정의한 후에는 코드 9에 표시된 것처럼 구성 파일을 통해 RUL 예측자의 하이퍼파라미터를 전달할 수 있습니다. 구성 파일의 필드는 예측자를 초기화할 때 키워드 인수로 모델에 전달됩니다.
# Code 9: Configuration example for custom LightGBM model.
model:
name: ’LightgbmRULPredictor’
boosting_type : ’gbdt’
learning_rate : 0.001
n_estimators : 200
objective : ’regression’
train_test_split:
name: ’MATRPrimaryTestTrainTestSplitter’
cell_data_path: ’data/processed/MATR’
feature:
name: ’VoltageCapacityMatrixFeatureExtractor’
diff_base: 8
max_cycle_index: 98
cycles_to_keep: 98
use_precalculated_qdlin: True
label:
name: ’RULLabelAnnotator’
feature_transformation:
name: ’ZScoreDataTransformation’
label_transformation:
name: ’SequentialDataTransformation’
transformations:
- name: ’LogScaleDataTransformation’
- name: ’ZScoreDataTransformation’