MinMaxScaler는 데이터를 일정한 범위 안으로 스케일링하는 데 사용됩니다.
데이터의 크기와 범위를 표준화하여 데이터 분석 및 머신러닝 모델링을
수행하기 쉽게 만들어줍니다.
다른 단위나 스케일을 가진 데이터를 비교하거나 분석하는 것은 어렵습니다.
예를 들어, 체중은 kg으로, 키는 cm으로 측정되기 때문에 직접 비교하기 어렵습니다.
이때, MinMaxScaler를 사용하여 두 변수를 동일한 스케일로 조정하면
체중과 키의 값이 동일한 범위 안으로 들어가게 되어 직접적으로 비교하기 쉬워집니다.
또한, MinMaxScaler는 이상치(outlier)가 있는 경우에도 효과적입니다.
이상치는 일반적으로 큰 값을 가지며, 이를 제외하지 않으면
스케일링된 데이터의 범위가 크게 왜곡됩니다.
MinMaxScaler를 사용하면 이상치를 제외하더라도 데이터의 범위가 유지됩니다.
따라서, MinMaxScaler는 데이터를 일정한 범위로 스케일링하여
데이터 분석 및 머신러닝 모델링을 수행하기 쉽게 만드는 유용한 도구입니다.
예제 코드를 보시죠.
import pandas as pd
from sklearn.preprocessing import MinMaxScaler
# 데이터프레임 생성
df = pd.DataFrame({'A': [10, 20, 30], 'B': [15, 25, 35]})
# MinMaxScaler 객체 생성
scaler = MinMaxScaler()
# 데이터프레임 스케일링
scaled_df = pd.DataFrame(scaler.fit_transform(df), columns=df.columns)
# 스케일링된 데이터프레임 출력
print(scaled_df)
위 코드는 pandas 패키지와 sklearn.preprocessing 모듈에서 제공하는
MinMaxScaler를 사용하여 데이터프레임을 스케일링하는 예제입니다.
간단히 설명해드리겠습니다.
from sklearn.preprocessing import MinMaxScaler
: sklearn.preprocessing 모듈에서 MinMaxScaler를 불러옵니다.
df = pd.DataFrame({'A': [10, 20, 30], 'B': [15, 25, 35]})
: 샘플 데이터프레임을 생성합니다.
이 예제에서는 2개의 열(column)로 이루어진 3개의 행(row)을 가진 데이터프레임을 생성합니다.
scaler = MinMaxScaler()
: MinMaxScaler 객체를 생성합니다
scaled_df = pd.DataFrame(scaler.fit_transform(df), columns=df.columns)
: fit_transform() 메소드를 사용하여 데이터프레임을 스케일링합니다.
fit_transform() 메소드는 데이터프레임의 모든 열을 스케일링한 결과를 반환합니다.
스케일링된 결과를 pd.DataFrame()을 사용하여 데이터프레임으로 변환합니다.
이때, columns 파라미터를 사용하여 열 이름을 원래 데이터프레임의 열 이름으로 지정합니다.
위 예제 코드를 실행하면 아래와 같은 결과가 출력됩니다.
Copy code
A B
0 0.0 0.0
1 0.5 0.5
2 1.0 1.0
위 결과에서 볼 수 있듯이, MinMaxScaler를 사용하여 데이터프레임의 열을
스케일링한 결과 모든 값이 0과 1 사이의 범위로 변환되었습니다.
이제 이 스케일링된 데이터프레임을 이용하여 데이터 분석 및 머신러닝 모델링을 수행할 수 있습니다.
이 중에서 대표적인 모델로는 선형 회귀(Linear Regression)와 로지스틱 회귀(Logistic Regression)가 있습니다.
선형 회귀는 연속적인 값을 예측하는 데 사용되며,
로지스틱 회귀는 이진 분류(Binary Classification)를 수행하는 데 사용됩니다.
여기서는 간단한 예제를 통해 이 두 모델을 사용해보겠습니다.
from sklearn.linear_model import LinearRegression, LogisticRegression
# 선형 회귀 모델 생성
linear_model = LinearRegression()
linear_model.fit(scaled_df[['A']], scaled_df[['B']])
# 로지스틱 회귀 모델 생성
logistic_model = LogisticRegression()
logistic_model.fit(scaled_df[['A']], [1, 0, 0])
위 코드에서는 sklearn.linear_model 모듈에서
LinearRegression과 LogisticRegression 모델을 불러온 후,
각각의 모델을 생성하고 데이터프레임을 이용하여 학습을 수행합니다.
간략히 설명해보겠습니다
linear_model = LinearRegression()
: LinearRegression 모델을 생성합니다.
linear_model.fit(scaled_df[['A']], scaled_df[['B']])
: fit() 메소드를 사용하여 선형 회귀 모델을 학습시킵니다.
이때, scaled_df[['A']]는 독립 변수(X)를 나타내며, scaled_df[['B']]는 종속 변수(y)를 나타냅니다.
logistic_model = LogisticRegression()
: LogisticRegression 모델을 생성합니다.
logistic_model.fit(scaled_df[['A']], [1, 0, 0])
: fit() 메소드를 사용하여 로지스틱 회귀 모델을 학습시킵니다.
이때, scaled_df[['A']]는 독립 변수(X)를 나타내며,
[1, 0, 0]은 이진 분류(Binary Classification)를 위한 종속 변수(y)를 나타냅니다.
이제 각 모델을 학습시킨 후, 새로운 값을 이용하여 예측을 수행할 수 있습니다.
# 선형 회귀 모델 예측
linear_model.predict([[0.4]])
# 로지스틱 회귀 모델 예측
logistic_model.predict(scaler.transform([[25]]))
위 코드에서는 각 모델에 새로운 값을 입력하여 예측을 수행합니다.
linear_model.predict([[0.4]])
: predict() 메소드를 사용하여 선형 회귀 모델로 새로운 값을 예측합니다.
이때, [[0.4]]는 독립 변수(X)의 값으로 0.4를 가지는 경우에 해당합니다.
즉, 위에서 학습시킨 선형 회귀 모델을 이용하여
독립 변수(X)가 0.4일 때 종속 변수(y)의 값을 예측하는 것입니다.
마찬가지로, logistic_model.predict(scaler.transform([[25]]))에서 [[25]]는
독립 변수(X)의 값으로 25를 가지는 경우를 나타냅니다.
이 값은 MinMaxScaler를 사용하여 스케일링된 데이터프레임에 포함된
독립 변수(X)의 값과 다르며,
scaler.transform() 메소드를 사용하여 이 값을 스케일링해야 합니다.
scaler.transform() 메소드는 MinMaxScaler 객체의 transform() 메소드를 사용하여
입력된 값을 스케일링된 값으로 변환합니다.
위 예제에서는 [[25]]를 스케일링한 값인 [[0.75]]를 사용하여 로지스틱 회귀 모델을 예측합니다.
따라서, 이 두 모델을 예측할 때에는 각 모델에서 사용한 독립 변수(X)의 값이
MinMaxScaler를 사용하여 스케일링되어 있어야 합니다.
이제 각 모델에서 예측한 결과를 출력해보겠습니다.
# 선형 회귀 모델 예측 결과 출력
print(linear_model.predict([[0.4]]))
# 로지스틱 회귀 모델 예측 결과 출력
print(logistic_model.predict(scaler.transform([[25]]))))
print(linear_model.predict([[0.4]]))
: 선형 회귀 모델로 예측한 결과를 출력합니다.
이때, [[0.4]]는 독립 변수(X)의 값으로 0.4를 가지는 경우를 나타냅니다.
print(logistic_model.predict(scaler.transform([[25]]))))
: 로지스틱 회귀 모델로 예측한 결과를 출력합니다.
이때, [[25]]는 독립 변수(X)의 값으로 25를 가지는 경우를 나타냅니다.
이 값을 scaler.transform() 메소드를 사용하여 스케일링하였으며,
[[0.75]]를 입력값으로 사용하여 예측합니다.
따라서, 위 예제에서는 MinMaxScaler를 사용하여 데이터프레임을 스케일링한 후,
선형 회귀 모델과 로지스틱 회귀 모델을 생성하고 학습시켰습니다.
그리고 이를 이용하여 각 모델에서 예측한 결과를 출력하였습니다.
이처럼 MinMaxScaler를 사용하여 데이터를 스케일링하는 것은 데이터 분석 및 머신러닝 모델링에 있어 매우 중요한 작업 중 하나입니다.
또 다른 에제로,
MinMaxScaler를 사용하여 스케일링된 데이터프레임으로부터 결정 트리(Decision Tree) 모델을 생성하는
예제 코드를 살펴보겠습니다.
from sklearn.tree import DecisionTreeClassifier
from sklearn.model_selection import train_test_split
# 예제 데이터 로드
from sklearn.datasets import load_iris
iris = load_iris()
X = iris.data
y = iris.target
# 데이터 스케일링
scaler = MinMaxScaler()
X_scaled = scaler.fit_transform(X)
# 학습 데이터와 테스트 데이터 분리
X_train, X_test, y_train, y_test = train_test_split(X_scaled, y, test_size=0.3, random_state=0)
# 결정 트리 모델 생성
tree_model = DecisionTreeClassifier()
tree_model.fit(X_train, y_train)
# 테스트 데이터에 대한 예측
y_pred = tree_model.predict(X_test)
# 정확도 출력
from sklearn.metrics import accuracy_score
print('Accuracy:', accuracy_score(y_test, y_pred))
위 코드는 sklearn.tree 모듈에서 제공하는 DecisionTreeClassifier를 사용하여
결정 트리 모델을 생성하는 예제입니다.
각 줄별로 코드를 설명해드리겠습니다.
from sklearn.datasets import load_iris
: sklearn.datasets 모듈에서 load_iris 함수를 불러옵니다.
load_iris 함수는 붓꽃 데이터셋을 로드하는 함수입니다.
iris = load_iris()
:load_iris 함수를 사용하여 붓꽃 데이터셋을 로드합니다.
X = iris.data
: 붓꽃 데이터셋에서 독립 변수(X)를 나타내는 데이터를 X에 저장합니다.
y = iris.target
: 붓꽃 데이터셋에서 종속 변수(y)를 나타내는 데이터를 y에 저장합니다.
scaler = MinMaxScaler()
: MinMaxScaler 객체를 생성합니다.
X_scaled = scaler.fit_transform(X)
: fit_transform() 메소드를 사용하여 독립 변수(X)를 스케일링합니다.
X_train, X_test, y_train, y_test = train_test_split(X_scaled, y, test_size=0.3, random_state=0)
: train_test_split() 함수를 사용하여 데이터를 학습 데이터와 테스트 데이터로 분리합니다.
tree_model = DecisionTreeClassifier()
: DecisionTreeClassifier 모델을 생성합니다.
tree_model.fit(X_train, y_train)
: fit() 메소드를 사용하여 결정 트리 모델을 학습시킵니다.
y_pred = tree_model.predict(X_test)
: predict() 메소드를 사용하여 테스트 데이터에 대한 예측을 수행합니다.
from sklearn.metrics import accuracy_score
: sklearn.metrics 모듈에서 accuracy_score 함수를 불러옵니다.
accuracy_score 함수는 정확도(accuracy)를 계산하는 함수입니다.
print('Accuracy:', accuracy_score(y_test, y_pred))
: accuracy_score() 함수를 사용하여 분류 모델의 정확도를 계산합니다
이때, y_test는 실제 테스트 데이터의 종속 변수(y)를 나타내며,
y_pred는 모델이 예측한 종속 변수(y)를 나타냅니다.
위 예제에서는 MinMaxScaler를 사용하여 데이터프레임을 스케일링한 후,
결정 트리 모델을 생성하고 학습시켰습니다.
그리고 이를 이용하여 테스트 데이터에 대한 예측을 수행하고, accuracy_score() 함수를 사용하여 모델의 정확도를 계산하였습니다.
결정 트리 모델은 분류(Classification)와 회귀(Regression) 문제에 모두 사용될 수 있습니다.
이번 예제에서는 분류 문제를 다루었으며, 이를 위해 DecisionTreeClassifier 모델을 사용하였습니다.
이처럼 MinMaxScaler를 사용하여 데이터를 스케일링하는 것은
데이터 분석 및 머신러닝 모델링에 있어 매우 중요한 작업 중 하나입니다.
잘 외워두면 좋을것 입니다.
정규화 방법을 쉽게 외울 수 있는 방법 중 하나는 "값을 0과 1 사이로 매핑하는 방법"이라고 기억하는 것입니다.
또 다른 방법으로는 MinMaxScaler를 사용하는 경우, 0과 1에 가까운 값을 가지는 데이터는
비슷한 범위 내에서 작게 스케일링되며, 큰 값을 가지는 데이터는 넓은 범위 내에서
크게 스케일링되는 것이라고 이해할 수 있습니다.
'다양한 실전소스코드 > PYTHON데이터과학' 카테고리의 다른 글
파이썬으로 배우는 재귀함수, 상세 설명 (0) | 2023.03.19 |
---|---|
[중요]Pandas에서 Column 필터링 하는 3가지 방법 (0) | 2023.03.17 |
Pandas 컬럼을 딕셔너리로 매핑해서 새 컬럼에 추가하기 (0) | 2023.03.17 |
Pandas 날짜 컬럼의 시간값으로 오전 오후 분리하기 (0) | 2023.03.17 |
Pandas 함수 인자로 2개 컬럼 -> 새 컬럼 대입 (0) | 2023.03.16 |
댓글