[c++] C++를 사용한 데이터 정규화 및 표준화
데이터 분석 및 머신 러닝 알고리즘을 사용할 때, 데이터 세트를 준비하는 과정이 매우 중요합니다. 이 과정에서 데이터 정규화와 표준화는 가장 기본적인 단계입니다. 이 두 과정을 통해 데이터를 일반화하고 표준화하여 모델의 학습 과정을 개선할 수 있습니다.
데이터 정규화
데이터 정규화는 데이터의 값을 일정한 범위로 변환하는 과정입니다. 일반적으로 최솟값과 최댓값을 이용하여 데이터를 0과 1 사이의 값으로 변환합니다. 데이터 정규화를 수행하는 이유는 모든 입력 변수가 동일한 척도에 맞게 되어 모델의 성능을 향상시키기 위함입니다.
아래는 C++를 사용하여 데이터를 정규화하는 간단한 예제입니다.
#include <iostream>
#include <vector>
#include <algorithm>
void normalizeData(std::vector<double>& data) {
double minVal = *std::min_element(data.begin(), data.end());
double maxVal = *std::max_element(data.begin(), data.end());
for (double& val : data) {
val = (val - minVal) / (maxVal - minVal);
}
}
int main() {
std::vector<double> inputData = {3.0, 6.0, 9.0, 12.0, 15.0};
normalizeData(inputData);
for (const auto& val : inputData) {
std::cout << val << " ";
}
return 0;
}
위의 예제는 normalizeData
함수를 사용하여 입력된 데이터를 정규화하는 간단한 방법을 보여줍니다.
데이터 표준화
데이터 표준화는 데이터를 평균이 0이고 표준 편차가 1인 값으로 변환하는 과정입니다. 특히, 변수 간 척도가 크게 다른 경우에 데이터를 표준화함으로써 특정 변수가 예측 모델에 미치는 영향을 동등하게 만들어 줍니다.
C++를 사용하여 데이터를 표준화하는 과정은 아래와 같이 수행될 수 있습니다.
#include <iostream>
#include <vector>
#include <numeric>
#include <cmath>
void standardizeData(std::vector<double>& data) {
double mean = std::accumulate(data.begin(), data.end(), 0.0) / data.size();
double variance = 0.0;
for (const auto& val : data) {
variance += (val - mean) * (val - mean);
}
variance /= data.size();
double stddev = std::sqrt(variance);
for (double& val : data) {
val = (val - mean) / stddev;
}
}
int main() {
std::vector<double> inputData = {3.0, 6.0, 9.0, 12.0, 15.0};
standardizeData(inputData);
for (const auto& val : inputData) {
std::cout << val << " ";
}
return 0;
}
위의 예제에서 standardizeData
함수는 입력된 데이터를 표준화하는 방법을 보여줍니다.
결론
데이터 분석 및 머신 러닝 알고리즘을 적용하기 전에 데이터를 정규화하고 표준화하는 것은 모델의 성능을 향상시키는 중요한 단계입니다. C++를 사용하여 이러한 데이터 전처리를 구현하는 방법을 익혀두면 향후 프로젝트에 도움이 될 것입니다.
참고 자료
- C++ Standard Library - cppreference.com
- “An Introduction to Statistical Learning” by Gareth James, Daniela Witten, Trevor Hastie, Robert Tibshirani