[Python]데이터분석과 머신러닝

2023. 12. 22. 16:29· 공부/Python
목차
  1. 인공지능 vs 기계학습 vs 딥러닝
  2. 전통 프로그래밍과 머신러닝 프로그래밍
  3. 전통 프로그래밍
  4. 머신러닝 프로그래밍
  5. 기계 학습 응용 분야
  6. 기계 학습의 분류
  7. 지도 학습(Supervised Learning)
  8. 지도 학습 : 선형회귀
  9. 지도 학습 : 분류
  10. 비지도 학습(Unsupervised Learning)
  11. 비지도 학습 : 군집화
  12. 강화 학습(Reinforcement Learning)
  13. 기계학습(ML) 알고리즘 선택
  14. 사이킷런으로 선형회귀 구
  15. 실습 . 다차원 선형회귀
  16. 인공 신경망
  17. 퍼셉트론(perceptron)
  18. 활성화 함수(Activation function)
  19. 텐서플로우(Tensorflow)
  20. 머신러닝 활용 절차
  21. 지도 학습 : 회귀 vs 분류
  22. 아이리스 품종 분류
  23. 원핫 인코딩(onehot-encoding)
  24. 활성화 함수와 손실 함수
  25. 소프트맥스(softmax)
  26. 아이리스 품종 분류(인공신경망)
  27. 딥러닝
  28. 딥러닝으로 손글씨 숫자 분류
  29. 모델 구조 작성
반응형

인공지능 vs 기계학습 vs 딥러닝

  • 인공지능 (Artificial Intelligence)
    • 인간처럼 학습하고 추론하는 프로그램 연구
  • 기계학습 (Machine Learning)
    • 인공지능의 한 분야
    • 프로그래밍 없이 스스로 학습하는 프로그램 연구
  • 딥러닝 (Deep Learning)
    • 기계 학습의 한 분야
    • 인공 신경망 등을 사용하여 빅데이터로부터 학습하는 프로그램 연구

전통 프로그래밍과 머신러닝 프로그래밍

전통 프로그래밍

Untitled.png

머신러닝 프로그래밍

Untitled.png

머신러닝은 정답에 가까운 예측을 내는 것

기계 학습 응용 분야

Untitled.png

기계 학습의 분류

Untitled.png

지도 학습이 결과가 제일 좋음

지도 학습(Supervised Learning)

  • 컴퓨터는 "교사"에 의해 주어진 예제와 정답(혹은 레이블)을 제공받음
  • 지도학습의 목표
    • 입력을 출력에 매핑하는 일반적인 규칙을 학습

Untitled.png

  • 결과가 제일 좋고, 데이터를 준비하는데 더 많은 시간이 걸

지도 학습 : 선형회귀

  • 지도학습
    • 과거데이터 ⇒ 학습 ⇒ 모델(독립변수와 종속변수의 관계식) 생성
    • 공식의 대중화
  • 선형회귀
    • 선형 관계식으로 모델 생성
    • 모델에 신규 데이터 입력 ⇒ 예측치 출력

Untitled.png

상관관계를 더 빨리 찾아서 관계식을 정립하고 예측을 한다.

지도 학습 : 분류

  • 앞에 나왔던 식 y = f(x)에서 출력 y가 이산적(discrete)인 경우
    • 분류 문제, 인식 문제
  • 분류에서는 입력을 2개 이상의 클래스로 나누는 것

Untitled.png

비지도 학습(Unsupervised Learning)

  • “교사” 없이 컴퓨터가 스스로 입력들을 분류
    • 식 y = f(x)에서 레이블 y가 주어지지 않는 것
  • 데이터들의 상관도를 분석
    • 유사한 데이터 모으기

Untitled.png

알고리즘을 통해 분류 정도는 할 수 있을것 분류가 된 데이터에 인간이 레이블을 붙이면 정답이 생긴다.

비지도 학습 : 군집화

  • 가장 대표적인 비지도 학습
    • 클러스터링(군집화, clustering)
    • 데이터간 거리를 계산하여서 입력을 몇 개의 그룹으로 나누는 방법
    Untitled.png

강화 학습(Reinforcement Learning)

  • 컴퓨터가 어떤 행동을 취할 때마다 외부에서 처벌이나 보상이 주어짐
  • 알파고 최종 버전도 강화 학습 사용
  • 게임에서 많이 사용됨

Untitled.png

