Python을 이용한 머신러닝 기초: 로지스틱 회귀 분석 구현하기

Python과 머신러닝 소개

Python은 간결하고 읽기 쉬운 문법, 뛰어난 수학 및 과학 연산 라이브러리 지원 등으로 인해 데이터 분석과 머신러닝 분야에서 가장 널리 사용되는 언어 중 하나입니다.

다음은 Python을 활용한 간단한 코드 예시입니다.

 
# Python으로 리스트 정렬하는 코드 예시
numbers = [1, 3, 4, 2]
numbers.sort()
print(numbers)

위의 코드는 Python으로 리스트를 정렬하는 간단한 코드입니다.

머신러닝 소개

기계학습 또는 머신러닝은 컴퓨터가 학습할 수 있도록 하는 알고리즘과 기술을 개발하는 인공지능의 한 분야입니다.

다음은 Python의 sklearn 라이브러리를 사용한 머신러닝 모델 학습의 간단한 예입니다.

 
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.neighbors import KNeighborsClassifier

# iris 데이터 로드
iris = load_iris()

# train과 test 데이터 분리
X_train, X_test, y_train, y_test = train_test_split(iris.data, iris.target, test_size=0.3)

# 모델 생성 및 학습
knn = KNeighborsClassifier(n_neighbors=1)
knn.fit(X_train, y_train)

# 모델 평가
print(f"테스트 세트 점수: {knn.score(X_test, y_test)}")

위의 코드는 K-Nearest Neighbors 알고리즘을 이용해 아이리스 데이터셋을 분류하는 과정을 보여주고 있습니다.


2. 로지스틱 회귀 분석 이해

로지스틱 회귀 분석은 종속 변수가 범주형인 경우에 사용하는 회귀 분석 기법입니다. 특히 두 개의 범주를 가지는 경우가 많으며 이런 경우를 이진 로지스틱 회귀라 합니다.

2.1. 로지스틱 회귀 분석의 수학적 배경

로지스틱 회귀 분석은 선형회귀와 달리 종속변수와 독립변수간의 관계를 로지스틱 함수로 모델링합니다. 로지스틱 함수는 S자 형태를 가지며, 그 출력값은 0과 1사이입니다.

2.2. 로지스틱 회귀 분석의 통계학적 이해

로지스틱 회귀 분석에서는 로그 오즈(log odds)를 사용합니다. 로그 오즈는 범주형 변수의 두 범주 간의 확률비를 로그 변환한 것입니다.

다음은 Python의 sklearn 라이브러리를 사용해 로지스틱 회귀 모델을 학습하는 간단한 예시입니다.

 
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LogisticRegression

# iris 데이터 로드
iris = load_iris()

# train과 test 데이터 분리
X_train, X_test, y_train, y_test = train_test_split(iris.data, iris.target, test_size=0.2, random_state=42)

# 로지스틱 회귀 모델 생성 및 학습
logreg = LogisticRegression()
logreg.fit(X_train, y_train)

# 학습된 모델로 예측
predictions = logreg.predict(X_test)

# 모델 평가
print(f"테스트 세트 점수: {logreg.score(X_test, y_test)}")

위의 코드는 로지스틱 회귀 모델을 이용하여 아이리스 데이터셋을 분류하는 과정을 보여주고 있습니다.


Python 환경 설정

Python을 시작하기 전에 필요한 개발 환경 설정을 알아보겠습니다. 개발 환경 설정이란, Python 코드를 작성하고 실행하는데 필요한 도구들을 설치하고 세팅하는 것을 말합니다.

Python 설치

