이번 예제에서는 전복 데이터셋 파일을 가지고 진행한다. 데이터 파일은 두개로 abalone.txt는 전복 데이터를abalone_attributes는 features 데이터를 가지고 있다. 전복의 성별을 구별하는 것을 목표로 모델을 만들고 accuracy를 평가해보자.
△ 대략적인 파일 구성
파일 임포트
import os
from os.path import join
abalone_path = join('.','abalone.txt') # 현재 위치, 파일이름
column_path = join('.','abalone_attributes.txt')
abalone_columns = list()
for l in open(column_path):
abalone_columns.append(l.strip())
데이터 프레임 형태로 바꿔주기
data = pd.read_csv(abalone_path, header=None, names=abalone_columns) # pd 데이터 프레임 형태로 가져오기
data.head()
출력>
미성숙한 전복 데이터 제거, 성별을 숫자형태로 encoding하고 성별 feature을 삭제해버린다.
data = data[data['Sex'] != 'I']
label = data['Sex'].map(lambda x: 0 if x =='M' else 1) #lamda식으로 x의 값 기본 0, x가 M이면 넘어가고 아니면 1로 줘라
del data['Sex']
from sklearn.tree import export_graphviz # 트리의 구조 출력
export_graphviz(dt, out_file='tree.dot') # (model, out_file)을 써준다. model은 방금 우리가 학습시킨 모델 dt.fit을 넣고 파일을 'tree.dot'으로 저장한다.
파일 저장
from subprocess import call # dot 파일을 그림으로 그려 저장
call(['dot','-Tpng','tree.dot','-o', 'decistion-tree.png','-Gdpi=600']) # 파일저장: 포멧: dot, 선이 선명하게 나오는 png파일로 열기: Tpng(투명한 png), 그려줄 파일명 : tree.dot,저장할 이름 : decistion-tree.png, 그래픽해상도: '-Gdpi=600', 그리고 이제 잘 안먹히면 '-o'를 파일명 뒤에 붙여주면 된다.
그림으로 나타내주기
from IPython.display import Image
Image(filename = 'decistion-tree.png')
sklearn의 linear_model 안에 있는 LogisticRegression 임포트
from sklearn.linear_model import LogisticRegression
lr = LogisticRegression()
Training, 여기서 데이터 입혀 학습끝. 이제 lr이란 알고리즘을 데이터를 갖고 학습한 모델이 된 것이다.
lr.fit(X_train, y_train)
모델이 잘 학습되었나 확인
lr.predict(X_test)
y_pred = lr.predict(X_test)
# 결과 확인 (예측값과 실제값이 얼마나 일치하는지를 확인하여 모델의 정확도를 확인 가능 )
from sklearn.metrics import accuracy_score # accurency (정확도) 스코어 모듈 부르기
print('로지스틱 회귀 정확도: {:.2f}'.format(accuracy_score(y_test, y_pred) * 100)) # 1.0이면 100프로인데 예쁘게 보기 위에 뒤에 100곱해준다
print('로지스틱 회귀, 계수(w) : {0}\n절편(b): {1}'.format( # 우리가 4개의 regression 값을 사용하기 때문에 4개의 속성(각각의 특성)이 3가지 클래스마다 나오는 것이라 기울기가 총 12개 값이..
lr.coef_, lr.intercept_)) # 절편(b=bias)은 각각의 시작점을 나타낸다 , 클래스(라벨)이 세가지니까 세가지 값이 나온다.
계수와 절편?
y = wx + b에서 y는 예측치 x는 그래프 가로 w는 기울기(계수) b는 기본 시작값