본문 바로가기
데이터 분석 및 시각화

[데이터분석] ML(머신러닝)_basic, 데이터 분리

by 바다의 공간 2024. 8. 21.

수업날짜 0818

##머신러닝 기초 개념

*머신러닝( machine learning)
- 기존 데이터나 데이터의 흐름을 머신을 통해 통계적으로 추론해서 미래데이터나 데이터의 흐름을 예측/분석합니다.
(기존 데이터나 데이터의 흐름이 있어야함)
- 머신이 경험을 통해서 스스로 학습하도록 합니다.

# 키워드 정리

* 빅데이터
- 대량의 데이터를 다루는 기술과 방법론을 포함하는 분야
- 데이터 수집, 저장, 처리, 분석, 정보추출

* 인공지능
- 사람과 유사한 지능을 갖도록 컴퓨터프로그램이 설계되는 분야입니다.
- 학습, 추론, 자연어처리 등등 수많은 분야에서 인공지능 기술을 사용 합니다.

* 머신러닝
- 컴퓨터가 데이터로부터 스스로 학습하고, 패턴을 발견하고, 예측하고 결정하는 능력을 갖추도록 하는 분야입니다.
- 데이터와 경험을 통해서 자동적으로 개선되는 알고리즘을 개발하는 기술입니다.

# 머신러닝의 학습 방법

* 지도학습 (Supervised Learning)
- 답이 정해져 있고 이 답을 맞추는 것을 목표로 하는 학습
- 분류 (Classification): 몇가지 옵션 중에서 하나를 고르는 것
예) 스팸메일 분류 프로그램 : 메일 내용을 보고 스팸인지 아닌지 맞추려고 하는것 => 답이 있음.

- 회귀(Regression) : 결과값이 무수히 많고 연속적일 때 결과값을 도축해내는것을 말합니다.
현재까지의 데이터들의 패턴을 찾아서 미래 데이터를 예측할때 사용합니다.
예) 주식가격 예측하기, 부동산 시세예측하기 등등등

* 비지도학습 (Unsupervised Lerning)
- 답이없는데, 이 답을 맞추는 것이 학습의 목표입니다.
예) 기사를 비슷한 기사들끼리 묶어야 한다고했을때, 날짜별로 묶거나 카테고리별, 기자별, 언론사별 등등 여러 기준으로
분류 하는것.

* 강화학습 (보상에 집중을 하기)
- 인공지능이 스스로 경험을 통해서 배우고 의사결정을 내리는 방법입니다.
- 스스로 실험과 시행착오를 통해서 최적의 선택을 학습하는 것.
- 에이전트(agent)가 환경과 상호작용하면서 특정 작업을 수행하고 보상을 최대화 하기 위한 최적의 정책(방법)을 학습
- 대표적으로는 딥러닝 : 예를들어서 챗gpt에서 똑같은 질문을 하게되면 보상점수가 낮아짐


# 머신러닝의 장점과 단점

* 장점
- 사람이 놓치거나 실수할 수 있는 데이터추세와 패턴을 식별 가능
- 설정 후 사람의 개입 없이도 작업 가능
- 동적, 대용량, 복잡한 데이터 환경에서 다양한 데이터 처리가 가능합니다.

* 단점
- 초기 훈련시 비용과 시간이 많이 소요됨 (인프라 구축의 경제성)
-  전문가 도움없이 결과를 정확하게 해석하고 불확실성을 없애기 어려움(처음에 누군가 시동은 걸어주어야함)

# 머신러닝 진행 순서

* 문제 정의 -> 데이터 수집 -> 데이터 전처리 -> 특성 선택 -> 특성 엔지니어링 -> 모델 선택 ->
모델 학습 -> 모델 평가 -> 모델 개선 -> 모델 배포 -> 보고서 작성 -> 코드최적화 및 리팩토링


# 지도학습
- 분류
- 회귀

# 비지도학습
- 클러스터링(Clustering)_군집 : 전달된 데이터를 어떤 일정한 규칙에 따라서 묶는 것
 ex) 자동차 클러스터 : 자동차산업관련을 묶어놓은 것
- 차원축소(Dimensionality Reduction) : 고차원 데이터의 저차원 데이터의 특성으로 압축해서 데이터를 시각화 하거나 다른 분석 작업에 활용하는데 사용합니다.
- 연관규칙 학습(Association Rule Learning) : 데이터 셋에서 항목들 사이의 관계나 패턴을 찾는 작업입니다.

# 강화학습
- 에이전트(Agent) : 학습을 수행하는 주체
- 환경(Environment) : 에이전트가 상호작용하는 외부 환경, 보상에 대한 처리를 합니다.
- 상태(State) :  에이전트와 환경의 상호작용을 통해 특정 시점에서의 환경의 상태
- 행동(Action) : 에이전트가 특정 상태에서 취할 수 있는 선택가능한 행동의 집합
- 보상(Reward) : 에이전트가 특정 행동을 수행한 결과 받는 보상 신호(데이터, 값)
- Q-Learning : 에이전트가 환경과 상호작용하면서 최적의  Q-함수를 찾아가면서 최적의 행동을 선택하도록 학습하는 방법 (정확도를 높여주는 함수)
- SARSA : 특정 상태하에 하는 행동에 따른 보상의 반복
-> 상태 - 행동 - 보상 - 상태 - 행동 - 보상 .. 에 대한 약어입니다. 즉 계속 반복한다는 말입니다.




