Machine Learning with PyTorch and Scikit-Learn_chapter3

Jae Gyeong Lee·2022년 9월 11일
0

Loss function(손실함수)와 Cost function(비용함수).

  • Loss function is usually a function defined on a data point, prediction and label, and measures the penalty. -> single data set에 대한 것.
  • Cost function is usually more general. It might be a sum of loss functions over your training set plus some model complexity penalty (regularization). -> single data set의 합, entire data set에 대한 것.

=> A loss function is a part of a cost function
=> 크게 보면, 두 개념의 차이는 없음.

Objective function is the most general term for any function that you optimize during training.
MLE is a type of objective function (which you maximize)

https://stats.stackexchange.com/questions/179026/objective-function-cost-function-loss-function-are-they-the-same-thing


분류(또는 예측)을 위한 모델의 type(chapter3에 언급된 모델 기준).

1. Model-based Learning(모델을 생성하여 task 실시)

training data가 주어졌을 때, 분류/예측 모델을 구축.

새로운 데이터가 주어졌을 때, 이 분류/예측 모델로 output(분류/예측)을 도출.

  • logistic regression
  • Support Vector Machine
  • Decision tress

1.1. Logistic Regression

1.2. Support Vector Machine

1.3. Decision tress

특정한 분류 규칙을 통해 데이터를 분류/회귀하는 모델.

Decision tree에서는 어떠한 질문(또는 정답)을 node라고 함.

  • Root node: 첫 분류 기준이 되는 node
  • Intermediate node: 중간 분류 기준이 되는 node # Root node와 Leaf node가 아닌 node
  • Leaf node(terminal node): 마지막 node

Decision tree의 main idea는 데이터를 2개 혹은 그 이상으로 분할하는 것. 또한 leaf node가 완전히 분류되게끔 하는 것.

  • Decision tree의 성능을 평가하기 위해서는 Impurity(불순도)라는 개념을 알아야 함.
  • 불순도(Impurity)란 같은 카테고리 안에 서로 다른 데이터가 얼마나 섞여 있느냐. 즉, 분리 후에 불순도가 낮을수록 결과가 좋은 것.
  • 하위 node일수록, 불순도가 낮아져야 한다(그러하도록 설정해야 한다).
    - 부모 node와 자식 node의 불순도 차이를 Information Gain(IG)라 함.
    - 자식 node의 불순도가 작을수록, IG가 큰 것. IG를 최대화하는 것이 decision tree의 목적. 즉, Root node에서부터 leaf node까지 IG가 최대가 되도록 데이터를 분류.

불순도를 수치적으로 나타낼 수 있는 지표로는 아래의 3가지가 있음(decision tree_classification의 cost function)

1) Gini
2) Entropy
3) MisClassification error(책에서는 Classification error)

  • Gini와 Entropy는 실질적으로 비슷한 tree 구조를 형성함. Gini가 계산량이 상대적으로 빠르기 때문에 기본값으로 좋음. 그러나 빈도가 높은 class를 한쪽으로 고립시키는 경향이 있음(entropy는 상대적으로 균형 잡힌 tree 구조를 형성).
  • misclassification error는 Gini, entropy와 달리 미분이 불가능하여, 자주 쓰이지 않음.

leaf node의 순도가 100%(즉, 불순도가 0인)인 상태를 Full tree라고 함. 이렇게 되면, Decision tree의 모형이 너무 복잡해진다(즉, overfitting의 문제가 발생할 수 있음).

이를 해결하기 위해, node의 깊이를 제한하여 tree를 pruning(가지치기)함.

  • 최대 depth 설정, leaf node 개수 제한, node 분할 기준 제한 등
  • Decision tree에서 overfitting을 피하기 위해, pruning을 사용하는데 이 방법은 2가지로 나뉨.
    - Pre-pruning: tree를 다 그리기 전에 알고리즘을 멈춤.
    - Post-pruning: tree를 다 그린 후에 leaf node부터 가지치기를 실시.

Pruning의 cost function

CC(T) = Err(T) + α × L(T)

  • CC(T)
    - 의사결정나무의 비용 복잡도
    - 오류가 적으면서 terminal node 수가 적은 단순한 모델일 수록 작은 값
  • ERR(T)
    - 검증데이터에 대한 오분류율
  • L(T)
    - terminal node의 수
  • Alpha
    - ERR(T)와 L(T)를 결합하는 가중치
    - 사용자에 의해 부여됨, 보통 0.01~0.1의 값을 씀

Decision tree는 decision boundary가 데이터 축에 수직이어서 특정 데이터에만 잘 작동할 가능성이 높음. 이러한 단점을 보안하기 위해 나온 것이 Random forests.