기계학습(ML) 알고리즘 선택

Untitled.png

사이킷런으로 선형회귀 구

# 2차원 배열로 전달하는 이유는 
# 실습. 사이킷런으로 선형회귀 구현
# 새로운 학생의 키를 전달하여 몸무게 예측
import numpy as np
from sklearn import linear_model # scikit-learn 모듈을 가져온다.

regr = linear_model.LinearRegression()

X = [[164], [179], [162], [170]]  # 다중회귀에도 사용하도록 함
y = [53, 63, 55, 59]

regr.fit(X, y)

input_data = [ [180] , [185] ]

result = regr.predict(input_data)
print(result)

Untitled.png

예측을 하는데 학습된 데이터들 중에 제일 오차가 적은 기준으로 ?

# 선형회귀 그래프 그리기
import matplotlib.pyplot as plt
import numpy as np
from sklearn import linear_model # scikit-learn 모듈을 가져온다.

regr = linear_model.LinearRegression()

X = [[164], [179], [162], [170]]  # 다중회귀에도 사용하도록 함
y = [53, 63, 55, 59]
regr.fit(X, y)

# 학습 데이터와 y 값을 산포도로 그린다.
plt.scatter(X, y, color='black')

# 학습 데이터를 입력으로 하여 예측값을 계산한다
y_pred = regr.predict(X)

# 학습 데이터와 예측ㄱ밧으로 선그래프로 그린다.
# 계산된 기울기와 y 절편을 가지는 직선이 그려진다.
plt.plot(X, y_pred, color='blue', linewidth=3)
plt.show()

Untitled.png

여기에서 직선은 입력된 값들 중 상관관계를 정립한 결과의 오차가 제일 적은(최적)의 직선을 나타냄

→ 키와 몸무게 사이의 관계를 정립하고 키가 어떤 값일 때 몸무게가 대략 어떤 값인지를 예측

실습 . 다차원 선형회귀

# 다차원 선형 회귀
import numpy as np
from sklearn import linear_model

regr = linear_model.LinearRegression()

# 남자는 0, 여자는 1
# 입력데이터 X 값은 2차원 배열로 정의
X = [[164, 1], [167, 1], [165, 0], [170, 0], [179, 0], [163, 1], [159, 0], [166, 1]]

# y값은 1차원 데이터
y = [43, 48, 47, 66, 67, 50, 52, 44]

regr.fit(X, y)  # 학습
print("계수 :" , regr.coef_)
print("절편 :", regr.intercept_ )
print("점수 :" , regr.score(X, y))
print("키 166 여학생의 추정 몸무게 : ", regr.predict([[166, 1]]))
print("키 166 남학생의 추정 몸무게 : ", regr.predict([[166, 0]]))

인공 신경망

  • 인간의 뇌를 흉내 내어 만든 기계 학습 모델
  • 신경세포속 수상돌기는 다른 신경세포로부터 신호를 전달받아서(입력) 이 신호에 대한 반응을 축삭말단을 통해서 다른 신경세포로 전달(출력)
  • 인공적인 신경세포를 흉내내는 프로그램을 퍼셉트론 (Perceptron) 이라고도 함

Untitled.png

퍼셉트론(perceptron)

  • 입력 데이터는 입력 노드에 전달
  • 입력 노드는 출력 노드로 연결
  • 출력 노드는 두 개의 기능으로 구분
    • 전달되어 오는 신호를 모두 합하는 부분
    • 이렇게 합산된 신호에 따라 다음 계층으로 신호를 보낼 것인지 말 것인지는 활성화activation 함수에 의해 결정

Untitled.png

활성화 함수(Activation function)

  • 활성화 함수 종류
    • 시그모이드(Sigmoid), 하이퍼볼릭 탄젠트(tanh), 소프트맥스(Softmax)
    • 렐루(ReLU), 스위시(swish)

Untitled.png

텐서플로우(Tensorflow)

  • 머신러닝과 딥러닝을 위한 오픈소스 플랫폼
  • 텐서플로우는 우수한 기능과 서비스를 제공
  • 병렬처리를 잘 지원
  • 고급 신경망 네트워크 모델을 쉽게 구현
    • 케라스 활용
  • 텐서플로우 패키지 포함
    • import tensorflow as tf
  • 텐서플로우 패키지 버전 확인
    • tf.version

