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.)