1-6 sklearn 라이브러리 업데이트 설치 및 Anaconda3 spyder3 파이선 3.5예제steemCreated with Sketch.

in #kr8 years ago (edited)

구글 TensorFlow 싸이트의 붓꽃 식별 예제가 아나콘다3의 spyder3에서 실행이 잘되는 것은 사실이지만 코딩 스타일이 대단히 진부하여 알아먹기가 곤란하다. 코드 작성한 사람 제외하고는 알아보기 힘든 코딩 스타일로 보인다. 이보다는 보다 이해하기 쉬운 scikit-learn을 사용하는 예제 코드를 실행하여 연습해 보자. 지난번 라이브러리 모듈 설치과정에서 빠졌던 항목이다. 물론 tensorflow 가 머신 러닝 분야에서 유명한건 사실이지만 scikit-learn 라이브러리 모듈도 비슷한 역할을 하는 것으로 보인다.

설치 절차는 시작 바에서 아나콘다 명령 창을 클릭하여 tensorflow를 활성화 시킨다. 이 상태에서 아래와 같이 pip install sklearn 명령을 실행하자. sklearn 이라는 명칭은 scikit-learn을 줄인 용어인 듯하다.

그림_01.png

sklearn 라이브러리 설치가 완료되었으면 아나콘다 명령 창에서 spyder3을 입력하여 편집기를 활성화 시키자.
스파이더3에서 File open 명령을 사용하면 아래의 디렉토리 구조를 볼 수 있다.
Ysc는 바탕화면에 있는 사용자 디렉토리이다. 이 안에 다운로드를 비롯한 친숙한 디렉토리들이 들어있다. 앞서의 설치 과정에 따라 .spyder-py3dl 생성되어 있음에 유의한다. 그 안에 spyder_ex 디렉토리를 새로 만들어서 사용자의 예제를 저장한다.

그림_02.png

그림_03.png

그림_04.png

sklearn 라이브러리 모듈을 사용하는 붓꽃 식별 코드를 다루어 보자. 이 문제를 풀기 위해서 pandas를 비롯 많은 갯수의 sklearn 라이브러리 모듈들을 위와 같이 불러들인다. 이 부분은 수정하지 말고 그대로 사용하기로 한다. 특히 후반부를 보면 linear regression을 비롯하여 SVM 모델까지 다룰 수 있음을 알 수 있다.

Iris .data를 인터넷 주소에서 다운 받아 변수명 dataset 으로 선언한다, 데이터 파일의 확장자는 .csv 로서 pandas 라이브러리 모듈이 csv 데이터를 읽도록 특화되어 있다.

그림_05.png

dataset.head(10) 의 출력은 첫 번째 즉 0번에서 열 번째 즉 9번까지의 데이터를 출력한다.

그림_06.png

dataset.describe()는 데이터 전체의 평균, 표준편차, 최대, 최소값을 포함하는 통계치를 계산하는 명령이다.

그림_07.png

dataset.groupby(‘class’).size()는 csv 데이타 파일의 ‘class’ 행 데이터를 대상으로 내용을 구분하여 샘플 수를 출력해준다.

그림_08.png

총 5행으로 구성되는 붓꽃 데이터는 각각 꽃받침의 길이와 폭, 꽃잎의 길이와 폭, 아울러 해당 꽃의 세부 종명으로 구성된다. 세부 종명이란 즉 붓꼿이 크기에 따라서 3가지 종이 있으며 그 이름이 다르다는 점이다.

그림_09.png

이 데이터를 여러 가지 목적으로 사용하기 위해서 다음과 같이 처리과정을 거치도록 한다. 꽃받침과 꽃잎 데이터는 X 어레이 꽃의 종명은 Y어레이로 둔다. validation_size는 머신 러닝 단계에서 학습용 데이터와 검증용 데이터로 나누는 비율을 뜻한다. Iris_dta 는 3개 종별로 각 50개씩 총 150 개로 이루어지므로 0.2는 총30개로서 각 종별 10개의 임의로 선택된 데이터를 뜻한다.

그림_10.png

seed =7 은 난수 생성을 위한 초기 값으로서 항상 동일한 결과를 주도록 한다. 이수를 바꾸면 결과도 변동된다.

그림_11.png

sklearn 라이브러리 모듈을 사용하여 모델별로 머신 러닝 실행을 준비하자. 이 부분의 명령이 상당히 길므로 인덴트한 결과를 참조하기 바란다.
X_train, X_validation, Y_train, Y_validation
= model_selection.train_test_split
(X, Y, test_size=validation_size, random_state=seed)
X_validation 과 Y_validation 은 150개의 데이터 중에서 임의로 추출된 샘플 데이터로서 각 모델별 식별 능력을 체크하기 위해 사용된다.

붓꽃의 세부적인 종을 구분하기 위하여 적용하는 머신 러닝 모델들이다. 이 모델들은 선형 모델과 비선형 모델 모두를 포함하고 있다.

그림_12.png

그림_13.png

앞 단계에서 준비된 데이터와 모델을 사용하여 코드를 실행하여 결과를 출력한다.

그림_14.png사용된 각각의 머신 러닝 모델들은 라이브러리 모듈이므로 사용자가 일일이 쪼개서 분석은 곤란하다. 앞에서부터 단계별로 기술되었듯이 데이터를 준비하여 사용하면 되리라 본다.

spyder_ex_01.py

#Load libraries
import pandas
from pandas.plotting import scatter_matrix
import matplotlib.pyplot as plt
from sklearn import model_selection
from sklearn.metrics import classification_report
from sklearn.metrics import confusion_matrix
from sklearn.metrics import accuracy_score
from sklearn.linear_model import LogisticRegression
from sklearn.tree import DecisionTreeClassifier
from sklearn.neighbors import KNeighborsClassifier
from sklearn.discriminant_analysis import LinearDiscriminantAnalysis
from sklearn.naive_bayes import GaussianNB
from sklearn.svm import SVC

#Load dataset
url = "https://archive.ics.uci.edu/ml/machine-learning-databases/iris/iris.data"
names = ['sepal-length', 'sepal-width', 'petal-length', 'petal-width', 'class']
dataset = pandas.read_csv(url, names=names)
print (dataset.head(10))
print (dataset.describe())
print(dataset.groupby('class').size())

#validation dataset
array = dataset.values
X = array[:,0:4]
Y = array[:,4]
validation_size = 0.2
seed = 7
X_train, X_validation, Y_train, Y_validation = model_selection.train_test_split(X, Y, test_size=validation_size, random_state=seed)
print(X_validation)
print(Y_validation)
scoring = 'accuracy'

models = []
models.append(('LR', LogisticRegression()))
models.append(('LDA', LinearDiscriminantAnalysis()))
models.append(('KNN', KNeighborsClassifier()))
models.append(('CART', DecisionTreeClassifier()))
models.append(('NB', GaussianNB()))
models.append(('SVM', SVC()))

results = []
names = []
for name, model in models:
kfold = model_selection.KFold(n_splits=10, random_state=seed)
cv_results = model_selection.cross_val_score(model, X_train, Y_train, cv=kfold, scoring=scoring)
results.append(cv_results)
names.append(name)
msg = "%s: %f (%f)" % (name, cv_results.mean(), cv_results.std())
print(msg)

#ENDING CODE

---이 블로그는 스팀잇에 새로이 가입한 회원들을 위하여 Reposting을 통해 재 노출 될 수도 있음을 양해 바랍니다.---

Coin Marketplace

STEEM 0.04
TRX 0.33
JST 0.098
BTC 64670.05
ETH 1868.19
USDT 1.00
SBD 0.38