Menu
CoddyTech

여러 클래스

Coddy Machine Learning 여정의 지도 학습 섹션에 포함된 레슨. 58개 중 19번째.

레몬일까요, 라임일까요, 오렌지일까요? 로지스틱 회귀는 세 개의 클래스도 처리합니다. 여기 새 과일 하나가 레몬과 오렌지 사이에 놓입니다:

왼쪽: 지름과 무게로 나타낸 과일 45개. 작은 라임, 가운데 레몬, 큰 오렌지와 레몬과 오렌지 사이에 있는 새 과일을 나타내는 검은색 별. 오른쪽: 막대로 나타낸 새 과일의 확률. 레몬 0.61, 라임 0.00, 오렌지 0.39

model = LogisticRegression(max_iter=1000)
model.fit(X, kind)  # X: 지름, 무게; kind: 레몬, 라임 또는 오렌지
print(model.classes_)
print(np.round(model.predict_proba([[6.7, 144]]), 2))
print(model.predict([[6.7, 144]]))

다음과 같이 출력됩니다:

['lemon' 'lime' 'orange']
[[0.61 0.   0.39]]
['lemon']

각 행에는 classes_ 순서대로 각 클래스에 해당하는 확률이 하나씩 들어 있으며, 이 확률들의 합은 1입니다. predict는 가장 큰 값을 선택합니다.

따라서 모델은 얼마나 확신하는지 알려줍니다. 레몬일 확률이 61%라면 애매한 결과이므로 다시 살펴볼 가치가 있습니다.

challenge icon

챌린지

중급

팟캐스트 앱은 새 에피소드를 코미디, 뉴스 또는 범죄 실화로 분류합니다. 시작 코드는 episodes.csv의 데이터(길이, 화자 수, 분당 웃음 횟수)에 LogisticRegression을 학습시키고, 새 에피소드를 한 행짜리 표인 episode로 읽어옵니다.

describe(episode)를 완성하세요.

  1. model.classes_의 순서대로 각 프로그램 유형의 확률을 정수 퍼센트로 출력하세요.
  2. 가장 가능성이 높은 유형을 반환하세요.

다른 앱의 에피소드는 다음과 같습니다.

comedy: 12%
news: 70%
true crime: 18%
Best guess: news

직접 해보기

import pandas as pd
from sklearn.linear_model import LogisticRegression

episodes = pd.read_csv("episodes.csv")
features = ["length_min", "speakers", "laughs_per_min"]
model = LogisticRegression(max_iter=1000)
model.fit(episodes[features], episodes["show_type"])


# 한 에피소드에 대해 각 프로그램 유형의 확률을 출력한 다음(한 행짜리 표), 가장 가능성이 높은 유형을 반환합니다
def describe(episode):
    # 여기에 코드를 작성하세요
    return "unknown"


# 아래 줄은 변경하지 마세요: 입력으로 받은 새 에피소드입니다
length = float(input())
speakers = int(input())
laughs = float(input())
episode = pd.DataFrame({"length_min": [length], "speakers": [speakers], "laughs_per_min": [laughs]})
best = describe(episode)
print(f"Best guess: {best}")
quiz icon실력 점검

이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.

지도 학습의 모든 레슨

직접 연습해 보세요: 온라인 Python 컴파일러