코딩하는 타코야끼

[ML] 2-2강_머신러닝을 이용한 예측 본문

[T.I.L] : Today I Learned/Machine Learning

[ML] 2-2강_머신러닝을 이용한 예측

가스오부시 2023. 5. 28. 02:35
728x90
반응형

1. ML을 이용한 예측


📍 문제 정의

  • 내가 발견한 Iris 꽃받침(Sepal)의 길이(length)와 (width)이 각각 5cm, 3.5cm이고 꽃의 꽃잎(Petal)의 길이와 폭은 각각 1.4cm, 0.25cm이 이었다. 이 꽃는 Iris의 무슨 종일까?

🌓   규칙기반으로 찾아보기

  • 꽃받침(Sepal)의 길이(length): 5cm, 폭(width): 3.5cm
  • 꽃잎(Petal) 의 길이(length): 1.4cm, 폭(width): 0.25cm
df[(df['sepal length (cm)'] == 5) & (df['sepal width (cm)'] == 3.5)] # 규칙기반 알고리즘


📍 머신러닝 적용

🌓  머신러닝으로 우리가 하려는 것

  • 프로그래머가 직접 규칙(패턴)을 만드는 대신 컴퓨터가 데이터를 학습하여 규칙을 자동으로 만들도록 하는 것.

🌓  결정 트리(Decision Tree) 알고리즘을 이용한 분류

  • 결정 트리 알고리즘 개요
    • 독립 변수의 조건에 따라 종속 변수를 분리
    • 결정 트리는 스무고개 느낌이다. // 제일 중요한 것 부터 질문 한다.
    • 질문하고 나면 그 다음으로 중요한 질문을 한다. 그 이유는 최대한 알맞게 분류하기 위해서다.


📍 결정트리 모델을 이용해 머신러닝 구현

🌓 구현 순서

  1. import 모델
  2. 모델 생성
  3. 모델 학습시키기
  4. 예측

🌓  1. import 모델

from sklearn.tree import DecisionTreeClassifier

🌓  2. 모델생성

  • DecisionTreeClassifier()
# 모델 객체 생성
tree = DecisionTreeClassifier(random_state = 0) # random_state = 0 : random value의 seed 값 설정.

🌓  3. 모델 학습 시키기

  • tree.fit()
    • 우리가 가진 데이터셋에 맞는 n을 찾는 작업.
    • 학습을 통해서 찾아여 하는 n => Parameter 라고 한다.
    • 입력데이터(Features): X, 출력데이터(Label) : y
    • tree(iris.data, iris.target)
X = iris.data
Y = iris.target
tree.fit(X, Y)

🌓  4. 예측

  • 내가 본 iris 꽃의 꽃잎/꽃받침의 길이, 너비를 재서 종류를 예측한다.
  • 꽃받침(Sepal)의 길이(length): 5cm, 폭(width): 3.5cm 꽃잎(Petal) 의 길이(length): 1.4cm, 폭(width): 0.25cm

 

  • 4-1. 우리가 추론 할 데이터셋 배열 구현
    • np.array([ ])
    • ( 2, 4 )는 ( 내가 추론할 데이터의 개수, 그 데이터 원소 개수 )를 의미한다.
import numpy as np
new_X = np.array([[5.0, 3.5, 1.4, 0.25],[3.2, 1.5, 6.4, 3.25]])
new_X.shape  # 우리가 추론할 데이터셋. (데이터개수, 데이터 shape)
  • 4-2. 추론을 추출
    • tree.predict()
# 추론할 꽃의 정보(Feature들)을 넣어 모델의 predict()메소드를 호출, 추론 결과 클래스를 반환
pred_X = tree.predict(new_X)
print(pred_X) # label의 class가 반환
print(iris.target_names[pred_X]) # class 이름이 뭔지 찾는 과정
>>>
[0 2]
['setosa' 'virginica']
  • 4-3. 확률을 추출
    • tree.predict_proba() : 모델이 추론한 class 별 확률을 반환.
    • [1. 0. 0.] => class 0일 확률: 1.0(100%) // class 1일 확률: 0.0 // class 2일 확률: 0.0
proba_X = tree.predict_proba(new_X)
print(proba_X)
>>>
[[1. 0. 0.]
 [0. 0. 1.]]

 

반응형