파이썬 라이브러리를 활용한 머신러닝 1장 정리 2부 - 붓꽃의 품종 분류







문제 : 붓꽃의 품종분류

붓꽃의 꽃잎, 꽃받침의 각각의 폭과 길이 총 4가지 데이터를 통해서 setosa, versicolor,virginica 종을 분류하는 머신러닝 모델을 만들껍니다.(단 채집하는 붓꽃은 이 세 종류라고 가정합니다.) 붓꽃의 품종을 정확하게 분류한 데이터를 가지고 있으므로 이 문제는 지도학습입니다. 이 문제는 붓꽃의 종을 분류하는 문제이니 지도학습 종류 중 분류에 속합니다. 출력될 수 있는 값(붓꽃의 종류)들을 클래스(class)라고 합니다.. 데이터 포인트 하나(붓꽃 하나)에 대한 기대 출력은 꽃의 품종이 됩니다. 이런 특정 데이터 포인터에 대한 출력, 즉 품종을 레이블(label)이라고 합니다.

클래스(class)와 레이블(label)

위의 글을 읽었을 때, 클래스와 레이블에 대한 개념이 확 안 와닿을 수도 있을 겁니다. 그래서 간단한 예시를 들어보겠습니다. 지구상에 동물들이 10종류만 있다고 가정해봅시다. 동물 분류 프로그램을 만든다고 할 떄 만약 우리가 세 가지 동물들을 분류하고 싶으면 클래스가 3개이고, 네 가지 동물들을 분류하고 싶으면 클래스가 4개가 됩니다. 우리가 분류를 할 동물들이 예를 들어 고양이와 강아지라고 가정했을 때 고양이와 강아지를 레이블이라고 합니다. 지도학습시 학습 데이터가 필요하므로 그 학습데이터들에 대한 기대 출력을 레이블이라고 생각하시면 됩니다.

데이터 적재(load)

from sklearn.datasets import load_iris
iris_dataset = load_iris() # 붓꽃 데이터 적재(load)
scikit-learn의 datasets모듈에 포함된 load_iris함수를 사용해서 데이터를 load했습니다.

print("iris_dataset의 키: \n{}".format(iris_dataset.keys()))
iris_dataset의 키:
dict_keys(['target_names', 'feature_names', 'DESCR', 'data', 'target'])
load_iris는 딕셔너리 형태로 키와 값으로 구성되어있습니다. 위의 key들을 통해 우리는 각각의 값들을 알 수 있습니다.

DESCR

print(iris_dataset['DESCR'][:193]+"\n...") 
Iris Plants Database
====================

Notes
----
Data Set Characteristics:
:Number of Instances: 150 (50 in each of three classes)
:Number of Attributes: 4 numeric, predictive att
...
DESCR은 이 datasets에 대한 설명들이 적혀 있습니다.

target names

print("타깃의 이름: {}".format(iris_dataset['target_names']))
타깃의 이름: ['setosa' 'versicolor' 'virginica']
target_names에는 우리가 예측하려는 붓꽃의 품종의 이름이 있습니다.

feature_names

print("특성의 이름: \n{}".format(iris_dataset['feature_names']))
특성의 이름:
['sepal length (cm)', 'sepal width (cm)', 'petal length (cm)',
 'petal width (cm)']
feature_names에는 우리가 원하는 특성의 이름들이 있다.

data

print("data의 크기: {}".format(iris_dataset['data'].shape))
data의 크기: (150, 4)
붓꽃의 데이터는 총 150가지가 있습니다. 이 데이터의 내용은 아래와 같습니다.
data의 처음 다섯 행:
[[ 5.1  3.5  1.4  0.2]
 [ 4.9  3.   1.4  0.2]
 [ 4.7  3.2  1.3  0.2]
 [ 4.6  3.1  1.5  0.2]
 [ 5.   3.6  1.4  0.2]]
Target


print("target의 크기: {}".format(iris_dataset['target'].shape))
target의 크기: (150,)
print("타깃:\n{}".format(iris_dataset['target']))
타깃:
[0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2 2
 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
 2 2]
Target은 위와 같이 데이터가 있습니다. 숫자의 의미는 target_names에서 알 수 있습니다. 0은 setosa 1은 versicolor, 2는 virginica입니다.

훈련 데이터와 테스트 데이터

우리는 이 데이터들로 머신러닝 모델을 만들고 

댓글