TIL(24.12.09)

채채·2024년 12월 9일

Today I Learned

목록 보기
27/75

머신러닝이란

  • 머신러닝(기계학습)은 컴퓨터가 데이터를 보고 스스로 학습해서 규칙이나 패턴을 찾아내는 기술.

  • 사람이 일일이 규칙을 프로그래밍하지 않아도,
    컴퓨터가 데이터를 이용해 스스로 규칙을 찾고, 새로운 데이터를 기반으로 예측하거나 결정을 내릴 수 있음.

  • 데이터분석과의 차이 ?
    데이터분석은 과거를 설명, 머신러닝은 미래를 예측

'학습'이란 ,
학습은 컴퓨터가 데이터를 분석해 규칙, 패턴, 또는 모델을 만들어내는 과정을 뜻함.

머신러닝의 종류

  • 지도학습
  • 비지도학습
  • 앙상블
  • 강화학습

1. 지도학습

x와 y간의 규칙찾기 지도학습으로 문제와 답을 모두 가지고 학습함.
답의 종류는 두가지가 있음.

  • 선형회귀 : 연속성(수치형)
  • 분류 : 문자 또는 범주형

비지도학습

답이 없는 데이터를 가지고 학습함.
분류작업(클러스터링)
답찾기 아니고 데이터정리의 개념.
복잡한 데이터를 차원축소하여 간결하게 표현.

비지도학습의 클러스터링와 지도학습의 분류의 다른점

  • 비지도학습 : 답이 없는 데이터 학습
  • 지도학습 : 답이 있는 데이터 학습

앙상블학습

여러개의 머신러닝 모델을 결합하여 하나의 강력한 모델을 만드는 것

강화학습

경험을 통해 좋은 결과가 있으면 보상.
더 나은 방법을 찾는 방법
로봇제어나 장기, 바둑


데이터마이닝이란

데이터로부터 패턴이나 규칙을 찾아 실무에 적용할 수 있는 insight를 발견하는 방법론.

데이터마이닝 process

  1. 데이터준비
  2. 데이터 전처리
  3. 데이터학습 (모델)
  4. 모델 평가


1. 데이터 준비 및 가공

  1. target(y)와 feature(x)로 나누어서 가공함.

  2. feature selection (필요한 특질만 골라서 선택함)

  3. missing value (결측치 처리)

    • 결측치확인, .sum을 통해 어떤 컬럼에 결측치가 몇개있나 확인
    • df.dropna() #결측값 제거
  4. outlier (이상치 처리)

  5. 컴퓨터가 문자를 이해할 수 없기에, 문자는 숫자로 변환

  6. y값 확인(골드멤버 컬럼에 어떤 값이 몇개 있는지 확인)
    df['gold_member'].value_count()
    df['target'] = df['gold_member'].replace({'vip':1,'normal':2})
    #숫자로 변환

  7. x데이터 숫자로 바꿔주기
    x = pd.get_dummies(df.drop(columns=['target','gold_member'))
    -> one-hot encoding
    -> get_dummies로 컬럼을 모두 숫자로 바꿈.
    x에 필요없는 y값은 drop

  8. 목표변수와 설명변수를 분류 -> 학습할 자료 세팅
    y = df['target']



2. 데이터 전처리(분할)

(원래는 스케일링, 매개변수 튜닝등이 들어가야 하지만 일단은 간단하게 진행)

사이킷런 중 train_test_split을 불러옴(데이터 분할)
보통 일반적으로 train(70%) test(30%)로 나눔

from sklearn.model_selection import train_test_split
x_train, x_test, y_train, y_test = train_test_split(x,y, test_size=0.3, random_state=2020)

이후 데이터의 구조가 일치하는지 꼭 확인할 것

print(x_train.shape)
print(x_test.shape)
print(y_train.shape)
print(y_test.shape)



3. 학습

model을 트리알고리즘을 돌리고, 핏을 맞춰서 수식 도출->예측모델을 만듦

model = DecisionTreeClassifier()
model.fit(x_train, y_train)



4. 평가

  • 알고리즘 학습을 얼마나 잘 시켰는가?
  • 새로운 데이터를 얼마나 잘 예측할 수 있는가?-> 얼마나 좋은 성능을 내는가?

두 이유로 train데이터와 test데이터 모두 평가를 돌려봐야 함

y_train_pred = model.predict(x_train)
y_test_pred = model.predict(x_test)

print(classrication_report(y_train, y_train_pred)
print(classrication_report(y_test, y_test_pred)
  • 학습은 잘 되지만 일반화가 잘 안되는 경우가 많음.
  1. 학습데이터가 잘 못 되어있을 수 있음. 필요한 feature 선정이 중요
  2. 알고리즘 선택이 잘 못 되었을 수 있음.

학습데이터가 잘 못 되어있을 경우

  • feature 선택 시 숫자나 문자(ex) 연령 : 20~100, 남성 : 1,0) 등 변수의 스케일이 다름 -> 스케일링을 통해 처리 함.
  • 해당 데이터에선 vip와 normal의 수가 많이 차이 났었는데, (90명 : 6000명) 이런 경우, 랜덤으로 뽑은 학습데이터에 vip가 안들어갈 수도 있음.

알고리즘 선택이 잘 못 되어있었을 경우

  • 알고리즘(학습방법)을 데이터에 맞게 바꿔주어야 함.
    -> hyperparameter tunning
profile
화이팅

0개의 댓글