Random forests: 같은 데이터에 대해 Decision tree를 여러 개 만들어 그 결과를 종합해 예측 성능을 높이는 기법. Random forests can be considered as an ensemble of decision trees.

https://ratsgo.github.io/machine%20learning/2017/03/26/tree/

2. Instance-based Learning(모델 생성 없이, 인접 데이터를 활용하여 task 실시)

새로운 데이터가 주어졌을 때, training data의 패턴을 파악하여 output(분류/예측)을 도출.

  • K-Nearest Neighbor

2.1. K-Nearest Neighbor

  • 어떤 데이터가 주어지면 그 주변(이웃)의 데이터를 살펴본 뒤 더 많은 데이터가 포함되어 있는 범주로 분류하는 방식
  • 다른 지도학습 모델과 달리, 별도의 모델 구축(생성) 및 training data의 학습이 불필요함.
  • 별도의 모델 구축 없이, task가 실행된다는 뜻에서 Lazy model이라고 함.

K-Nearest Neighbor 알고리즘을 사용할 때는 데이터들을 Noramlizaion 해주어야 함. 각 데이터의 특성을 나타내는 각각의 column의 scale이 다를 수 있기 때문.

KNN은 학습을 통해 결정되는 parameter가 없고, user define hyper parameter만 존재.

1) K: ‘가장 가까운 근접 이웃 데이터를 몇 개까지 탐색할 지.

  • 1 <= K <= total data ea
  • K가 너무 크면 overfitting, 너무 작으면 underfitting 문제 발생.
  • optimal한 K는 K를 조정하면서 선택해야 함.

2) Distance Measures: 데이터와 데이터 사이의 거리를 어떤 방법으로 계산할 지.

  • Euclidean distance: 두 관측치(data point) 사이의 직선의 거리(두 벡터 사이의 직선의 거리; 피타고라스 정리).
  • Manhattan distance: 두 관측치 사이의 격자를 통한 거리.
  • Minkowski distance: generalization of the Euclidean and Manhattan distance.

3) Weighted: 새로운 데이터와 기존 관측치(data point) 간의 거리를 계산할 때 가중치를 고려하는 것. => Weighted KNN(데이터의 가중치를 고려하여 보다 정확하게 분류)

sklearn 기준, hyper parameter

1) n_neighbors: 탐색할 이웃의 수로 K를 의미함(default = 5).
2) metric: Distance Measures(default = minkowsi).
3) weights: 예측에 사용되는 가중치(uniform은 모두 동일한 가중치 부여, distance는 가까울 수록 더 가중치를 부여).
-> Gridsearchcv를 통해, 최적화된 parameter 탐색 가능.

KNN algorithm process

  • Step0: input testing data & Normalize the data.
  • Step1: Choose the number of K and a distance metric
  • Step2: Find the k-nearest neighbors of the data record that we want to classify
  • Step3: Assign the class label by ‘majority vote’
  • Step4: print output

예), X_new(빨간점)가 주어졌을 때, 이를 A로 분류할지 B로 분류할지 판단. K=3일 때, X_new는 B로 분류. 반면, K=6일 때, X_new는 A로 분류. 즉, K가 무엇이냐에 따라 결과가 바뀜(default = 5).

  • 인접한 K개의 데이터로부터 majority voting 시행하고 그 결과에 따라 X_new의 class가 정해지는 것.

KNN은 'curse of dimensionality'로 인해 overfitting 문제가 발생할 수 있음.

  • KNN은 로지스틱 회귀처럼 overfitting 피하기 위해 regularization을 사용할 수 없음.

curse of dimensionality

  • 데이터의 특징(feature)이 너무나도 많아서(차원이 커질수록 탐색해야할 공간이 늘어남) 성능 저하가 나타나는 현상.
  • data set이 high-dimensional spaces를 갖으면, data point 간 거리가 멀어져(공간이 커지므로) 유사한 특징을 가지는 클러스터를 찾기 어려워짐.

curse of dimensionality 해결법.

1) 데이터의 양을 늘림: 데이터의 양이 증가할수록 밀도가 높아지므로, 데이터의 특징을 좀 더 잘 나타낼 수 있게 됨.

2) 차원 축소 기법 사용: PCA(Principal Components Analysis) 등의 방법을 사용하여 특징의 개수를 축소.

3) feature selection

https://www.youtube.com/watch?v=W-DNu8nardo
https://tobigs.gitbook.io/tobigs/data-analysis/python-knn
https://goofcode.github.io/similarity-measure

profile
안녕하세요 반갑습니다. 공부한 내용들을 기록하고 있습니다.

0개의 댓글