*모두를 위한 머신러닝 링크:

=> https://hunkim.github.io/ml



*머신러닝과 Traditional Programming의 차이는?

(ML) Data + Output => Computer => Programming

(Traditional) Data + Programming => Computer => Output


*기계학습의 핵심 :
"일반화된 규칙을 통해 미래를 예측할 수 있다!!"


*머신러닝의 알고리즘 유형 :


1. 지도학습(Supervised Learning) : 답이 달려있는 상태에서 학습을 하는 것

2. 자율학습 - 비지도학습(Unsupervised Learning) : 답이 없는 상태에서 학습을 하는데...Data들을 잘 설명해주는 변수 (군집 분산 - Clustering OR 축소해봤더니 Insight를 주더라...)

3. 준지도학습(Semi-Supervised Learning) : 데이터 100만건 중에 10만건에 답이 있다. 이 상태에서 학습을 시킴. 목표값이 표시된 데이터와 표시되지 않은 데이터를 모두 훈련에 사용하는 것을 말함

4. 강화학습(Reinforcement Learning) : 

어떤 환경을 탐색하는 에이젼트가 현재의 상태를 인식하여 어떤 행동을 취한다면 그 에이젼트는 환경으로부터 포상을 얻게 됨.

포상은 음수와 양수 둘 다 가능하며, 강화 학습 알고리즘은 그 에이전트가 앞으로 누적될 포상을 최대화하는 일련의 행동으로 정의되는 정책을 찾는 방법


=> 요즘 학자들은 비지도 학습강화 학습에 집중하고 있음...




*접근 방법별 알고리즘 :

1) 결정트리 학습법(Decision Tree)

2) 연관규칙 학습법(Association Rule)

3) 인공신경망(Artificial Neural Network)

4) 유전계획법

5) 귀납 논리 계획법

6) 서포트 벡터 머신

7) 클러스터링

8) 베이즈 네트워크

9) 강화학습법

10) 표현학습법

11) 동일성 계측 학습법 등...



*(Supervised Learning) 지도학습의 예 : 


- 공부한 시간 대비 시험 점수를 예측 (공부를 많이하면 점수가 올라간다, 날씨가 추워지면 따뜻한 커피가 많이 팔린다) 

=> regression


- 공부한 시간 대비 시험의 합격/불합격 여부 

=> binary classification


- 공부한 시간 대비 (A,B,C,D,F) 학점 

=> multi-label classification, multi-nominal classification, softmax classification


- 라벨링 된 데이터에 대한 예측 (이미지를 학습시키는...확률값이 output으로 나온다)


*X와 Y를 잘 Define 해야 한다 : 

Y(숫자) : Linear Regression으로 풀 수 있다

Y(숫자X) : 2중 하나 : Pass/Fail, Female/Male -> Logistic Regression으로 풀 수 있다

              2개 이상 : A/B/C, 고양이/강아지/모자 와 같은 데이터(숫자가 아닌 nominal data) -> Softmax Classification으로 풀 수 있다




*기계학습의 절차 : 

- Dataset을 확보한다(DB Table 또는 CSV 파일) 

- Y를 구분한다(결과변수, 응답변수, 종속변수, 표적변수 등...)


*기계학습 세부절차

1) Business 이해(Biz Objective 정의, 환경/상황분석, 분석의 목표 설정)

2) Data 이해(원시데이터 확보, Describe Data, Explore Data)

3) Data Preparation(데이터 정제)

4) Modeling(모델링 기법 선택, Test 설계, 모델 구축)

5) Evaluation(결과 평가)

6) Deployment(Deploy, Report & Review)


=> 2번->4번 을 결과자 잘 나올 때 까지 무한반복한다




*Deep Learning : 

- 여러 비선형 변환 기법의 조합을 통해 높은 수준의 추상화를 시도하는 기계학습 알고리즘의 집합

- 사람의 사고 방식을 컴퓨터에게 가르치는 기계학습의 한 분야

- 1940년대의 인공신경망의 변형 분야


*Tensorflow 란

Tensorflow는 Machine Intelligence를 위한 오픈소스 라이브러리이다.

구글이 만든 numerical computation을 위한 오픈소스 소프트웨어 라이브러리

data flow graphs를 사용할 수 있다는 특징


