*일반적인 직선을 나타내는 공식(선형을 나타내는 가설 Hypothesis) : 

y = wx + b

H(x) = wx + b


위 공식에서 W와 B가 미지수이다. 

결국 W와 b를 찾는것이 목적!!


w= weight 기울기

b= bias


(x, y) , (x1, y1), (x2, y2) 의 값이 있을 때

(x, H(x)), (x1, H(x1)), (x2, H(x2))


Cost = 1/N <<(H(x) - y)2


Cost는 w의 제곱식 

Cost는 작으면 작을 수록 좋다!(Loss가 적다는 의미)


*Linear Regression을 하기 위한 기본 적인 3가지 요소

- Hypothesis

- Cost 정의(에측값에서 제곱을 해서 평균을 구한 값)

- Cost를 최소화 하기 위한 알고리즘(Gradient Decent...)


* 최적의 Hypothesis의 선택 :
=> H(x) - y를 최소화하는 직선을 찾으면 됨!

- Cost = Hypothesis에서 예측값 목표를 뺀값의 제곱의 평균

(tf.reduce_mean(tf.square(hypothesis - y_data)))




*Linear Regression Example (with Pycharm) : 


1) Pycharm 가상환경에서 tensorflow 설치 :



(Terminal에서 'pip install tensorflow' 입력)



2) Pycharm에서 Python 파일 생성하기 :

실행하기 (shift + F10) or 마우스 우클릭 후 Run linear_Regression



3) tensorflow로 학습시키기 :



소스코드 :


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
import tensorflow as tf
 
x_data = [1.2.3.]
y_data = [1.2.3.]
 
 
= tf.Variable(tf.random_uniform([1], -1.1.)) #초기 값을 랜덤하게 준다 -1에서 1 사이에서 1개
= tf.Variable(tf.random_uniform([1], -1.1.)) #초기 값을 랜덤하게 준다 -1에서 1 사이에서 1개
 
hypothesis = w * x_data + b
cost = tf.reduce_mean(tf.square(hypothesis - y_data)) # Cost를 구한다
 
optimizer = tf.train.GradientDescentOptimizer(0.1)
train = optimizer.minimize(cost)  #가장 작은 cost륵 가져온다
 
init = tf.global_variables_initializer()
sess = tf.Session()
sess.run(init)
 
for step in range(2001):
    sess.run(train)
    if step % 20 == 0:
        print(step, sess.run(cost), sess.run(w), sess.run(b))
cs






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

=> 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




*Numpy random 함수 사용 :


*Numpy Array 사용법:

1차원 배열 : 

x= [1,2,3,4]


2차원 배열:
x = [[1,2,3], [4,5,6]]


3차원 배열:

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



*Numpy Array 생성 방법








*Numpy Array 인덱싱 :

a = 1    2    3    4

5    6    7    8

9    10    11    12


위에서 파란색 음영 표시된 부분은 :


b = a[:2, 1:3]

        행 , 열

(상세설명 : 0부터 2행까지, 1열부터 3열 전까지)

b[0,0] = 77


위에서 2가 77로 바뀐다.




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
 
#Create the following rank 2 array with shape(3,4)
#[[1,2,3,4],
#[5,6,7,8],
#[9,10,11,12]]
 
= np.array([[1,2,3,4],[5,6,7,8], [9,10,11,12]])
 
 
#슬라이싱을 이용하여 첫 두행과 1열, 2열로 이루어진 부분배열을 만들어봅시다.
#b는 shape가 (2,2)인 배열이 됩니다.
#[[2,3],
#[6,7]]
= a[:2,1:3]
 
#슬라이딩된 배열은 원본 배열과 같은 데이터를 참조합니다. 즉 슬라이싱된 배열을 수정하면
#원본 배열 역시 수정됩니다.
print(a[0,1]) #출력 2
b[0,0= 77 #b[0,0]은 a[0,1]과 같은 데이터입니다.
print(a[0,1])
cs





*배열 슬라이싱 : 

a[1, :] = [5,6,7,8]

a[1:2, :] = [[5,6,7,8]]




사진




*불리언 배열 인덱싱 :

=> False 만 제외하고 모두 1줄로 출력한다. [3,4,5,6]

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
import numpy as np
a=np.array([[1,2],[3,4],[5,6]])
 
 
bool_idx=(a>2)
 
print(bool_idx)
#출력 [[false false]
#출력 [true true]
#출력 [true true]]
 
print (a[bool_idx])
 
#위에서 한 모든것을 한문장으로 할 수 있다
print(a[a>2])
 

cs



*Data 형변환 :




+ Recent posts