[2023.12.18] What is Machine Learning

하은·2023년 12월 18일
0

- 머신러닝이란?

  • 머신러닝은 명시적으로 프로그래밍하지 않고도 컴퓨터에 학습할 수 있는 능력을 부여하는 학문
    = 머신이, 명시적인 프로그램에 의해서가 아니라, 주어진 데이터를 통해 규칙을 찾는 것
  • (과거 데이터로부터 얻은) 경험이 쌓여감에 따라 주어진 태스크의 성능이 점점 좋아질 때 컴퓨터 프로그램은 경험으로부터 학습한다고 할 수 있음

- 흔히 말하는 머신러닝(딥러닝)의 역사

  • 아더 사뮤엘
    : 처음으로 머신러닝이라는 용어 사용
    : 체커 게임(1959) - 스스로 학습하는
    다양한 파트의 사람들이 자신의 파트에 인공지능을 접목하고자

  • IBM 딥블루
    : 세계 체스 챔피언에게 승리(1997)

  • DEEPMIND 알파고
    : 이세돌에게 4:1 승리(2016)

  • 로젠블롯의 퍼셉트론(1962)
    : 최초의 인공신경망

- 직접 (머신) 휴먼러닝을 해봅시다

  • 머신러닝이 어떤 것인지, 어떤 절차를 수행하는 것인지 알기 위해

- Iris Classification

  • 아이리스(프랑스의 국화) 분류문제
    = versicolor / virqinica / setosa
    = 꽃잎(petal), 꽃받침(sepal)의 길이와 너비정보를 이용해 3종의 품종을 구분할 수 있을까?

- 데이터관찰(python)

  • 불러오기
from sklearn.datasets. import load_iris

iris = load_iris()
  • 뭐가있나?
iris
iris.keys()
print(iris["DESCR"]
(사이킷런으로 받아온 데이터에는 설명이 포함돼있음)

print(iris["target_names"])
...

- 상황파악(머신러닝말고 우리 눈으로)

  • 먼저 구분을 위해 iris의 3개 품종의 특성을 먼저 공부해야한다.

- pandas

  • 데이터를 바로 딥러닝에 적용하거나, sklearn 을 이용한 머신러닝에 적용할 때 꼭 필요한 건 아님
  • 데이터를 정리해서 관찰할 때는 아주 유용한 도구가 pandas
  • 미국식 농담으로 pandas = 스테로이드 맞은 엑셀

- DataFrame으로 만들기

iris_pd = pd.DataFrame(iris.data, columns=iris("feature_names")
iris_pd

- 품종 정보도 column에 포함

iris_pd["species"] = iris.target
iris_pd.head()

- 일단 그래프 그리는 모듈 import

import seaborn as sns
import matplotlib.pyplot as plt

- sepal length(cm)와 species의 관계 -> boxpolt

plt.figure(figsize=(12, 6))
sns.boxplot(x='sepal length (cm)',  y='species', data=iris.pd, orient='h');


= 3개가 다 겹치는 부분이 있고, 버지니카 중 하나다 예외값을 가짐

- petal length(cm)와 species의 관계 -> boxpolt

plt.figure(figsize=(12, 6))
sns.boxplot(x='sepal length (cm)',  y='species', data=iris.pd, orient='h');


= setosa 는 petal이라는 특성을 통해 명확히 구분 가능

- pairplot = 전체보기

sns.pairplot(iris_pd, hue='species')

- 품종 세개를 구분할 수 있을까?

  • petal length로는 setosa 는 가능하다.
    대략 2.5보다 작으면 다 setosa로 구분가능

  • 몇개의 대이터는 놓치지만 petal width가 1.6정도에서 자르면
    -> versicolor = length > 2.5, width < 1.6
    -> verginica = length > 2.5, width > 1.6

  • 이 내용을 질문(조건문)으로 순차적으로 표현
    = Decision Tree라는 알고리즘

- 결과가 정확하냐는 질문에 답하기 위해 알고리즘이 등장

  • 현재 상황에서는 이것이 최선이라는 근거
    가로선이 어디있는게 최선인지 확인해보기
  • 다양한 방향으로 진행했을 때의 각각의 차이점에 대한 정량적 수치 제시

Decision Tree

  • 조건을 따라 흘러가는 모양새가 직관적으로 알기 좋음
  • 스킬 발휘 유무에 큰 차이가 없음
    간결하게 설명가능
  • 머신러닝 알고리즘 중 딥러닝과 머신러닝 중 머신러닝을 선택했다면, 앙상블 계열의 알고리즘의 기본이 decision tree

- 데이터 변경

iris_pd['species']
==> 0, 1, 2가 나옴

iris_pd['species'] == 0
==> T, F로 나옴

iris_pd['species'] ! = 0
==> F, T로 나옴

iris_pd[iris_pd['species'] ! = 0]
==> F 를 다 빼버림 = IRIS 1, 2

- 학습을 위해 두개의 데이터에 집중해보자

  • 오직 직선으로 나눠야함(수평 혹은 수직)
  • 선이 어디있어야 오차가 적을지 고민해야함

= Decision Tree의 분할기준(split criterion)

- 정보획득

  • 정보의 가치를 반환하는데 발생하는 사전의 확률이 작을수록 정보의 가치는 커진다(=확률적 희소성)
  • 정보 이득이란 어떤 속성을 선택함으로써 데이터를 더 잘 구분하게 되는 것

- 엔트로피 개념

  • 열역학의 용어로 물질의 열적 상태가 점점 차가운 곳으로 진행
    = 확률분포(정보)의 무질서나 불확실성을 수치적으로 나타냄.
    = 확률들의 합
    = 엔트로피가 낮으면 질서 있는 상태, 높으면 무질서한 상태

-p \log_{2}(p)

  • 엔드토피는 이 확률들의 합이다
import numpy as np

p=np.arange(0.001, 1, 0.001)
plt.grid()
plt.title('$-p \log_{2}(p)$')
plt.plot(p, -p*np.log2(p));

- 엔트로피 연습

(두개로 나눠진 것 중 하나를 고를 확률 * (-pi(빨간공 개수) * log2 * pi(파란공개수)) 
+ (반대편도 똑같이)

- 지니계수

  • 불순도율을 나타냄
  • 엔트로피의 계산량이 많아서 비슷한 개념이면서 보다 계산량 적은 지니계수를 사용하는 경우가 많음
예)
1- (6/16)**2 - (10/16)**2

= 분할 했을 때 지니계수가 낮을 수록, 분할하는 것이 좋다

- 어떻게 가르는 게 좋은가?

아래서부터 올라오면서 지니계수 계산을 계속함
요즘엔 코딩된게 있어서 frame work로 다들 공유함


0개의 댓글