머신러닝 정리

potato·2021년 7월 15일
0

아이펠

목록 보기
4/8

지도학습(Supervised learning) : 머신러닝 중 정답이 있고 그 정답을 맞추기 위해 학습

  • 분류 : 입력받은 데이터를 특정 카테고리 중 하나로 분류해내는 문제
    예시) 환자의 나이, 병력, 혈당 등을 입력받아 암의 양성/음성을 판정하는 문제

    • Decision Tree 모델(의사결정트리)

      • 직관적이면서도 간단하게 사용할 수 있어 분류 문제를 풀 때 가장 기본적으로 쓰이는 모델
      • 의사 결정을 할, 즉 데이터를 분리할 어떤 경계를 찾아내어 데이터를 체에 거르듯 한 단계씩 분류해나가는 모델
      • 데이터를 분리해나가는 모습이 나무를 뒤집어놓은 것과 같은 모양이기 때문
      • 결정경계가 데이터 축에 수직이어서 특정 데이터에만 잘 작동할 수 있다는 문제가 있다.
      	```
      	# 의사결정 모델 ( decision tree )
      
      	# 1. 생성
      	from sklearn.tree import DecisionTreeClassifier
      	decision_tree = DecisionTreeClassifier(random_state=32)
      	print(decision_tree._estimator_type)
      
      	# 2. 학습
      	decision_tree.fit(X_train, y_train)
      
      	# 3. 예측
      	y_pred = decision_tree.predict(X_test)
      
      	# 4. 평가
      	from sklearn.metrics import accuracy_score
      
      	accuracy = accuracy_score(y_test, y_pred)
      	accuracy
      	```
    • Random Forest Tree 모델
      • Decision Tres 모델을 극복하기 위해 제안된 모델이 Random Forest이며, 여러 개의 Decision Tree를 합쳐서 만들어놓은 개념
      • 각각의 의사 결정 트리를 만들기 위해 쓰이는 특성들을 랜덤으로 선택한다.
      • 이러한 기법을 앙상블(Ensemble) 기법이라고 합니다. 단일 모델을 여러 개 사용하는 방법을 취함으로써 모델 한 개만 사용할 때의 단점을 집단지성으로 극복하는 개념
    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))
    • Support Vector Model(SVM)
      • Support Vector Machine(SVM)은 원 훈련(또는 학습)데이터를 비선형 매핑(Mapping)을 통해 고차원으로 변환한다. 이 새로운 차원에서 초평면(hyperplane)을 최적으로 분리하는 선형분리를 찾는다. 즉, 최적의 Decision Boundary(의사결정 영역)를 찾는다.
        그렇다면 왜 데이터를 고차원으로 보내는 것일까? 예를 들어, 아래의 [그림1]과 같이 A=[a, d], B=[b, c]는 2차원에서 non-linearly separable(비선형 분리)하다. 이를 통해 한 차원 높은 3차원으로 Mapping하게 되면 linearly separable(선형 분리)하게 된다. 따라서, 충분히 큰 차원으로 적절한 비선형 매핑을 이요하면, 두 개의 클래스를 가진 데이터는 초평면(hyperplane)에서 항상 분리될 수 있다.
      • SVM은 복잡한 비선형 의사결정 영역을 모형화 할 수 있기 때문에 매우 정확하며, 다른 모델들 보다 Over Fitting되는 경향이 적다.
        출처: https://excelsior-cjh.tistory.com/66?category=918734
    from sklearn import svm
    
    svm_model = svm.SVC()
    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))
    from sklearn.linear_model import SGDClassifier
    sgd_model = SGDClassifier()
    
    print(sgd_model._estimator_type)
    sgd_model.fit(X_train, y_train)
    y_pred = sgd_model.predict(X_test)
    
    print(classification_report(y_test, y_pred))
    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))
  • 회귀 : 입력받은 데이터에 따라 특정 필드의 수치를 맞추는 문제
    예시) 택시를 탄 시각, 내린 시각, 출발지, 도착지, 거리 등을 입력받아 택시 요금을 맞추는 문제

2. 비지도학습 : 정답이 없는 것을 학습시키는 것

  • 클러스터링(clustering), 군집화 : 그렇게 명확한 분류 기준이 없는 상황에서도 데이터들을 분석하여 가까운(또는 유사한) 것들끼리 묶어 주는 작업

    • K-means : k 값이 주어져 있을 때, 주어진 데이터들을 k 개의 클러스터로 묶는 알고리즘
      • 군집의 수(K)가 주어졌을 때 빠른 시간에 유클리드 거리 기반으로 군집화를 수행
      • 알고리즘이 단순하며 이해하기 쉬움
    • DBSCAN 알고리즘
      • 밀도 기반의 군집화 알고리즘으로 outlier에 강건함
      • K-means와 달리 초기 중심점 및 군십의 수인 K값을 설정할 필요 없음
  • 차원 축소

    • PCA(Principal Component Analysis)
      • 데이터 분포의 분산을 최대한 유지한 채로 feature의 차원을 줄이는 자원 축소 알로기름
      • 상관관계가 적은 feature를 최대한 배제하고 분산이 최대가 되는 서로 직교(orthogonal)하는 기저(basis)들을 기준으로 데이터들을 나타내기 때문에 raw data를 사용하는 것보다 정확하고 간결하게 데이터를 표현 할 수 있음
      • feature수가 줄어들어 연산 속도가 빨라짐
    • T-SNE
      * 차원축소 전후의 데이터의 상대적 거리를 유지하므로 시각화 결과가 우수
profile
안녕하세요~

0개의 댓글