머신러닝 활용 절차

  • 데이터 준비
  • 머신러닝 모델 구조 작성
  • 기계 학습(Fit)
  • 모델 이용

Untitled.png

  • 데이터 준비 → 판다스 이용
  • 모델 구조 작성 → 케라스 이용

Untitled.png

# 판매 예측 (인공신경망, keras 활용)
import tensorflow as tf
import pandas as pd

# 1. 데이터를 준비함
파일경로 = 'https://raw.githubusercontent.com/blackdew/tensorflow1/master/csv/lemonade.csv'
레모네이드 = pd.read_csv(파일경로, encoding='UTF-8')

# 종속변수, 독립변수
독립 = 레모네이드[['온도']]
종속 = 레모네이드[['판매량']]
print(독립.shape, 종속.shape)

# 2. 모델을 만듭니다.
X = tf.keras.layers.Input(shape=[1])
Y = tf.keras.layers.Dense(1)(X)
model = tf.keras.models.Model(X, Y)
model.compile(loss='mse')

# 3. 모델을 학습시킵니다.
model.fit(독립, 종속, epochs=1000, verbose=0)
model.fit(독립, 종속, epochs=10)

# 4. 모델을 이용합니다.
print(model.predict(독립))
print(model.predict([[15]]))

Untitled.png

데이터가 한계적이기 때문에 epochs로 해당 데이터를 반복해서 학습해

지도 학습 : 회귀 vs 분류

  • 지도 학습 데이터가 수치 데이터(양적)이면 회귀 문제
  • 지도 학습 데이터가 범주형 데이터이면 분류 문제

Untitled.png

아이리스 품종 분류

  • 아이리스 품종은 범주형 데이터 è 분류 문제
    • 원핫 인코딩 필요
    • 판다스의 get_dummies() 함수 이용

Untitled.png

원핫 인코딩(onehot-encoding)

  • 범주형 데이터를 수치 데이터로 변환하여줌

Untitled.png

활성화 함수와 손실 함수

  • 활성화 함수로 softmax 사용
  • 손실(비용) 함수로 다중분류용 categorical_crossentropy 사용

Untitled.png

소프트맥스(softmax)

  • 다중 분류 문제에서 사용되는 활성화 함수
    • 확률 값의 합이 1

Untitled.png

아이리스 품종 분류(인공신경망)

import tensorflow as tf
import pandas as pd

# 1. 데이터를 준비함
파일경로 = 'https://raw.githubusercontent.com/blackdew/tensorflow1/master/csv/iris.csv'
아이리스 = pd.read_csv(파일경로, encoding='UTF-8')

# 원핫인코딩
인코딩 = pd.get_dummies(아이리스)

# 독립변수, 종속변수
독립 = 인코딩[['꽃잎길이', '꽃잎폭', '꽃받침길이', '꽃받침폭']]
종속 = 인코딩[['품종_setosa', '품종_versicolor', '품종_virginica']]
print(독립.shape, 종속.shape)

# 2. 모델의 구조를 만듭니다.
X = tf.keras.layers.Input(shape=[4])
Y = tf.keras.layers.Dense(3, activation='softmax')(X)
model = tf.keras.models.Model(X, Y)
model.compile(loss='categorical_crossentropy', metrics='accuracy')

# 3. 데이터로 모델을 학습(Fit)합니다.
model.fit(독립, 종속, epochs=100)

# 모델을 이용합니다.
# 맨 처음 데이터 5개
print(model.predict(독립[:5]))
print(종속[:5])

Untitled.png

딥러닝

  • 히든 레이어를 여러 층 사용한 인공지능망

Untitled.png

딥러닝으로 손글씨 숫자 분류

  • MNIST 데이터 셋 활용
  • 28*28 픽셀 이미지
  • 총 70,000개 데이터로 구성
  • 훈련 데이터 60,000개
  • 테스트 데이터 10,000개

Untitled.png

# 딥러닝으로 손글씨 숫자 분류
import tensorflow as tf
from tensorflow import keras
import numpy as np
import matplotlib.pyplot as plt

# 데이터 불러오기
mnist = keras.datasets.mnist
(x_train, y_train), (x_test, y_test) = mnist.load_data()
# x_train.shape = (60000, 28, 28), y_train.shape = (60000,)

print(x_train.shape, '', y_train.shape)
# 훈련 데이터의 첫 번째 이미지 출력하기
plt.imshow(x_train[0], cmap='gray')
plt.show()

