머신러닝 분류 기법
1. 의사결정나무
2. 군집 분석
===========================================
1. 의사결정나무
===========================================
특징
- 입력데이터가 까다롭지 않음
- 직관적임
- 나무 그리는패키지 설치 필요함. graphviz 다운로드 하기.
- pydot 설치
- pydotplus 설치
- graphviz 설치 및 시스템 환경변수 편집 ( Graphviz2.38 위치를 환경변수 path에 추가. )
import os
os.environ["PATH"]+=os.pathsep + 'c:/Program Files (x86)/Graphviz2.38/bin/'
트리로 학습하는 코드
from sklearn import tree
X = X_train
y = y_train
dTree = tree.DecisionTreeClassifier()
dTreeModel = dTree.fit(X,y)
print( dTreeModel )
DecisionTreeClassifier( ccp_alpha = 0.0 , class_weight = None , criterion = 'gini' , max_depth = None , max_features = None , max_leaf_nodes = None , min_impurity_decrease = 0.0 , min_impurity_split = None , min_samples_leaf = 1, min_samples_split = 2 , min_weight_fraction_leaf = 0.0 , presort = 'deprecated' , random_state = None, splitter = 'best' )
from sklearn.tree import export_graphviz
import pydotplus
from IPython.display import Image
dot_data = export_praphviz( dTreeModel, out_file = None , feature_names = ['cum_precipitation', 'humidity', 'temp', 'wind'], class_names = ('Y', 'N'), filled = True , rounded = True , special_characters = True )
graph = pydotplus.graph_from_dot_data(dot_data)
Image( graph.create_png() )
불순도 gini
항상 불순도가 낮아지도록 분기하는게 의사결정나무 만드는 규칙임
의사결정나무 결과의 해석
나타나는 값은 4가지
- gini 불순도
- samples 데이터 갯수
- value = [ 20, 28 ] y 20개 n 28 개
- class = N 이면 ; 다수결로 현재로는 클래스가 N 라는 뜻
의사결정나무는
매 노드에서 불순도를 낮출 수 있는 가장 중요한 feature 와 기준값을 찾는다.
불순도가 0이 되거나,
미리 설정한 멈춤 기준에 해당하면 나무 생성을 중단한다.
리프 노드에 해당하는 분류 결과가 나온다.
dTreeModel.predict( X_test )
예측 결과를 얻는 코드
정확도 비교 코드
from sklearn.metrics import accuracy_score
y_pred = dTreeModel.predict( X_test )
print( 'Accuracy : %.2f' %accuracy_score( y_test, y_pred ) )
정확도를 알수있다.
좀더 다양한 관점에서 정확도를 보려면,
y_pred = dTreeModel.predict( X_test )
print( classification_report( y_test , y_pred ))
precision, recall, f1-score 값 확인 가능함.
여러 가지 기법으로 작업해 보고, 더 우수한 결과를 보이는 기법을 선택하면 된다.
의사결정나무는 과적합 우려가 있다. 학습 정확도는 훌륭한데 예측 정확도는 낮을 수 있다. 그리고 최적 모델 찾아주는건 아니다.
===========================================
지도 학습과 비지도 학습
===========================================
지도 학습
데이터 안에 정답이 있어서 (=종속변수)
입력값과 정답을 비교하면서
수식을 찾거나 확률을 찾는 방식으로
수치값을 예측하거나, 범주를 예측.
종속변수의 관측값, 이력데이터가 있어서
독립변수와의 관계를 찾아볼 수 있다.
비지도 학습
군집 분석 등.
===========================================
군집 분석: K-means Clustering
===========================================
비지도학습:
답이 존재하지 않는 데이터!
K-means Clustering
고객 세분화, 상권 세분화 등에 사용된다.
유사함의 정의가 필요.
어떤 값을 기준으로 비슷하다고 할지 feature 값을 정하는게 중요함
몇 개의 그룹으로 나눠야 하는지 값을 정해줘야한다.
유사함의 정의로 자주 사용되는 것은 거리.
- 물리적 거리
- 추상적 거리
수치형 데이터로 표현할 수 있는 항목으로 거리 계산 가능함.
Normalization
특정 데이터 항목이 편차, 단위 차이가 너무 크면 , 이 항목이 가장 중요한 기준으로 선택되어버린다.
예를 들어, 동물들의 키 차이는 동물들의 뇌의 무게 차이보다 단위가 더커서, 동물들 비교할 때 더 눈에 띄는 차이로 보여진다.
그런데, 뇌의 무게 차이가 키 차이보다 더 중요하고 직접적인 원인일 수도 있다.
그래서 표준화처리 필요함
패키지 sklearn의 processing 모듈 사용.
from sklearn.processing import MinMaxScaler
import pandas as pd
import numpy as np
MinMaxScaler 사용 실습
weather = pd.read_csv( 'data/weather.csv' )
X = np.array( weather.humidity ).reshape( -1 , 1 )
scaler = MinMaxScaler()
X_scaled = scaler.fit_transform( X )
print( X_scaled )
MinMaxScaler는 humidity 의 최대값을 1로 두고, 최소값은 0으로 두고
나머지는 0에서 1사이의 상대적인 비율로 변환한다.
그래서 절대값 경중의 문제를 극복할 수 있다.
지역, 일, 시간대 별 횟수 집계 하는 코드
n_data = pd.pivot_table( data , index = [ 'Region' , 'Date' , 'Time' ] , values = 'Distance' , aggfunc = len )
n_data = data.reset_index()
n_data.rename( columns = { 'Distance' : 'Count' } , inplace = True )
print( n_data )
이렇게 만든 데이터를 다시 처리
n_data2 = pd.pivot_table( n_data , index = 'Region' , columns = 'Time_out' , values = 'Count' , aggfunc = np.mean )
n_data2 = n_data2.reset_index()
print( n_data2 )
이 실습에서 이 결과로 만들어진 데이터는
행: 지역별
열: 시간대별
값: 평균 대여건수
이 데이터를 K-means 로 분류하는 파이썬 코드
from sklearn import cluster
X = n_data2.iloc[ 0:5 , 1:25 ]
y = n_data2.Region
km2 = cluster.KMeans( n_clusters = 2 ).fit( X )
km3 = cluster.KMeans( n_clusters = 3 ).fit( X )
km4 = cluster.KMeans( n_clusters = 4 ).fit( X )
비교해보기위해 클러스터된 결과를 합쳐서 보는 코드
n_data2[ '2_Cluster' ] = km2.labels_
n_data2[ '3_Cluster' ] = km3.labels_
n_data2[ '4_Cluster' ] = km4.labels_
n_data2[['Region','2_Cluster','3_Cluster','4_Cluster']]
이렇게 해서 확인 하면 된다.
K-means Clustering은
K 값을 주면 K 개의 클러스터를 만들어 준다.
그런데 적절한 클러스터의 갯수 결정은 어떻게?
'IT,SW,Data,Cloud,코딩' 카테고리의 다른 글
AWS Certified Cloud Practitioner 자격증 공부 (0) | 2023.07.14 |
---|---|
빅데이터분석기사 실기시험 23년 6월 시험부터 단답형 문제 사라짐 (1) | 2023.05.22 |
빅데이터분석기사_캐글_T1-2.Outlier 이상치 소수점 (0) | 2022.10.12 |
빅데이터분석기사_캐글T1-1_IQR (0) | 2022.10.11 |
파이썬 공부3 (0) | 2022.09.13 |
파이썬 공부2 (0) | 2022.08.29 |
파이썬 공부 1 (0) | 2022.08.22 |
[자격증 공부] Salesforce Certified Marketing Cloud Administrator 정보 및 시험 준비, 그리고 합격 후기 (14) | 2022.04.29 |
댓글