2017년 4월 20일 목요일

[Machine Learning] 3. Supervised Learning - Regression

빅데이터에서의 Regression 회귀분석에 주로 쓰이는 기호/용어가 있다.

y = Θ0 + Θ1X1 + ... + ΘpXp
  = ΘTX + ε

... (기호 못 쓰겠다.. gg)
(Θ는 회귀계수를 나타내는 vector (1xN matrix)
(ΘT는 theta transpose)

회귀식은 hypothesis라 하여 아래와 같이 나타낸다.
hΘ(x) = ΘTX

Cost function = mean squared error
J(Θ) = 1/2m x Σ( hΘ(x) - yi )^2
Find Θ which minimizes J(Θ)

비용함수 J(Θ)의 최소값을 찾기 위한 방법에는 크게 2가지가 있다.
1. Normal Equation : 미분해서 0이 되는 값 구하기
2. Gradient descent method

가장 큰 차이점은 Normal Equation의 경우 시간복잡도가 O(p^3)
Gradient descent method가 O(p^2)이다.
데이터가 크면 선택의 여지 없이 Gradient descent method를 써야할 것이다.


Linear Regression
p-value를 통해 유효한 feature 및 그에 대응하는 Coefficients 를 통해 선형 회귀식을 도출한다.

여러가지 Variable 중 선택하는 방법엔 크게 4가지가 있다.

  - All Subsets
      : 모든 경우의 수(2^k) 수행해보기
  - Backward Elimination
      : 모든 변수를 포함한 회귀식을 수행한 뒤, 원하는 유효 수준(p-value)기 되지 않는 변수를 하나씩 삭제한다.
  - Forward Selection
      : Backward와 반대로 변수를 하나씩 넣어보고 가장 유효한(작은 p-value) 변수를 하나씩 추가한다.
  - Stepwise Selection
      : Forward Selection, Backward Elimination을 한번씩 수행한다.

계산 비용은 예측 가능한대로다.
All Subsets > Stepwise > Forward > Backward

일반적으로 Stepwise를 쓰나, 계산이 많은 경우 Backward를 수행한다.




[Machine Learning] 2. Pre-processing (Preparation)

Big Data Analytics에 있어서, 상당 부분 시간이 소요되는 부분은
사실 분석보다는 분석을 위한 준비 단계(데이터 수집+데이터 정제)이다.








참조 :


최근 관련 시장을 보면, Paxata, Datameer, Alteryx와 같은 툴 뿐 아니라, IT 기업에서 다양한 가치와 경험을 내걸고 출시하고 있는 솔루션들이 많다. 
 ex. ETL(AWS Glue), Data Preparation(Google DataPrep)


Data Preparation이라는 무슨 작업일까?

data 정제 및 분석에 알맞은 형태로 변환이라는 넓은 범위에서 보면 상당히 다양하다.

 - missing value 제거 
 - 데이터 추가 (ex. Timestamp field)
 - type 확인하기 (ex. number, string, categories, etc)
 - replace values
 - split values with delimiter
 - data scaling : 분석 모델에 따라 필요한 경우가 많다. 
     (ex. log(x), sqrt(x), 1/x, x^2, exp(x), 표준화(X-μ/σ)
 - dummy variables(indicator variable) 
     . 범주형 data에 대해 필드를 추가하여 0 or 1로 나타냄.


Machine Learning Series에서는 이 정도로만 다루고 넘어가도록 하자.

[Machine Learning] 1. Introduction

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
[Machine Learning Series]
1. Introduction (4/20 upload)
2. Preprocessing (4/20 upload)
3. Supervised Learning - Regression (4/20 upload)
4. Supervised Learning - Classification (4/20 upload)
5. Supervised Learning - Neural Network
6. Supervised Learning - Decision Trees
7 Supervised Learning - Support Vector Machine
8. Unsupervised Learning - Clustering
9. Association Analysis - Text Mining
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Machine Learning

What is machine learning?
내가 좋아하는 단어를 포함하는 정의로 하면,
예제 데이터 혹은 과거 데이터를 이용하여, 요구 성능을 최적화하는 것! 
Optimize a performance criterion using example data or past experience.


분석 프로세스
Selection : 다양한 source로부터 data를 수집
Pre-processing : data 클린징
Transformation : 분석을 위한 format으로 데이터를 변경
Machine Learning/Data Mining
Interpretation/Evaluation : 의미 있는 결과를 도출


Machine Learning Tasks
 - Association Analysis 
     : 연관성 분석 (ex. 목요일 밤, 마트에서 맥주를 사고 나면, 기저귀를 같이 산다.)

 - Supervised Learning
     : training/sample data에 y값에 대한 결과가 존재
     . Classification 
         : 분류 (ex. 스팸인지 아닌지, 신용등급 평가)
     . Regression/Prediction
         : 분류를 포함한 다양한 회귀분석 기법 (ex. 중고차의 가격 예측)

 - Unsupervised Learning
    : y가 없는 data에 대한 분석
     . Clustering
       
 - Reinforcement Learning
     . Decision making
 - Deep Learning

2017년 3월 10일 금요일

2017년 3월 9일 목요일

AllFusion ERwin Data Modeler 7

AllFusion ERwin Data Modeler 7 를 이용해서
Logical Model, Physical Model을 개발/관리


개발 DB는 PostgreSQL 이었는데, MySQL.erwin_fe-template으로 별문제가 없어서 그냥 쓰기로 했다.


Logical Model
Format > Display Level >







Physical Model

2016년 12월 7일 수요일

JVM 메모리를 넘는 Huge Excel 파일 입출력

https://poi.apache.org/spreadsheet/limitations.html

  위의 링크 내용 중 메모리에 관한 내용만을 추리면 아래와 같다.


- - - - - - - - - - - -

디폴트 POI 클래스들을 쓰는 것만으로는 memory의 한계가 있다. 
그러므로 매우 큰 Excel 파일을 읽거나 쓰려고 한다면 Out of memory를 만나게 될 것이다.
Main memory에 Excel 처리를 위한 객체를 올려서 작업하는 스타일 때문인데, 이것을 극복하기 위한 방법이 있다.

* 매우 큰 파일을 쓰기 위한 SXSSFWorkbook이 있다. 이것은 data를 streaming으로 쓸 수 있도록 도와준다.

* 매우 큰 파일을 읽기 위해서는XLSX2CSV 을 참고해 볼 수 있다. Excel 파일을 streaming 형태로 읽을 수 있도록 하며, 읽어들이는 정보의 한계가 있으므로 필요할 경우 수정해서 사용할 수 있다.

- - - - - - - - - - - -

  위의 내용 중 매우 큰 Excel 파일 읽기에 대한 경험이 있다. 소스 코드(XLSX2CSV)를 참고로 하여, Excel(XLSX)를 파싱하면서 몇가지 문제가 겪었다.

  일단 Excel(XLSX) 파일은 XML 파일들과 그 외 메타데이터를 포함한 압축파일이다. (그래서 .xlsx 파일을 확장자만 .zip 파일로 변경하면 압축해제를 할 수 있기도 하다.)
  아무튼 XLSX2CSV 예제는 엑셀을 XML 형태로 읽어 들여 element 별로 처리를 해서 데이터를 읽도록 되어 있다.
  XML Parsing 라이브러리를 사용해서 streaming으로 읽기 작업을 처리할 수 있게 된 것인데, 그러면서 생긴 제약이 Excel에서 비어 있는 셀에 대해서 xml이 비어있을 수 있는 문제가 발생하게 된다. 그래서 실제로 사용하면서 필요했던 내용들을 어떻게 보면 하드코딩 방식으로 때워가며 사용했었다.

  가장 일반적인 형태로 xml의 element가 비어 있는 시나리오가 3가지가 있었고, 그러한 상황에 대처하기 위해 method를 추가하는 식으로 작업을 했다.

  매번 재작업하기 보다는 미리 정리해놓고 사용할 수 있었으면 좋겠다는 생각이 들어서 github repository에 올려놓았다.

https://github.com/sungpeo/large-xlsxtocsv


Java finalizer

GC 공부하면서 Finalize에 대한 설명을 들었는데,
난 그게 뭔지 여태 몰랐던 거였음. 소름.

link : http://www.javatpoint.com/difference-between-final-finally-and-finalize


There are many differences between final, finally and finalize. A list of differences between final, finally and finalize are given below:
No.finalfinallyfinalize
1)Final is used to apply restrictions on class, method and variable. Final class can't be inherited, final method can't be overridden and final variable value can't be changed.Finally is used to place important code, it will be executed whether exception is handled or not.Finalize is used to perform clean up processing just before object is garbage collected.
2)Final is a keyword.Finally is a block.Finalize is a method.