01_classificaion
- 설치 :  scikit-learn 외부라이브러리 설치
아이리스 데이터셋을 이용해서 간단하게 데이터셋을 다루어봤습니다.
다음결과값을 원활하게 화긴하기 위해서 p를 주석처리해놓은것도 있습니다.


# classification.py

def p(str):
    print(str, '\n')

#라이브러리 임포트
import pandas as pd
import numpy as np

# scikit-learn 외부라이브러리 설치함
from sklearn import datasets

#아이리스(붓꽃) 데이터셋 불러오기
iris = datasets.load_iris()
# p(iris)

# 딕셔너리 key 확인
# p(iris.keys())
#dict_keys(['data', 'target', 'frame', 'target_names', 'DESCR', 'feature_names', 'filename', 'data_module'])

#데이터셋 정보 출력
# p(iris['DESCR'])
# 데이터셋에 대한 정보(설명)을 볼 수 있습니다.

# 특성(변수)명 출력해보기
# p(iris.feature_names)
# p(iris['feature_names'])
#['sepal length (cm)', 'sepal width (cm)', 'petal length (cm)', 'petal width (cm)']

# 특성(feature) 데이터(X:대문자)
# p(iris['data'])
# features = iris['data']
# p(features[:5])

# 레이블(Label) 데이터 (y:소문자)
# p(iris['target'])
# label = iris['target']
# p(label)

#특성과 레이블을 데이터프레임으로 반들기
df = pd.DataFrame(iris['data'], columns=iris['feature_names'])
# p(df.head())

#컬럼명 변경
# 제일 쉬운방법으로 컬럼을 재정의 합니다.
df.columns = ['sepal_length', 'sepal_width', 'petal_length', 'petal_width']
p(df.head())

#target변수 추가
df['target'] = iris['target']
p(df.head())
p(df.tail())

#중복데이터가 있는지 확인
# p(df.duplicated().sum()) #중복데이터 개수의 합 : 1_추상적
# p(df.loc[df.duplicated(), :]) #중복데이터를 찾기_디테일

# 몇 행과 중복된 데이터가 있는지 데이터프레임으로 출력하기
# p(df.loc[(df.sepal_length==5.8) & (df.petal_length==5.1), : ])
#중복된 행을 모두 선택
# p(df.loc[df.duplicated(keep=False)]) #101, 142가 중복 확인

#중복데이터 제거하기
df = df.drop_duplicates()
p(df)

#시각화 라이브러리
import seaborn as sns
import matplotlib.pyplot as plt

#폰트 확인
import matplotlib.font_manager as fm
#폰트명 리스트
font_list = [f.name for f in fm.fontManager.ttflist] #파이썬은 리스트 안에서 for문 가능
p(font_list)

#한글설정
plt.rc('font', family='Malgun Gothic')

#캔버스 사이즈 적용
plt.rcParams['figure.figsize'] = (12, 10)

#displot  그리기
#x : x축에 표시할 데이터, kind:그래프 종류, hue:범례, data:사용할 데이터프레임
sns.displot(x = 'petal_width', kind='kde', data= df)
# plt.show()
sns.displot(x = 'sepal_width', hue='target', kind='kde', data=df)
# plt.show()

#pairplot : 데이터프레임의 각 열들간의 쌍(pair)들의 관계를 시각화 한 그래프
#df=데이터프레임, hue=범례, height=그래프높이, diag_kind=그래프종류
# sns.pairplot(df, hue='target', height=3.5, diag_kind='kde')
# plt.show()

# Train 데이터 셋과 Test데이터셋 분할하기
# 트레인과 테스트 데이터셋을 자동으로 분할해주는 라이브러리
from sklearn.model_selection import train_test_split

# 데이터셋
iris_data = iris.data
p(iris_data.shape) #(150, 4) = 150행, 4열

# 레이블
iris_label = iris.target
# p(iris_label.shape) #(150,) = 150행

# X_train : X 훈련 데이터
# X_test: X 테스트 데이터
# y_train : y 훈련 데이터
# y_test : y 테스트 데이터
# train_test_split :  훈련데이터와 테스트데이터 분리
# test_size = 0.2 (20%) : 훈련데이터와 테스트데이터로 분리할 때 테스트데이터의 비율
# random_state : 랜덤시드값 (훈련데이터/ 테스트데이터 분리시 랜덤을 정하는 기준값)
#              : 랜덤스테이트가 같으면 랜덤하게 추출할 때 동일한 값이 추출됨

X_train, X_test, y_train, y_test \
    = train_test_split(iris_data, iris_label, test_size=0.2, random_state=7)
p(X_train.shape) #(120, 4)
p(X_test.shape) #(30, 4)
p(y_train.shape) #(120,)
p(y_test.shape) #(30,)
p(X_train)
p(y_train)

dlsplot 그리기


pairplt



지금까지는 분류들어가기전에 데이터셋을 분리한거까지 한겁니다.


 

 

 

순번 함수(매소드) 설명
1 drop_dulicates() 중복값 제거하기