- 머신러닝의 기본 흐름
1. 문제정의
>> 어떤 문제에 머신러닝을 이용할 것인지 선택
2. 데이터수집 및 전처리
>> 문제에 맞는 데이터 수집 및 결측치, 이상치 등 데이터 전처리
3. 모델 선택
>> 데이터에 알맞은 머신러닝 모델 선택 보통 클래스의 개수, 데이터의 종류에 맞춰서 모델을 선택한다.
4. 학습
>> 선택한 모델을 활용하여 학습
5. 평가
>> 학습이 잘 되었는지 평가 Accuracy, F1-score, Recall, Precision 평가지표 활용
6. 고도화
>> 고도화는 모델을 평가하고 결과가 좋지 않다면, 다시 데이터 전처리 과정으로 돌아가 다른 방법을 시도
Python 코드
import os
import pandas as pd
import numpy as np
from sklearn.model_selection import train_test_split, GridSearchCV
from sklearn.linear_model import LogisticRegression
from sklearn.svm import SVC
from sklearn.metrics import accuracy_score, recall_score, precision_score, f1_score
from sklearn.metrics import classification_report, confusion_matrix
LR 참고 : [https://eunsukimme.github.io/ml/2019/10/22/Logistic-Regression/]
위 블로그에서 개념을 이해해보자..
문제 정의 및 데이터 수집, 전처리를 하고나면 데이터를 문제와 답, 학습과 훈련 셋으로 나눠준다.
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size = 0.2, random_state=42)
train_test_split 함수를 사용하여 test_size를 0.2로 하여 데이터를 나눈다.
* test_size : test의 비율을 정함
* random_state : 데이터를 나누는 방법(번호를 지정하면 다시 해도 같은 데이터로 나눈다)
모델 선택 및 파라미터 설정
param = {"C":[0.001, 0.01, 0.1, 1, 10, 100, 1000],
"solver" : ['newton-cg','lbfgs','liblinear','sag','saga']
}
gs = GridSearchCV(LogisticRegression(),param_grid=param,cv=5,verbose=2,n_jobs=-1)
gs.fit(X_train,y_train)
lr_model = LogisticRegression(C=gs.best_params_["C"],max_iter=100,solver=gs.best_params_["solver"])
lr_model.fit(X_train,y_train)
predict = lr_model.predict(X_test)
GridSearchCV를 통해 파라미터를 찾는다. (모델과 모델에 들어갈 파라미터를 설정해서 넣어준다.)
* n_jobs = -1 : cpu를 최대로 사용 (빠르게 하기위한 설정)
LR모델을 사용중인데 대부분 비슷하게 사용한다.
모델 평가
from sklearn.metrics import confusion_matrix
predict = lr_model.predict(X_test)
confusion_matrix(y_test,predict)
[out] ( confusion_matrix ) [[TP, FN], [FP, TN]]
array([[ 0, 60],
[ 0, 84]])
from sklearn.metrics import classification_report
print(classification_report(y_test,predict))
[out] ( 좋은 결과는 아니지만 .. 이런식으로 나온다..)
precision recall f1-score support
0 0.00 0.00 0.00 60
1 0.58 1.00 0.74 84
accuracy 0.58 144
macro avg 0.29 0.50 0.37 144
weighted avg 0.34 0.58 0.43 144
위와 같이 결과를 보고 좋은 결과가 아니면 다시 전처리 작업을 통해 성능을 좋게 해보자!