본문 바로가기
다양한 실전소스코드/PYTHON데이터과학

MinMaxScaler (Sklearn) 다양한 사용예

by aibattle 2023. 3. 17.
728x90
반응형

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에 가까운 값을 가지는 데이터는 

비슷한 범위 내에서 작게 스케일링되며, 큰 값을 가지는 데이터는 넓은 범위 내에서 

크게 스케일링되는 것이라고 이해할 수 있습니다.

 

 

728x90
반응형

댓글