python으로 구현 가능

동일 코드를 CPU와 GPU에서 모두 사용 가능

데이터, 모델 병렬화

TensorBoard visualization


Tensor = Data

Flow = 흐름

즉 Tensorflow  = 데이터의 흐름



*Dataflow graph :

- Nodes in graph :

=> represent mathematical operations

- Edges :

=> represent the multidimensional data arrays

=> (tensor) communicated between them


*Basic Usage

- To use Tensorflow you need to understand how tensorflow:

=> represents computations as graphs

=> executes graphs in the context of Session

=> represents data as tensors

=> maintains state with variables

=> use feeds and fetches to get data into and out of arbitrary operations


*Tensorflow Basic

Session을 수행하여야 결과를 얻을 수 있다 :



*PlaceHolder 주기 :


1
"Mul: %i"%
cs




*Tensor Ranks, Shapes, and Types


a = [[1,2,3], [4,5,6], [7,8,9]]


a의 rank = 2

shape는 [3,3] 이다


1) Tensor Ranks

0  scalar  s=483

1  vector  v=[1.1 2.2, 3.3]

2  matrix  m=[[1,2,3], [4,5,6], [7,8,9]]

3  3-Tensor  t=[[[2],[4],[6]],[1],[2],[3]],[[5],[6],[7]]]

4  nTensor


2) Tensor Shapes

Rank Shape                    Dimension Number
0      []                                0-D

1      [D0]                            1-D

2      [D0, D1]                        2-D

3      [D0, D1, D2]                   3-D

n      [D0, D1, ..., Dn-1]            4-D



3) Tensor Data Type(아래 2가지를 가장 많이 사용함):

DT_FLOAT   tf.float32

DT_COUBLE  tf.float64

DT_INT32    tf.int32

DT_Complex64 tf.complex64




* Pycharm 설치


아래 링크에서 Community 버전 설치

https://www.jetbrains.com/pycharm/download/#section=windows







*Scipy 설치


>>> pip install scipy

>>> pip install pillow



*이미지 RGB 조정 소스 코드:


1) cat image(cat.jpg)를 다운로드 받아 jupiter workspace에 갖다 놓는다 :

2) 아래 코드를 실행시킨다.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
from scipy.misc import imread, imsave, imresize
 
# JPEG 이미지를 numpy 배열로 읽어들이기
img = imread('cat.jpg')
print(img.dtype, img.shape)  # 출력 "uint8 (400, 248, 3)"
 
# 각각의 색깔 채널을 다른 상수값으로 스칼라배함으로써
# 이미지의 색을 변화시킬 수 있습니다.
# 이미지의 shape는 (400, 248, 3)입니다;
# 여기에 shape가 (3,)인 배열 [1, 0.95, 0.9]를 곱합니다;
# numpy 브로드캐스팅에 의해 이 배열이 곱해지며 붉은색 채널은 변하지 않으며,
# 초록색, 파란색 채널에는 각각 0.95, 0.9가 곱해집니다
img_tinted = img * [10.50.9]
 
# 색변경 이미지를 300x300픽셀로 크기 조절.
img_tinted = imresize(img_tinted, (300300))
 
# 색변경 이미지를 디스크에 기록하기
imsave('cat_tinted.jpg', img_tinted)
cs

=> cat_tinted.jpg가 저장되었는지 확인


web 페이지에서 보여줄려면 형변환이 이루어져야 한다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
import numpy as np
from scipy.misc import imread, imresize
import matplotlib.pyplot as plt
 
img = imread('cat.jpg')
img_tinted = img * [10.50.5]
 
# 원본 이미지 나타내기
plt.subplot(121)
plt.imshow(img)
 
# 색변화된 이미지 나타내기
plt.subplot(122)
 
# imshow를 이용하며 주의할 점은 데이터의 자료형이
# uint8이 아니라면 이상한 결과를 보여줄 수도 있다는 것입니다.
# 그러므로 이미지를 나타내기 전에 명시적으로 자료형을 uint8로 형변환 해줍니다.
 
plt.imshow(np.uint8(img_tinted))
plt.show()
 
cs

imageio_skimage.ipynb

Scipy_test.ipynb





*배열연산 :

Dot 함수(행렬 곱이 아니라 요소별 곱)


