EXPLORATION 2. Iris의 세 가지 품종 분류해보기
EXP 2. Iris의 세 가지 품종 분류해보기_220106
2.1 들어가며
2.1.1 학습목표
scikit-learn에 내장된 예제 데이터셋의 종류를 알고 활용할 수 있다.scikit-learn에 내장된 분류 모델들을 학습시키고 예측해 볼 수 있다.- 모델의 성능을 평가하는 지표의 종류에 대해 이해하고, 활용 및 확인해 볼 수 있다.
Decision Tree,XGBoost,RandomForest, 로지스틱 회귀 모델을 활용해서 간단하게 학습 및 예측해 볼 수 있다.- 데이터셋을 사용해서 스스로 분류 기초 실습을 진행할 수 있다.
2.1.2 학습 전제
scikit-learn을 활용해서 머신러닝을 시도해본 적이 없다.scikit-learn에 내장된 분류 모델을 활용해본 적이 없다.- 지도학습의 분류 실습을 해 본 적이 없다.
- 머신러닝 모델을 학습시켜보고, 그 성능을 평가해본 적이 없다.
2.2 Iris의 세 가지 품종 분류하기
2.2.1 붓꽃 분류 문제
품종이 다른 붓꽃 분류, 어떤 데이터로 할 건데?
2.2.2 데이터 준비, 그리고 자세히 보기
load_iris를 import 해서 iris 데이터 로딩
from sklearn.datasets import load_iris
iris = load_iris()
print(dir(iris)) # dir()는 객체가 어떤 변수와 메서드를 가지고 있는지 나열함
# key()를 이용해 iris 정보 확인
iris.keys()
# 데이터를 변수에 저장 후 데이터 크기 확인하기
iris_data = iris.data
print(iris_data.shape) #shape는 배열의 형상정보를 출력
# 샘플로 데이터 확인
iris_data[0]
머신러닝 모델이 출력해야 하는 정답을 라벨(label) 또는 타겟(target) 이라고 표현함.
붓꽃 데이터에서 타겟 정보는 다음과 같이 target 으로 볼 수 있음
iris_label = iris.target
print(iris_label.shape)
iris_label
# 총 150개의 데이터, 0,1,2로 나타나는 값이 뭘 나타내는 건지 확인
iris.target_names
print(iris.DESCR)
feature_names과 filename
iris.feature_names # 각 feature에 대한 설명 확인
iris.filename # 데이터셋의 전체 이름 확인
2.2.3 머신러닝 모델 학습을 위한 학습데이터와 테스트 데이터 만들기
iris의 데이터는 행과 열이 있는 2차원 데이터이므로 2차원 배열 데이터를 다루는데 많이 쓰이는 pandas 준비
import pandas as pd
print(pd.__version__)
iris_df = pd.DataFrame(data=iris_data, columns=iris.feature_names)
iris_df
iris_df["label"] = iris.target
iris_df
feature : 변수로는 x 머신러닝 모델에 입력하는 데이터
label or target : 변수로는 y 머신러닝 모델이 맞혀야 하는 데이터
train_test_split 함수로 데이터셋 분리 문제지 - 정답지
from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(iris_data, # 모델이 맞춰야하는 정답값, label
iris_label,
test_size=0.2, # test dataest의 크기 조절. 0.2는 전체의 20%를 정답지로
random_state=7) # 데이터를 분리하는데 적용되는 랜덤성
print('X_train 개수: ', len(X_train),', X_test 개수: ', len(X_test))
X_train.shape, y_train.shape
X_test.shape, y_test.shape
y_train, y_test
2.2.4 첫 번쨰 머신러닝 모델 학습시키기
from sklearn.tree import DecisionTreeClassifier
decision_tree = DecisionTreeClassifier(random_state=32)
print(decision_tree._estimator_type)
decision_tree.fit(X_train, y_train)
2.2.5 첫 번째 머신러닝 모델 평가하기
y_pred = decision_tree.predict(X_test)
y_pred
y_test
from sklearn.metrics import accuracy_score
accuracy = accuracy_score(y_test, y_pred)
accuracy
2.2.6 다른 모델도 학습-평가하기
# (1) 필요한 모듈 import
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.tree import DecisionTreeClassifier
from sklearn.metrics import classification_report
# (2) 데이터 준비
iris = load_iris()
iris_data = iris.data
iris_label = iris.target
# (3) train, test 데이터 분리
X_train, X_test, y_train, y_test = train_test_split(iris_data,
iris_label,
test_size=0.2,
random_state=7)
# (4) 모델 학습 및 예측
decision_tree = DecisionTreeClassifier(random_state=32)
decision_tree.fit(X_train, y_train)
y_pred = decision_tree.predict(X_test)
print(classification_report(y_test, y_pred))
랜덤 포레스트(RandomForest)
from sklearn.ensemble import RandomForestClassifier
X_train, X_test, y_train, y_test = train_test_split(iris_data,
iris_label,
test_size=0.2,
random_state=21)
random_forest = RandomForestClassifier(random_state=32)
random_forest.fit(X_train, y_train)
y_pred = random_forest.predict(X_test)
print(classification_report(y_test, y_pred))
svm
from sklearn import svm
svm_model = svm.SVC()
svm_model.fit(X_train, y_train)
y_pred = svm_model.predict(X_test)
print(classification_report(y_test, y_pred))
sgd
from sklearn.linear_model import SGDClassifier
sgd_model = SGDClassifier()
sgd_model.fit(X_train, y_train)
y_pred = sgd_model.predict(X_test)
print(classification_report(y_test, y_pred))
LogisticRegression
from sklearn.linear_model import LogisticRegression
logistic_model = LogisticRegression()
logistic_model.fit(X_train, y_train)
y_pred = logistic_model.predict(X_test)
print(classification_report(y_test, y_pred))
2.2.7 내 모델 평가하기, 정확도의 함정
from sklearn.datasets import load_digits
digits = load_digits()
digits.keys()
digits_data = digits.data
digits_data.shape
digits_data[0]
import matplotlib.pyplot as plt
%matplotlib inline
plt.imshow(digits.data[0].reshape(8, 8), cmap='gray')
plt.axis('off')
plt.show()
for i in range(10):
plt.subplot(2, 5, i+1)
plt.imshow(digits.data[i].reshape(8, 8), cmap='gray')
plt.axis('off')
plt.show()
digits_label = digits.target
print(digits_label.shape)
digits_label[:20]
new_label = [3 if i == 3 else 0 for i in digits_label]
new_label[:20]
from sklearn.metrics import accuracy_score
from sklearn.model_selection import train_test_split
from sklearn.tree import DecisionTreeClassifier
X_train, X_test, y_train, y_test = train_test_split(digits_data,
new_label,
test_size=0.2,
random_state=15)
decision_tree = DecisionTreeClassifier(random_state=15)
decision_tree.fit(X_train, y_train)
y_pred = decision_tree.predict(X_test)
accuracy = accuracy_score(y_test, y_pred)
accuracy
new_label = [3 if i == 3 else 0 for i in digits_label]
new_label[:20]
from sklearn.metrics import accuracy_score
from sklearn.model_selection import train_test_split
from sklearn.tree import DecisionTreeClassifier
X_train, X_test, y_train, y_test = train_test_split(digits_data,
new_label,
test_size=0.2,
random_state=15)
fake_pred = [0] * len(y_pred)
accuracy = accuracy_score(y_test, fake_pred)
accuracy
Author And Source
이 문제에 관하여(EXPLORATION 2. Iris의 세 가지 품종 분류해보기), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@helperjby/22.01.06저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)