Untitled.png

  • 데이터 전처리
    • 픽셀별 0~255 범위의 값을 0.0 ~ 1.0 범위의 값으로 변환(정규화)

Untitled.png

모델 구조 작성

  • 입력층, 은닉층, 출력층 생성
  • 입력층을 1차원으로 생성 : 2차원 이미지 배열을 1차원 이미지 배열로 변환
    • Flatten() 함수 사용
  • 활성화 함수 설정
    • 은닉층 : 렐루(ReLU) 함수
    • 출력층 : 소프트맥스(softmax) 함수

Untitled.png

  • 모델 학습
    • 모델 컴파일에서 설정한 학습 방법으로 모델 학습
    • 훈련 데이터, 훈련 데이터 레이블, 반복 학습 횟수(epochs) 설정 필요
      • 훈련 데이터를 반복 학습하면서 정확도를 높임
      • 너무 많이 학습하면 훈련 데이터만 정확히 예측하는 과대적합 문제 발생
    • fit() 메소드 사용

Untitled.png

  • 모델 평가
  • 모델이 학습 완료 후 테스트 데이터와 테스트 데이터 레이블을 사용하여 새로운 데이터를 얼마나 잘 예측하는지 확인
  • evaluate() 메소드 사용

Untitled.png

  • 손글씨 숫자 예측
  • predict() 메소드 사용

Untitled.png

반응형
  1. 인공지능 vs 기계학습 vs 딥러닝
  2. 전통 프로그래밍과 머신러닝 프로그래밍
  3. 전통 프로그래밍
  4. 머신러닝 프로그래밍
  5. 기계 학습 응용 분야
  6. 기계 학습의 분류
  7. 지도 학습(Supervised Learning)
  8. 지도 학습 : 선형회귀
  9. 지도 학습 : 분류
  10. 비지도 학습(Unsupervised Learning)
  11. 비지도 학습 : 군집화
  12. 강화 학습(Reinforcement Learning)
  13. 기계학습(ML) 알고리즘 선택
  14. 사이킷런으로 선형회귀 구
  15. 실습 . 다차원 선형회귀
  16. 인공 신경망
  17. 퍼셉트론(perceptron)
  18. 활성화 함수(Activation function)
  19. 텐서플로우(Tensorflow)
  20. 머신러닝 활용 절차
  21. 지도 학습 : 회귀 vs 분류
  22. 아이리스 품종 분류
  23. 원핫 인코딩(onehot-encoding)
  24. 활성화 함수와 손실 함수
  25. 소프트맥스(softmax)
  26. 아이리스 품종 분류(인공신경망)
  27. 딥러닝
  28. 딥러닝으로 손글씨 숫자 분류
  29. 모델 구조 작성
'공부/Python' 카테고리의 다른 글
  • [Python]데이터 수집
  • [Python]데이터 전처리
  • 파이썬 자료구조
  • 절차지향프로그래밍 요약
Future0_
Future0_
rm -rf /
Future0_
Luna Developer Blog
Future0_
전체
오늘
어제
  • 분류 전체보기 (112)
    • 프로그래밍 (4)
      • 알고리즘 (4)
    • 보안 (14)
      • Dreamhack (4)
      • Hackthebox (1)
      • Webhacking (9)
    • 프로젝트 (4)
    • 공부 (80)
      • Database (2)
      • Python (11)
      • System (4)
      • Java (13)
      • JSP (13)
      • Spring (11)
      • Kotlin (16)
      • 자료구조 (10)
      • 기계학습 (0)
    • Docker (4)
    • Github (2)
    • Tip (1)
    • 잡담 (2)

블로그 메뉴

  • 홈
  • 태그

공지사항

인기 글

태그

  • 알고리즘
  • native app
  • 보안
  • 컴퓨터
  • ViewModel
  • 자료구조
  • Java
  • Android Studio
  • api 통신
  • Kotlin
  • 키 해시
  • jsp
  • 프로그래밍
  • 코틀린기본문법
  • Database
  • Computer science
  • Python
  • cs
  • 상속
  • docker
  • android studio 삭제
  • 자바빈즈
  • React
  • spring
  • dreamhack
  • 1.9.22
  • shared preference
  • webhacking
  • SpringBoot
  • 디버깅키해시

최근 댓글

최근 글

hELLO · Designed By 정상우.v4.2.0
Future0_
[Python]데이터분석과 머신러닝
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.