*수학함수:




*Numpy 전치행열(Transpose) :



numpy array 'x' 에 대문자 T만 붙이면 된다 :
ex) x.T




*Python If 사용법


if 조건문1:

  내용

elif  조건문2:

  내용

else:

   내용


*Python For 사용법 

for 변수 in 순서자료 :
  내용


ex) :

list = [1,2,3,4]
for i in list :
  print(i)






*Range로 반복 실행



*While 문 실행 :


*Random 숫자를 입력 받아 맞추는 소스코드 :



*함수 사용법


함수에는 Scope이 있다

- local, global, non-local


Recursion(재귀호출)

Lamda expression(람다 expression)

=> in-line 정의의 익명의 작은 함수

Generator 함수 : 사용자 정의 iterator 정의하는 함수

Decorator 함수 :  함수도 클래스로서 변수에 할당되거나 인자로서 정의될 수 있음


Ex)



*File 입출력 :

f= open('somefile.txt', 'w')

f.write('hello')

f.close()


f=open('somefile.txt', 'r')

f.read()


=> r 읽기

=> w 쓰기

=> a append

=> b binary

=> + read/write





*OOP 개념


- Class와 Object

=> Class = 설계도(사용자 정의 객체의 프로토타입)

=> Object = 기능+데이터


- 특징

=> encapsulation

=> polymorphism

=> inheritance




*Exception 처리 :







*데이터 분석용 주요 package


- iPython (python과 유사)

- numpy(수학분야)

- matplotlib(시각화)

- scipy(과학분야에서 활용)

- pandas(데이터 구조 및 다양한 분석방법 제공)


*Python 특징

-인터프리터 언어(소스코드를 바로 실행하는 환경)

- 객체지향적

- Interaction 한 언어

- Scripting언어 : 일반언어와 성능 /기능 차이가 별로 없음

- 수학적 개념이 녹아들어가 있음

- 비교적 간결, 다양한 알고리즘 적용 가능, 객체 지향개념 적용

- 배우기 쉽고, 가독성이 좋고, 유지보수성이 좋다.


*Python 종류 

- Python, Cpython은 같은것

  => C/C++ 로 작성

  => 2.7버전 : 2010년대 중반

  => 3.7 버전 : 2010년대 초반 이후 계속 발전

  => 2.7과 3.7 버전의 호환성이 깨져있다는 단점이 있다.

- Jython : JVM을 이용한 자바로 작성한 파이썬, 자바환경에서 사용

- IronPython : C#을 이용한 닷넷 환경으로 작성한 파이썬





*Python 활용 영역

- 시스템 유틸리티 작성

- GUI 프로그래밍

- C/C++과 연동 용이

- Web Programming

- 수치여난 프로그래밍

- 데이터베이스 프로그래밍

- 데이터 분석

- 사물 인터넷


*기본환경

- Python Interactive Shell - IDLE(GUI & CUI)

- 확장

=> PyDev with Eclipse

=> Pycharm

=> Komodo

=> Emacs

=> Vim

=> Text Mate

=> Gedit 등

- 웹브라우저 환경

=> IPython(3.0이상은 Jupiter)



*Python 설치 : 

https://www.python.org/downloads/release/python-365/


Windows x86-64 executable installer

로 설치



*Numpy 및 jupyter 설치


>>> pip install numpy

>>> pip install jupyter





*Jupyter Notebook 실행

>>> jupyter notebook




(Shift + Enter) 로 Run 실행 가능




*Python Data type :


- 수치형 (ex: 1, 2, -12)

- 문자형 (ex: "Hello", """long text""")

- List [1,2,3,4,5] , ['a', 'b', 'c', 'd', 'e']

=> x=[1,2,3,4]

     x[0] = 1

     x[-1] = 4

     x[1:-1] = 2, 3

     x[:3] = 처음부터 index 3까지

     x[3:]

- Tuple (1,2,3,4)

=> tuple은 immutable 하다(변경될 수 없다. 사용법은 list와 동일)

=> y=(1,2,3,4)

     y[0]

- Dictionary {kye:value, key2:value}

=>Z={"a": "apple", "b": "banana"}

     z["a"] = "apple"

     z["b"] = "banana"

 




*Python Function & Module 사용예제 :





+ Recent posts