230629_머신러닝: 알고리즘 선택부터 모델 평가까지 모든 과정을 알아보기

안인균·2023년 6월 29일
0
post-thumbnail

머신러닝

### 알고리즘
: X*n, 함수, 공식, n은 '파라미터' 라고 불림. 

### 학습
: 위의 알고리즘에서 n을 찾는다. data(Input, Output)에 맞춰서

### 최적화
: 최적의 n을 찾는 알고리즘을 찾는 것.

모델을 만드는 과정
1. 모델을 정하여 수식화 한다.
2. 모델을 데이터를 이용해 학습(Train) 시킨다.
- 모델을 데이터의 패턴에 맞춘다. (fit)
3. 학습된 모델이 얼마나 데이터 패턴을 잘 표현하는지 평가한다.(Test)
=> Scikit-learn 패키지.

머신러닝의 종류

: 지도학습 / 비지도학습- label( y) 값의 유무에 따라 나뉘어진다.

- 지도학습 : label(y) 값의 데이터 타입에 따라 나뉘어짐.

- 분류 : 범주가 있는 값을 예측. 이진 분류 / 다중 분류

- 회귀 : 범주가 정해지지 않는 값을 예측, 최대한 목표값에 근사한 결과를 가져오는 모델 구현, 
정확하게 동일한 값 도출은 힘들다.

- 비지도학습 :

- 군집 : 비슷한 유형의 데이터 그룹을 찾아 경향성을 파악한다.

- 차원축소 : 너무 많은 feature를 가진 데이터 셋의 feature 수를 
			예측에 영향을 최대한 주지 않고 줄이는 것. 
			이것은 데이터 시각화를 할 때 용이하게 하거나 
            모델의 성능을 높이기 위해 진행한다.

✅ 비지도학습은 최종 예측 모델의 완성이 목적이기 보다는 중간 단계 과정에서 학습하는 경우가 많다.
주로 지도학습이 최종 예측 모델인 경우가 많다.

머신러닝 개발절차

  1. Business understanding

  2. Data understanding

  3. Data preparation

  4. Modeling

  5. Evaluation

  6. Deployment

✅ 이후, 수업에서 Scikit-learn 라이브러리를 주로 사용하여 학습할 것.

sklearn.datasets 와 pd.DataFrame 차이

scikit-learn 패키지의 일부로, 데이터셋을 제공하는 도구입니다.
반면에 pd.DataFrame은 pandas라는 라이브러리에 속하는 데이터 구조입니다. pandas는 데이터 분석과 조작을 위한 강력한 도구로 널리 사용됩니다.

두 개의 차이점은 다음과 같습니다:

  1. sklearn.datasets는 미리 정의된 데이터셋을 제공하며, 주로 머신러닝 알고리즘의 테스트 및 실험에 사용됩니다.
    pd.DataFrame은 주로 사용자가 직접 데이터를 입력하거나 파일로부터 데이터를 읽어와서 저장하는 데 사용됩니다.
  2. sklearn.datasets는 일반적으로 NumPy 배열 또는 희소 행렬의 형태로 데이터를 반환합니다. 이러한 형식은 scikit-learn과 호환되는 형식입니다.
    반면, pd.DataFrame은 테이블 형식의 데이터를 제공하며, 열과 행으로 구성된 구조로 데이터를 다룹니다.

✅ 따라서, sklearn.datasets는 머신러닝 알고리즘을 테스트하고 평가하기 위한 표준화된 데이터셋을 제공하고, pd.DataFrame은 데이터를 저장하고 다루는 데 사용됩니다.

Decision tree Classifier

머신러닝 구현 순서

  1. import 모델
  2. 모델 생성
  3. 모델 학습시키기
  4. 추론

train_test_split 메서드 :

scikit-learn 패키지의 함수로, 데이터셋을 훈련 세트와 테스트 세트로 나누는 데 사용됩니다. 주로 머신러닝 모델을 훈련하고 평가하는 데에 활용됩니다.

train_test_split 함수는 다음과 같은 매개변수

  • arrays: 훈련 및 테스트에 사용될 데이터셋입니다. 일반적으로 입력 데이터와 해당 레이블을 넣습니다. 이는 하나 이상의 배열로 구성될 수 있습니다.

  • test_size: 테스트 세트의 비율이나 개수를 지정합니다. 보통 0.2 또는 0.3과 같이 비율로 지정합니다. 예를 들어, 0.2로 설정하면 전체 데이터셋의 20%가 테스트 세트로 할당됩니다.

  • train_size: 훈련 세트의 비율이나 개수를 지정합니다. test_size 대신 이 값을 사용할 수도 있습니다. test_size를 지정하면 자동으로 train_size가 결정됩니다.

  • random_state: 데이터셋을 섞을 때 사용되는 난수 발생기의 시드입니다. 같은 난수 시드를 사용하면 실행할 때마다 동일한 훈련 및 테스트 세트가 생성됩니다.

  • shuffle: 데이터를 섞을지 여부를 지정합니다. 기본값은 True로 설정되어 있습니다.

  • stratify=y: 원본의 class별 비율과 동일한 비율로 나누어지도록 한다.

✅ train_test_split 함수는 주어진 데이터를 훈련 세트와 테스트 세트로 나누어 각각의 데이터와 레이블을 반환합니다.
반환된 데이터는 원래 데이터셋의 일부분으로, 훈련 데이터는 모델을 훈련하는 데 사용되고, 테스트 데이터는 모델을 평가하는 데 사용됩니다.

Random seed (random_state in train_test_split) :

  • numpy.random 모듈
  • random 값을 출력할 때 무작위로 값이 출력된다.
  • random seed 값을 정하면, 무작위로 나오는 값의 순서가 일정해진다.
  • seed 값 : 무작위로 나오는 값의 순서를 일정하게 해주기 위해 설정.

train_test_split에서 random_state(random seed) 설정의 의미 :

전체 데이터에서 train과 test 데이터로 무작위로 나누고 여러 모델에 학습하여 테스트할 때,
무작위로 데이터를 뽑아서 각기 다른 데이터 셋으로 모델들을 테스트하는 것은 각각의 모델들의 신뢰성과 연관이 없어지기 때문에
무작위로 뽑는 데이터 셋들을 random_state를 통해 모두가 일정하게 무작위로 뽑힌 데이터 셋을 사용하게 함으로써 예측 모델들의 평가의 신뢰성을 주기 위함이다.

혼동행렬 (Confusion Matrix), also '오차행렬'

  • 모델이 예측한 결과와 실제 정답간의 개수를 표로 제공
  • 분류의 평가 지표로 사용됩니다.
  • 분류 모델의 성능을 평가하기 위해 사용되는 행렬입니다. 이 행렬은 실제 클래스와 모델의 예측 결과를 비교하여 분류 모델의 성능을 분석하는 데 도움을 줍니다.


0개의 댓글