멋쟁이 사자처럼 AI 스쿨 TIL-26

김영민·2022년 11월 1일
0

왜 Survived 컬럼은 train 에만 있을까요?
-> 예측해야하는 대상

왜 당뇨병 데이터셋에 비해 타이타닉 데이터셋이 더 난이도가 있는 데이터 일까요?
-> 전처리할 데이터가 많다?

  • 결측치, 문자, 당뇨병데이터에 비해 크기도 좀 더 크기 때문에

정리

정규화 => 숫자 스케일의 차이가 클 때 값을 정규분포로 만들어 주거나 스케일 값을 변경해 주는 것
이상치 => 이상치를 제거하거나 대체
대체 => 결측치를 다른 값으로 대체
인코딩 => 호칭, 탑승지의 위치, 문자 데이터를 수치화, 너무 범위가 큰 수치 데이터를 구간화 해서 인코딩 할 수도 있습니다.

Accuray => (실제값 == 예측값) => 평균(올바르게 예측한 샘플 개수 / 전체 샘플 개수)

머신러닝을 하기 전에 중요한 데이터는 수치데이터로 변환

왜 수치데이터만 가져왔나 ?
=> 머신러닝 내부에서 연산을 할 수 없기 때문에

train.select_dtypes(include="number").columns
  • binary encoding => 성별은 중요한 역할을 하는데 문자로 되어있으면 머신러닝 내부에서 연산을 할 수 없기 때문에

  • 수치 데이터로 변환하는 인코딩 작업을 수행

train["Gender"] = train["Sex"] == "female"
test["Gender"] = test["Sex"] == "female"
  • 각각의 데이터가 제대로 인코딩이 되어는지 확인해 보기 위해서
display(train["Gender"])
display(test["Gender"])

머신러닝 시작하기 전 결측치 채우기
=> 결측치는 의미있는 값을 채우면 더 좋지만, 일단 모델을 실행했을 때 오류가 나지 않도록 0으로 우선 채움

머신러닝 알고리즘 가져오기

DecisionTreeClassifier()

주요 파라미터

  • criterion: 가지의 분할의 품질을 측정하는 기능입니다.
  • max_depth: 트리의 최대 깊이입니다.
  • min_samples_split:내부 노드를 분할하는 데 필요한 최소 샘플 수입니다.
  • min_samples_leaf: 리프 노드에 있어야 하는 최소 샘플 수입니다.
  • max_leaf_nodes: 리프 노드 숫자의 제한치입니다.
  • random_state: 추정기의 무작위성을 제어합니다. 실행했을 때 같은 결과가 나오도록 합니다.

피처엔지니어링

  • 피처엔지니어링도 많이 할수록 꼭 점수가 오른다는 보장은 없다.
  • 오히려 피처엔지니어링을 많이 했을 때 점수가 더 낮아질 수 있다.
  • 피처엔지니어링을 제대로 도메인지식, EDA를 통해서 생존여부에 중요한 역할을 하는 변수를 찾아서 전처리 해주면 성능이 더 나아질 수 있다.

캐글은 하루에 10번만 제출할 수 있어요. 왜 그럴까요?
-> 서버무리, 점수조작, 찍어 맞출 수도 있겠죠. 어뷰징 때문에 API등 도 제공하고 있기 때문에 너무 많이 제출하면 어뷰징(잘못된 사용)
-> 캐글에는 상금걸거나 채용을 걸거나 상을 걸고 하는 대회에 어뷰징이 있을 수 있기 때문입니다. 그래서 하루 제출 횟수를 제한합니다. 한국 데이콘도 마찬가지입니다.

로그 그래프에서 이진로그, 자연로그, 상용로그의 공통점?
-> x가 1일 때 y는 0이다.
-> x 는 0보다 큰 값을 갖는다.
-> x가 1보다 작을 때 y값이 마이너스 무한대로 수렴한다.

  • 엔트로피 - 불확실성이 높을 때
 -((1/2)*np.log2(1/2) + (1/2)*np.log2(1/2))

-> 1.0

  • 엔트로피 - 확실하게 구분이 될 때, 불확실성이 낮음
 -((2/2) * np.log2(2/2))

-> 0.0

클래스가 많은 예시
-> 클래스를 예측할 때 True, False로 예측하기도 하지만 멀티클래스 일 때는 특정 클래스의 확률을 예측하기도 합니다. 그래서 예시의 측정공식은 logloss 라는 공식을 사용합니다. 엔트로피와 비슷하지만 다릅니다.

엔트로피를 검색해 보면 종류가 다양합니다. 그 중에서 디시전트리에서 사용하는 엔트로피는 섀넌 엔트로피인데 여기에서 이진로그를 사용

지니불순도와 엔트로피를 사용하는 목적?
-> 분류를 했을 때 True, False 로 완전히 나뉘지 않는데 이 때 값이 얼마나 섞여있는지 수치로 확인하기 위해서이고, 0에 가까울 수록 다른 값이 섞여있지 않은 상태입니다. 분류의 분할에 대한 품질을 평가하고 싶을 때 사용합니다.

지니계수와 앤트로피 구분 예시
-> 콩과 팥을 분류하는데 콩 분류집단에 팥이 얼마나 들어가있는지, 팥 분류집단에 콩이 얼마나 들어가있는지 그 지표를 수치화한게 지니계수, 앤트로피로 나타낸다 라고 이해하시고 넘어가셔도 크게 문제될 건 없습니다.
출처 : 멋쟁이사자처럼 박규호 클래스매니저님

Q 프로젝트 등을 할 때 지니불순도 등을 참고하게 되나요? => A 캐글이나 데이콘 등에 제출하기 전에 시각화를 해보고 그 모델이 얼마나 잘 나뉘었는지 여러가지로 평가해 볼 수 있는데 이 때 함께 참고해 볼 수 있을거 같아요. 이 때 함께 참고해 볼 수 있는 것은 피처 중요도, 교차검증(cross validation) 값 등을 참고해 볼 수 있겠습니다.

test 에 있는 데이터의 행은 삭제를 하면 안 됩니다.
=> 삭제를 하면 예측해야 하는 문제인데 예측을 못 하기 때문에
=> 경진대회 데이터이면 제출해야 하는 값이 부족하기 때문에 제출 했을 때 오류가 발생합니다

profile
배운걸 다 흡수하는 제로민

0개의 댓글