인공지능 공부/머신러닝

2021-04-22 머신러닝 완벽가이드 iris 예측하기

from sklearn.tree import DecisionTreeClassifier
from sklearn.model_selection import train_test_split
import pandas as pd

#붓꽃 데이터 세트를 로딩하자
iris = load_iris()

#iris.data는 데이터 세트에서 피처(feature)만으로 된 데이터 numpy로 가지고 있다.
iris_data = iris.data

#iris.target은 붓꽃 데이터 세트에서 레이블 데이터를 numpy로 가지고 있습니다.
iris_label = iris.target

print('iris target 값 ', iris_label)
print('iris target 명' , iris.target_names)
iris 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]
iris target 명 ['setosa' 'versicolor' 'virginica']
#붓꽅 데이터 세트를 자세히 보기 위해 DataFrame으로 변환합니다.
iris_df = pd.DataFrame(data=iris_data, columns=iris.feature_names)
iris_df['label'] = iris.target
iris_df.head(3)
sepal length (cm)	sepal width (cm)	petal length (cm)	petal width (cm)	label
0	5.1	3.5	1.4	0.2	0
1	4.9	3.0	1.4	0.2	0
2	4.7	3.2	1.3	0.2	0
X_train, X_test, y_train, y_test = train_test_split(iris_data, iris_label, 
                                                    test_size = 0.2, random_state=11)

#1번째 iris_data세트 
#2번째는 레이블 데이터 세트
#3번째 파라미터는 테스트 사이즈의 크기
#4번째 random_state는 수행할 떄마다 동일한 데이터 세트로 분리하기 위해 일정한 값으로 부여한다
#숫자 자체는 어떤 값을 지정해도 상관없다

#학습용 피처데이터 세트를 X_train 으로 테스트용 피처데이트용으로 X_test
#학습용 레이블은 y_train , 학습용 테스트용 y_test로 반환합니다.

#DecisionTreeClassifiersms 사일런킷으 의사 결정 트리 클래스 객체를 생성한다. 
#fir()메서드에 학습용 피처데이터속성과 결정값 데이터 세트를 입력해 호출하며 학습을 수행합니다.
#DecisionTreeClassifier 객체를 생성하자
df_clf = DecisionTreeClassifier(random_state = 11)
df_clf.fit(X_train, y_train)
#학습을 수행함 피처데이터 세트와 학습용 결정 레이블 돌아감
DecisionTreeClassifier(random_state=11)
#학습완료! 
#학습이 완료된 DecisionTreeClassifier 객체에서 테스트 데이터 세트로 예측을 수행하자

pred = df_clf.predict(X_test)
#예측 성능평가해보자 
#평가방법은 많으나 예측결과가 얼마나 맞는지 평가하는 지표입니다. 
from sklearn.metrics import accuracy_score
#accuracy_score() 첫번쨰 파라미터로 실제 레이블 데이터 세트 두번째로 예측 레이블 세트를 입력하면 된다.

print('예측 정확도:{0:4f}'.format(accuracy_score(y_test, pred)))
예측 정확도:0.933333
#데이터 세트를 분리한다
#모델을 학습
#예측수행
#평가
#사이킷런은 분류(Classification)과 회귀(Regression)의 다양한 알고리즘을 구현함
# Classification + Regression = Estimator이라 부른다.
# fit()과 predict() 내부에서 구현한다. 

# cross_val_score()같운 evaluation함수 GridSearchCV.fit() 함수 내에서 이 Estimatordml fit()과 predict()를 
# 호출해서 평가 하거나 하이퍼 파라미터를 튜닝한다.