머신러닝 분류 테스크

매일 공부(ML)·2021년 11월 16일
0

Simple toy project

목록 보기
14/19

링크텍스트

붓꽃 분류

아이디어

  • 지도학습: 머신러닝에서 정답을 맞히기 위해 학습하는 것으로 훈련데이터에 정답이 있다

  • 분류: 주어진 데이터가 어느 카테고리에 속하는지 맞히는 것

  • 정확도 :

  • 사용 모델

  • Decision Tree : 직관적이면서 간단하지만 데이터 축이 수직이어서 특정 데이터에만 작동한다.

# (1) 필요한 모듈 import
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.tree import DecisionTreeClassifier
from sklearn.metrics import classification_report

# (2) 데이터 준비
iris = load_iris()
iris_data = iris.data
iris_label = iris.target

# (3) train, test 데이터 분리
X_train, X_test, y_train, y_test = train_test_split(iris_data, 
                                                    iris_label, 
                                                    test_size=0.2, 
                                                    random_state=7)

# (4) 모델 학습 및 예측
decision_tree = DecisionTreeClassifier(random_state=32)
decision_tree.fit(X_train, y_train)
y_pred = decision_tree.predict(X_test)

print(classification_report(y_test, y_pred))

여러 모델

  • Randomforest: Decision Tree를 여러 개 모아놓은 것이다.(앙상블기법) , 상위 모델을 예측하는 편향성보단 다양한 모델의 결과를 반영하는 다ㅑ양성에 초첨
from sklearn.ensemble import RandomForestClassifier

X_train, X_test, y_train, y_test = train_test_split(iris_data, 
                                                    iris_label, 
                                                    test_size=0.2, 
                                                    random_state=21)

random_forest = RandomForestClassifier(random_state=32)
random_forest.fit(X_train, y_train)
y_pred = random_forest.predict(X_test)

print(classification_report(y_test, y_pred))
  • SVM: 기존 데이터를 비선형 매핑을 통해서 고차원으로 변환시킨다. 이를 통해 최적으로 분리하는 선형 분리를 찾습니다. 이로 인해 복잡한 비선형 의사결정 영역을 이용할 수 있어서 매우 정확하고 그로 인해 over fitting되는 경향성이 적어짐

from sklearn import svm
svm_model = svm.SVC(random_state=32)

print(svm_model._estimator_type)

svm_model.fit(X_train, y_train)
y_pred = svm_model.predict(X_test)

print(classification_report(y_test, y_pred))
  • SGDClassifier : 주로 데이터가 큰 경우 사용이된다.
from sklearn.linear_model import SGDClassifier
sgd_model = SGDClassifier()

print(sgd_model._estimator_type)

from sklearn.linear_model import LogisticRegression
logistic_model = LogisticRegression()

print(logistic_model._estimator_type)
  • Logistic Regression : 회귀를 사용하여 데이터가 속할 범주의 확률을 0~1사이의 값으로 예측하여 그 확률값을 기반으로 범중 속해서 분류하는 지도학습 알고리즘
from sklearn.linear_model import LogisticRegression
logistic_model = LogisticRegression()

print(logistic_model._estimator_type)

logistic_model.fit(X_train, y_train)
y_pred = logistic_model.predict(X_test)

print(classification_report(y_test, y_pred))

Code 설명

  • 라이브러리 : scikit-learn

  • from sklearn.datasets import load_iris : iris 데이터 로드

  • keys() : 데이터 정보 확인

-shape(): 데이터의 크기 확인

  • target(label): 머신러닝 모델이 출력해야하는 정답지, 변수 이름은 주로 y

  • feature : 머신러닝 모델에 입력되는 문제지, 변수이름은 주로 X

  • filename : 데이터셋의 전체 이름 보여준다

  • train_test_split : training dataset와 test dataet으로 데이터 셋 나누기 for 학습

  • test_size: test dataset의 크기 조절

  • random_state: train 데이터와 test데이터 분리 시, 적용되는 랜덤성 결정

모델 평가

정확도

  • 맞은 데이터만 신경쓴다

  • 가장 필요한 지표지만 정답의 분포에 따라 모델의 성능을 잘 평가하지 못하는 척도가 될 수도 있다

  • 균형한 데이터 , 정확도는 정말 필요한 지표

  • 불균형한 데이터, 정확도는 정말 불필요한 지표

profile
성장을 도울 아카이빙 블로그

0개의 댓글