일상에 필요한 정보들/컴퓨터, IT관련

파이썬으로 머신러닝 기초 다지기

불타는 신디 2025. 5. 17. 14:50
728x90
반응형

어느 흐린 월요일 아침, ‘지수’는 데이터 시각화까지 마친 뒤 잠시 커피를 홀짝이며 중얼거렸습니다.
“이제 숫자와 그래프를 넘어서, 컴퓨터가 스스로 배우도록 해보고 싶어!”
이렇게 시작된 오늘의 이야기, “파이썬으로 머신러닝 기초 다지기” 여정을 함께 걸어보겠습니다.


출처 : 구글 이미지

🤖 1. 머신러닝이란?

머신러닝(Machine Learning)은 데이터에서 패턴을 찾아 모델이 스스로 예측·분류·군집화 등을 수행하도록 학습시키는 기술입니다.

  • 지도학습: 입력(특징)과 출력(정답)이 있는 데이터를 학습 → 예) 스팸 메일 분류, 주택 가격 예측
  • 비지도학습: 정답 없이 데이터 간 유사도만으로 학습 → 예) 고객 세그먼트 군집화
  • 강화학습: 보상을 최대화하는 행동을 스스로 탐색 → 예) 게임 AI, 자율주행

지수는 오늘 간단한 지도학습으로 꽃의 품종을 예측해보려고 합니다.


⚙️ 2. 개발 환경 준비

pip install scikit-learn pandas matplotlib seaborn
import pandas as pd
import matplotlib.pyplot as plt
from sklearn import datasets
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.neighbors import KNeighborsClassifier
from sklearn.metrics import classification_report, confusion_matrix
# 한글 폰트 설정 (Windows 예시)
plt.rc('font', family='Malgun Gothic')

지수의 팁
“가상환경을 만들어 두면, 프로젝트별 라이브러리 충돌 없이 깔끔히 관리할 수 있어요.”


🌸 3. 데이터 불러오기: Iris 꽃 데이터셋

Scikit-learn에 내장된 Iris 데이터를 사용합니다.

iris = datasets.load_iris()
X = pd.DataFrame(iris.data, columns=iris.feature_names)
y = pd.Series(iris.target, name='species')
df = pd.concat([X, y], axis=1)
df.head()

sepal length (cm) sepal width (cm) petal length (cm) petal width (cm) species

5.1 3.5 1.4 0.2 0
4.9 3 1.4 0.2 0
4.7 3.2 1.3 0.2 0
4.6 3.1 1.5 0.2 0
5 3.6 1.4 0.2 0
  • species 레이블: 0=Setosa, 1=Versicolor, 2=Virginica

지수의 깨달음
“데이터를 프레임으로 보니, 다룰 때 훨씬 직관적이네요.”


🧹 4. 데이터 전처리

  1. 학습용/검증용 분리
X_train, X_test, y_train, y_test = train_test_split(
    X, y, test_size=0.3, random_state=42, stratify=y
)
  1. 특징 스케일링
scaler = StandardScaler()
X_train_scaled = scaler.fit_transform(X_train)
X_test_scaled = scaler.transform(X_test)

지수의 팁
“특징마다 단위가 다르면, 거리 기반 알고리즘의 성능이 떨어질 수 있어요. 스케일링은 필수!”


🚂 5. 모델 학습: k-최근접 이웃 (KNN)

knn = KNeighborsClassifier(n_neighbors=3)
knn.fit(X_train_scaled, y_train)
  • n_neighbors=3: 주변 3개 샘플의 다수결로 분류

📊 6. 예측 및 평가

y_pred = knn.predict(X_test_scaled)

print("혼동 행렬:\n", confusion_matrix(y_test, y_pred))
print("\n분류 리포트:\n", classification_report(y_test, y_pred, target_names=iris.target_names))
  • 혼동 행렬: 실제 클래스 vs. 예측 클래스 교차표
  • 정밀도(Precision), 재현율(Recall), F1-score 확인

해석 포인트

  • Setosa(0)는 거의 완벽하게 분류된 반면, Versicolor와 Virginica는 약간 섞여 있을 수 있어요.
  • n_neighbors를 조정하거나 다른 알고리즘을 시도해 보세요.

✨ 7. 모델 개선 아이디어

  1. 이웃 개수 튜닝: n_neighbors=5,7… 교차 검증으로 최적 값 찾기
  2. 다른 알고리즘 시도:
    • 로지스틱 회귀(LogisticRegression)
    • 의사결정 나무(DecisionTreeClassifier)
    • 랜덤 포레스트(RandomForestClassifier)
  3. 교차 검증: cross_val_score로 모델 안정성 확인
  4. 피처 엔지니어링: 새로운 파생 변수 생성

🚀 8. 마무리 및 다음 스텝

오늘은 지수와 함께 파이썬으로 머신러닝의 첫 단계를 밟아 보았습니다.

  • 데이터 로딩 → 전처리 → 모델 학습 → 평가
  • scikit-learn 한 줄로 구현 가능한 간편함

다음 포스팅에서는 “파이썬으로 딥러닝 기초 입문하기”를 다룰 예정이니, 인공신경망의 신비로운 세계로 함께 떠나봐요! 👩‍💻✨


728x90
반응형