Intro.

Scikit-learn의 사용법에 익숙해지기 위하여 iris 품종 분류 Perceptron 실습을 통하여 공부한 내용입니다.

Source Code.

from sklearn import datasets
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.linear_model import Perceptron
from sklearn.metrics import accuracy_score
import numpy as np
import matplotlib.pyplot as plt

if __name__ == '__main__':
iris = datasets.load_iris() #iris에 대한 데이터를 불러온다.
print(iris)
X = iris.data # 0 : 꽃받침 길이 / 1 : 꽃받침 너비 / 2 : 꽃잎 길이 / 3 : 꽃잎 너비
y = iris.target #출력해보면 0,1,2로만 출력이 되는데 iris_setosa, iris-versicolor, iris_verginica에 해당하는 값으로 이미 숫자로 바꾸어 져있음.
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=0) #random_state : random_seed값을 줌으로써 train/test split이 고정됨, test_size 값을 통해 학습데이터와 테스트 데이터 비율을 나눔


sc = StandardScaler() #스케일링 : 전체 자료의 분포를 평균 0 표준편차 1이 되도록 변환
sc.fit(X_train) #X_train의 평균과 표준편차를 구한다.
X_train_std = sc.transform(X_train) #학습용 데이터를 입력으로 하여 transform 실행시 학습용 데이터를 표준화한다.
X_test_std = sc.transform(X_test) #마찬가지로 테스트 데이터 표준화

ml = Perceptron(n_iter_no_change=40, eta0=0.1, random_state=0)#eta0 : learning rate, n_iter : epochs over data
ml.fit(X_train_std, y_train)
y_pred = ml.predict(X_test_std)
print("총 테스트 개수:%d, 오류개수:%d" %(len(y_test), (y_test != y_pred).sum()))
print("정확도: %.2f" %accuracy_score(y_test, y_pred)) #accuracy_score() : y_test y_pred를 비교하여 정확도를 계산해줌
#iris의 모든 데이터를 X로 두고 사용했을 때 93%의 정확도 (test_size = 0.3) // (test_size = 0.2 , acc = 1.00(..? overfitting?) test size 0.1, acc = 0.93)
#iris 2,3 정보만 사용했을 때 91%(test_size = 0.3)
#test_size = 0.2 일 때를 왜 1.00이 나오는지 분석해보자

Result.

 

http://blog.naver.com/PostView.nhn?blogId=samsjang&logNo=220965998073&parentCategoryNo=&categoryNo=&viewDate=&isShowPopularPosts=false&from=postView 옥수별 님의 블로그 외 scikit-learn document를  참고하여 공부하였습니다.

module과 parameter 같은 경우 scikit-learn 버전이 바뀌면서 예전 자료 공부시 에러가 발생했습니다.

특히 from sklearn.model_selection import train_test_split, 부분과 Perceptron의 parameter 인n_iter_no_change 같은 경우 sklearn.model_selection으로 고치기 이전에 기존에는 sklearn.cross_validation 이었으나 그대로 작성 시 오류가 발생함을 확인하였습니다. 찾아보니 train_test_split이라는 함수가 model_selection의 하위로 들어갔다고 합니다.

또 기존 코드에서는 Perceptron 부분에서 n_iter와 같이 사용되는데, scikit-learn document를 보면 n_iter가 없는 것을 볼 수 있습니다. 본인의 버전에 맞는 document를 참고하는 것이 중요하다는 교훈도 다시 한 번 얻어갑니다 :)

 

'삼성전자 인턴' 카테고리의 다른 글

An introduction to machine learning with a scikit-learn  (0) 2019.09.30

+ Recent posts