먼저 Python을 설치해야 합니다. Python 설치는 [공식 다운로드 페이지](https://www.python.org/downloads/)에서 할 수 있습니다. 최신 버전을 다운로드 받아 설치합니다. 아래는 Python 버전을 확인하는 코드입니다.


# Python 버전 확인하는 코드
import sys
print(sys.version)

통합개발환경(IDE) 선택 및 설치

Python 코드를 작성하려면 텍스트 편집기가 필요하고 이는 간단한 텍스트 에디터부터 복잡한 통합 개발 환경(IDE)까지 다양합니다. PyCharm, Jupyter Notebook, Atom, Visual Studio Code 등 다양한 IDE가 있습니다.

필요한 패키지 설치

Python 개발을 위해 필요한 패키지들을 설치해야합니다. 패키지 설치는 pip를 이용합니다. pip는 Python에서 사용할 수 있는 패키지들을 관리해주는 도구입니다.


# 패키지 설치하는 코드
pip install numpy pandas matplotlib

위의 명령어는 numpy, pandas, matplotlib라는 세 개의 파이썬 패키지를 설치하는 코드입니다.


Python을 이용한 데이터 전처리

Python은 다양한 데이터 전처리 기능을 제공하는 라이브러리를 가지고 있어 데이터 분석, 머신러닝 등에 자주 사용됩니다.

4.1. 필요한 라이브러리 설명

Python에서 데이터 전처리를 하는 데 필요한 주요 라이브러리는 판다스(Pandas), 넘파이(NumPy), 맷플롯립(Matplotlib)입니다.

– 판다스(Pandas) : 데이터 분석 및 조작을 위한 고수준 데이터 구조와 도구를 제공합니다.
– 넘파이(NumPy) : 수치 데이터 계산을 위한 효율적인 메모리 사용이 가능한 배열 객체를 제공합니다.
– 맷플롯립(Matplotlib) : 데이터 시각화를 위한 표준 라이브러리입니다.

4.2. 데이터 불러오기

데이터 분석을 위해 먼저 데이터를 불러와야 합니다. 아래 코드는 판다스를 이용하여 csv 파일을 불러오는 예시입니다.


import pandas as pd

# csv 파일을 DataFrame 객체로 불러오기
df = pd.read_csv('data.csv')

4.3. 데이터 전처리하기

데이터 전처리는 결측치 처리, 이상치 처리, 데이터 스케일링 등을 포함합니다. 아래 코드는 판다스를 이용하여 결측치를 평균값으로 대체하는 예시입니다.


# 결측치 대체
df.fillna(df.mean(), inplace=True)

데이터 전처리는 데이터 분석의 결과에 매우 중요한 영향을 미치기 때문에, 전처리 과정을 신중하게 수행해야합니다.


Python을 이용한 로지스틱 회귀 분석 모델 구현

Python에서는 사이킷런(Scikit-learn)이라는 라이브러리를 이용하여 기계학습의 여러 알고리즘을 쉽게 사용할 수 있습니다. 이 중에서 로지스틱 회귀분석은 분류문제를 해결하는 강력한 알고리즘 중 하나입니다.

데이터 불러오기 및 준비

먼저 사이킷런 내장 데이터인 iris 데이터를 불러옵니다.

 
from sklearn.datasets import load_iris 

iris = load_iris() 

데이터 분할

데이터를 학습용과 테스트용으로 분리합니다.

 
from sklearn.model_selection import train_test_split 

X_train, X_test, y_train, y_test = train_test_split(iris.data, iris.target, test_size=0.2, random_state=42)

모델 생성

로지스틱 회귀분석 모델을 생성합니다.

 
from sklearn.linear_model import LogisticRegression 

model = LogisticRegression() 

모델 학습

생성한 모델로 데이터를 학습시킵니다.

 
model.fit(X_train, y_train) 

모델 검증

검증 데이터를 이용해 모델의 성능을 확인합니다.

 
model.score(X_test, y_test) 

이와 같이 로지스틱 회귀분석을 통해 분류 문제를 해결하고 모델의 성능을 평가할 수 있습니다.


Python을 이용한 모델 학습 및 예측

Python의 사이킷런 라이브러리는 다양한 머신러닝 모델의 학습 및 예측 함수를 제공합니다.

모델 학습

가장 먼저, 모델을 학습시키는 과정은 다음과 같습니다.

 
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.tree import DecisionTreeClassifier

# 데이터 로드
iris = load_iris()

# 데이터 분할
X_train, X_test, y_train, y_test = train_test_split(iris.data, iris.target, test_size=0.2, random_state=42)

# 모델 생성
decision_tree = DecisionTreeClassifier(random_state=42)

# 모델 학습
decision_tree.fit(X_train, y_train)

위에서는 붓꽃 데이터를 Decision Tree 모델을 이용해 학습했습니다.

모델 예측

이제 학습된 모델을 이용해 예측을 해봅시다.

 
# 모델 예측
predictions = decision_tree.predict(X_test)

이 코드의 결과는 모델이 X_test데이터에 대해 예측한 결과를 담은 numpy array를 반환합니다.

모델 평가

마지막으로 머신러닝 모델의 성능을 평가해봅시다. 사이킷런에서는 classification_report 기능을 제공하여, 학습된 모델의 성능을 간략하게 평가할 수 있습니다.

 
from sklearn.metrics import classification_report

# 성능 평가
print(classification_report(y_test, predictions))

마지막 3줄의 코드는 모델의 성능을 간결하게 평가하는 코드입니다.


7. 모델의 성능 평가

머신러닝 모델을 학습시키고 나면, 그 모델이 얼마나 잘 동작하는지를 알아보는 것이 중요합니다. 이를 위해 여러가지 성능 평가 지표가 사용됩니다.

7.1. 성능 평가 지표 설명

머신러닝 모델의 성능 평가 지표에는 정확도(Accuracy), 정밀도(Precision), 재현율(Recall), F1 스코어(F1 Score) 등이 있습니다.

– 정확도: 모델이 올바르게 분류한 샘플의 비율입니다.
– 정밀도: 양성으로 예측한 샘플 중 실제로 양성인 샘플의 비율입니다.
– 재현율: 실제 양성 샘플 중에서 양성으로 예측된 샘플의 비율입니다.
– F1 스코어: 정밀도와 재현율의 조화 평균을 나타내는 지표입니다.

7.2. 모델의 성능 평가하기

위에서 구현한 분류 예측 모델의 성능을 평가하기 위한 예시 코드는 다음과 같습니다.

 
from sklearn.metrics import accuracy_score, precision_score, recall_score, f1_score

# 예측값 
predictions = model.predict(X_test)

# 정확도
accuracy = accuracy_score(y_test, predictions)
print('정확도:', accuracy)

# 정밀도
precision = precision_score(y_test, predictions)
print('정밀도:', precision)

# 재현율
recall = recall_score(y_test, predictions)
print('재현율:', recall)

# F1 스코어
f1 = f1_score(y_test, predictions)
print('F1 스코어:', f1)

위의 코드는 모델이 예측한 결과를 이용하여 각 성능 평가 지표를 계산하고 출력하는 코드입니다.


8. 모델의 개선 방안

머신러닝 모델의 성능은 데이터의 질, 모델의 종류, 모델의 구조 등 다양한 요소에 의해 영향을 받습니다. 그러므로, 모델의 성능을 개선하기 위한 방법도 다양함이 특징입니다.

8.1. 데이터의 질 개선

데이터의 질을 개선하는 방법으로는 데이터 정제, 특성 선택, 특성 축소, 데이터 확장 등이 있습니다.

 
from sklearn.preprocessing import StandardScaler

# 특성 스케일링
scaler = StandardScaler()
X_train_scaled = scaler.fit_transform(X_train)
X_test_scaled = scaler.transform(X_test)

위 코드에서는 데이터의 스케일링 작업을 진행했습니다.

8.2. 모델 변경 및 파라미터 조정

모델의 검증 결과에 따라 다른 모델을 사용하거나, 모델의 파라미터를 조정하여 성능을 개선할 수 있습니다.

 
from sklearn.svm import SVC
from sklearn.model_selection import GridSearchCV

# SVM 모델 사용
svm = SVC(random_state=42)

# 그리드서치로 파라미터 조정
params = {'C': [0.1, 1, 10, 100]}
grid_search = GridSearchCV(svm, param_grid=params, cv=5)
grid_search.fit(X_train_scaled, y_train)

위 코드에서는 SVM 모델을 사용하고, 그리드서치를 이용해 최적의 파라미터를 찾아 모델 학습을 진행했습니다.

8.3. 앙상블 학습

여러 개의 모델을 결합하여 예측 성능을 향상시키는 앙상블 학습 방법도 모델의 성능을 개선하는 데 사용될 수 있습니다.

 
from sklearn.ensemble import RandomForestClassifier

# 랜덤 포레스트 사용
rfc = RandomForestClassifier(random_state=42)
rfc.fit(X_train_scaled, y_train)

위 코드에서는 랜덤 포레스트라는 앙상블 모델을 사용하여 학습을 진행했습니다.


9. 실제 적용 사례

머신러닝은 다양한 분야에서 활용됩니다. 여기서는 의료 분야에서 머신러닝이 어떻게 활용되는지를 살펴보도록 하겠습니다.

9.1. 유방암 진단 모델

머신러닝을 이용한 유방암 진단 모델 예시입니다. scikit-learn의 load_breast_cancer 함수를 사용해 실제 유방암 데이터를 불러온 후, 랜덤 포레스트 알고리즘으로 모델을 학습시키고 평가해보겠습니다.

 
from sklearn.datasets import load_breast_cancer
from sklearn.model_selection import train_test_split
from sklearn.ensemble import RandomForestClassifier
from sklearn.metrics import accuracy_score

# 데이터 불러오기
cancer = load_breast_cancer()

# 학습-테스트 데이터 분리
X_train, X_test, y_train, y_test = train_test_split(cancer.data, 
                                                    cancer.target, 
                                                    test_size=0.2, 
                                                    random_state=42)

# 랜덤 포레스트 모델 학습
rfc = RandomForestClassifier(random_state=42)
rfc.fit(X_train, y_train)

# 모델 평가
predictions = rfc.predict(X_test)
accuracy = accuracy_score(y_test, predictions)
print('정확도:', accuracy)

위에 코드를 실행하면, 유방암진단 모델의 정확도를 출력합니다.

이와 같이, 머신러닝은 의료 분야에서도 다양한 질병의 진단 도구로 활용되고 있으며 치료 방향성 결정 등에도 활용가능하다.


10. 결론 및 향후 연구 방향

머신러닝 모델은 다양한 분야에서 적용되며 뛰어난 효과를 보이고 있습니다. 하지만 그럼에도 불구하고 머신러닝 모델이 현실 세계의 모든 상황을 완벽하게 표현하지는 못합니다. 그로 인해 발생하는 예측의 정확성 문제나 과적합, 언더피팅 같은 여러 문제들도 존재합니다.

10.1. 모델의 일반화

머신러닝 모델의 일반화는 중요한 이슈 중 하나입니다. 모델이 학습 데이터에 대해 최적화되어 있을 뿐만 아니라, 새로운 데이터에 대해서도 성능이 잘 나오게 만드는 것이 필요합니다.

 
from sklearn.model_selection import cross_val_score

# 교차검증으로 모델의 일반성 검증
scores = cross_val_score(rfc, X_train, y_train, cv=5)
print('교차검증 평균 점수:', scores.mean())

위 코드에서는 교차검증을 이용하여 모델의 일반화 성능을 평가했습니다.

10.2. 플랫폼화와 자동화

머신러닝 모델의 플랫폼화와 자동화는 향후 연구의 주요한 방향 중 하나입니다. 모델 학습, 검증, 배포 등의 과정을 자동화하고, 여러 모델을 관리하고 대시보드 등을 통해 결과를 확인할 수 있는 플랫폼은 머신러닝 응용의 확장성과 효율성을 높입니다.

머신러닝 분야는 지금도 계속 발전하고 있으며, 더욱 높은 성능의 모델과 더욱 다양한 응용 분야로 확장될 것입니다.


Leave a Comment