본문 바로가기

머신러닝

머신러닝 - ex09_3선형분류,뷴류평가지표

### 손글씨 분류
- 0~9까지 사람이 직접쓴 손글씨 이미지 데이터
- 10종류를 구분하는 모델을 만듬

import pandas as pd

data = pd.read_csv("./data/digit_train.csv")

data.head()

# 데이터 시각화
import matplotlib.pyplot as plt


pic0 = data.iloc[0,1:]
pic0.shape

# pandas - series -> values.reshape 행열 재배열 기능
pic0_reshape = pic0.values.reshape(28,28)

plt.imshow(pic0_reshape, cmap = 'gray')

plt.hist(pic0) # 데이터 범위는 0~255

# 학습을 위한 데이터 분리
X = data.iloc[:,1:]
y = data.iloc[:,0]

X.shape

y.shape

from sklearn.model_selection import train_test_split

# 8 : 2 비율로 분리
X_train, X_test, y_train, y_test = train_test_split(X,y, test_size=0.2, random_state=511)

# 모델링(학습 및 평가)
from sklearn.linear_model import LogisticRegression

model = LogisticRegression()

model.fit(X_train, y_train)

model.score(X_test,y_test)

### 데이터 스케일링
- 사진의 픽셀정보는 0 ~ 255로 최대/최소
- min max scaler 를 사용해서 0~1 사이 값으로 모든 픽셀을 조정
- 스케일링 효과 : 학습(연산)속도 개선, 거리기반의 모델들의 잘못된 판단을 개선

from sklearn.preprocessing import MinMaxScaler

scaler = MinMaxScaler()

scaler.fit(X_train) # 현재 데이터 분포의 최소/최대 값 확인 : 변환하는 기준 값 추출

X_train_transformed = scaler.transform(X_train)
X_test_transformed = scaler.transform(X_test)

logi_model = LogisticRegression()

logi_model.fit(X_train_transformed,y_train)

logi_model.score(X_test_transformed,y_test)

from sklearn.svm import LinearSVC #SVM, SVC

# 서포트 벡터 머신
from sklearn.svm import LinearSVC #SVM = SVC

# C 값이 클수록 하드마진(오류 허용 안함)
# C 값이 작을수록 소프트마진 (오류를 허용함 ) - 과소적합 위험
svc_model = LinearSVC( )

svc_model.fit(X_train,y_train)

svc_model.score(X_test,y_test)

s_svc_model = LinearSVC()

s_svc_model.fit(X_train_transformed,y_train)

s_svc_model.score(X_train_transformed,y_train)

### 평가지표
- 회귀 : 오차를 기반으로 하는평가지표를 사용(MSE, RMSE,MAPE, R2-score)
- 분류 : 맞춘 개수를 기반으로 하는 펴가지표를 사용
    - Accuracy(정확도) : 전체 데이터 중에 정확히 맞춘 비율
    - Recall(재현율) : 실제 정답중에서 모델이 정확히 맞춘 비율
    - Precision(정밀도) : 모델 예측 정답중에서 정확히 맞춘 비율
    - F-1 score : 정밀도와 재현율의 조화평균
- from sklearn.metrics import
    - confusion_matrix(y_test, pre)
    - accuracy_score(y_test,pre)
    - precision_score(y_test,pre)
    - recall_scire(y_test,pre)
    - f1_score(y_test,pre)

7_1. 머신러닝 수업 자료(분류 평가 지표).pdf
1.16MB

이 코드는 손글씨 이미지 분류를 위한 데이터 전처리, 모델링, 평가를 수행하는 코드입니다.

코드의 구성과 순서가 명확하고, 적절한 주석이 포함되어 있어 이해하기 쉽습니다.

또한, 필요한 라이브러리를 잘 활용하며, 데이터 전처리와

모델링을 모두 수행하여 분류 모델을 만들고 평가 지표를 확인합니다.

 

다만, 모델링 부분에서 두 가지 모델(Logistic Regression, LinearSVC)만을 사용하였고,

하이퍼파라미터 튜닝을 하지 않았기 때문에 성능이 제한적일 수 있습니다.

 

또한, 데이터 시각화를 통한 EDA를 수행하지 않았기 때문에 데이터에 대한

이해도를 높일 필요가 있습니다.