실제 비즈니스에서 많이 활용되는 사례를 중심으로 어떻게 기존 데이터를 이용하여 알고리즘을 선택하고, 학습하여, 예측모델을 구축 하는지 jupyter notebook을 이용하여 실제 코드를 이용하여 실습할 수 있다.
강의 초반에 강조하는 것 처럼, 머신러닝 알고리즘은 나중에 자세히 설명하는 과정이 따로 있고, 이번 강의는 실제 어떻게 활용하는지에 완전히 초점이 맞추어져 있어서, 알고리즘은 아주 간략한 수준으로 설명해 준다. (좀 더 구체적인 내용은 심화과정이 따로 있음)
http://blog.naver.com/freepsw/221113685916 참고
https://github.com/freepsw/coursera/tree/master/ML_Foundations/A_Case_Study 코드 샘플
2. 2
Week 1. Overview
다른 ML과정과의 차별점으로 실제 문제를 해결하는 방식으로 접근함
과정의 수준 과정의 대상자
• 데이터를 이해하고자 하는 개발자
• 데이터 사이언티스트가 되고 싶어하는 엔지니어
• 수학을 조금 알면서 데이터를 분석하고 싶어하는 사람들
• 이해를 위해 미리 알아야 할 정보는 최소화 하고,
• 문제를 해결하는 방법에 대한 내용을 최대화
• 데이터를 이해하고자 하는 개발자
• 데이터 사이언티스트가 되고 싶어하는 엔지니어
• 수학을 조금 알면서 데이터를 분석하고 싶어하는 사람들
3. 3
Week 1. Development Environment
Python, IPython Notebook & GraphLab Create
설치 가이드 설치 절차
• 데이터를 이해하고자 하는 개발자
• 데이터 사이언티스트가 되고 싶어하는 엔지니어
• 수학을 조금 알면서 데이터를 분석하고 싶어하는 사람들
• Anaconda 4.0.0 설치 및 가상환경을 이용한 환경 구성
• Python
• Jupyter
• Sframe
• GraphLab Create
• GraphLab Create(상용제품, trial)을 사용하는 이유
• 문제해결에 좀 더 많은 시간을 할당하기 위함.
• SW에서 제공하는 기능을 가능한 활용
https://turi.com/download/install-graphlab-create.html?email=freepsw%40gmail.com&key=2F8A-2D9E-43DE-3AC0-3312-B6EA-79CE-1BF5
• 데이터를 이해하고자 하는 개발자
• 데이터 사이언티스트가 되고 싶어하는 엔지니어
• 수학을 조금 알면서 데이터를 분석하고 싶어하는 사람들
https://www.coursera.org/learn/ml-foundations/supplement/5HQGl/reading-getting-started-with-python-ipython-notebook-graphlab-create
# 1. 필요 라이브러리 설치
> sudo yum install zlib-devel bzip2 bzip2-devel readline-devel sqlite3 sqlite-devel openssl-devel –y
> sudo yum install freetype freetype-devel libpng-devel -y
# 2. Anaconda 설치
> wget https://repo.continuum.io/archive/Anaconda2-4.0.0-Linux-x86_64.sh
> bash Anaconda2-4.0.0-Linux-x86_64.sh
à $PATH에 anaconda에서 제공하는 python 경로가 포함되도록 설정
à ~/.bash_profile에 ” export PATH=$HOME/anaconda2/bin:$PATH ”
# 3. Anaconda 가상환경 구성
> conda create -n gl-env python=2.7 anaconda=4.0.0
# 4. Activate the conda environment
> source activate gl-env
# 5. Install your licensed copy of GraphLab Create
> pip install --upgrade --no-cache-dir https://get.graphlab.com/GraphLab-
Create/2.1/freepsw@gmail.com/2F8A-2D9E-43DE-3AC0-3312-B6EA-79CE-1BF5/GraphLab-Create-License.tar.gz
à 코세라 강의를 위한 라이센스를 발급받고 이를 이용하여 설치 (https://turi.com/learn/coursera/)
# 6. Jupyter Notebook 실행 (.ipynb 파일이 있는 폴더에서 실행)
> conda install ipython-notebook
> Jupyter notebook
# 7. Browser로 접속 (http://서버IP:8888)
• 본인 Notebook/PC로 실행하면 문제없음.
• UI가 없는 Server를 활용할 경우, Juypter를 외부에서 접속할 수 있는 서버로 실행해야함.
• http://jupyter-notebook.readthedocs.io/en/latest/public_server.html#notebook-server-security
4. 4
Week1. Canvas for data visualization
GraphLab Create를 이용하여 시각화한 웹서버 접근방법 (sf.show() 실행시)
로컬 환경인 경우 원격서버 환경
• 원격서버(AWS, GCE, 개발서버 등)에 실습환경 구축한 경우
• [문제] Link 클릭시 접속 오류 발생
• [해결] SSH Port Forwarding을 통하여 접속
• 실습환경을 local PC에 설치한 경우 매뉴얼 대로 동작
# local PC에서 실행 (port forwarding 연결)
> ssh -L 37025:localhost:37025 rts@192.168.X.X (원격서버 ip)
• 출력된 link를 통해 graphlab creat 화면 접속
참고 : http://blog.naver.com/freepsw/220892098919
# local PC Browser
http://localhost:37025/index.html 접속
6. 6
Week 2-1. Linear regression modeling
주변 주택시세(크기 기준)를 이용하여 선형모델을 생성해 보자
• 가상의 선(W0, W1)을 그리고 예측값과 실제값의 차이(Residual
sum of square)를 계산.
• 이 값이 최소가 되는 선형을 선택하여 가격을 예측
• 집의 크기와 가격을 기준으로 그래프를 그리고,
• 집의 평수에 해당하는 가격을 대략 산정 가능
직관적인 분석을 통한 시세 예측 모델 Linear regression을 활용한 예측 모델
7. 7
Week 2-2. Evaluating regression model
Feature를 추가하여 모델의 예측 정확도를 높인다
• 수강생의 역량
• Capstone 프로젝트 결과물 등
• 2차원에서는 단순한 선형을 가지지만,
• Feature가 추가되면서 고차원의 선형으로 데이터를 분류함.
Feature 추가에 따른 선형의 변화 (고차원) 수강생들이 회사에 취직할 확률
8. 8
Week 2. Assignment
Graphlab을 이용하여 탐색적 분석 및 regression model 평가
• Graphlaba에서 제공하는 api를 이용한 모델생성• Feature와 price간의 관계를 다양한 chart를 이용하여 시각화
Graphlab create를 이용한 시각화 Regression model 생성
• 생성된 모델에 대한 평가
10. 10
Week 3-1. Classification modeling
음식(메뉴)에 대한 평가(긍정,부정)를 분류하는 서비스
• 1) 모든 평가 댓글을 취합
• 2) 특정 메뉴가 포함된 문장만 추출
• 3) 감성분석을 위한 분류기 적용
• 4) 메뉴별 평가정보 추출
• 고갱의 댓글 또는 평가에 대한 문장을 분석하여,
• 특정 메뉴에 대한 긍정/부정의 감성분석을 하고,
• 어떤 메뉴가 가장 큰 긍정적인 평가를 받는지 확인
개념적인 모델 상세 모델
Classifier의 성능(예측정확도) 중요
11. 11
Week 3-1. Simple Threshold Classifier
긍정/부정의 단어에 일정한 점수를 부여하여 분류하는 모델
• 긍정/부정의 단어를 직접 구성해야 함. (모두 파악할 수 있나?)
• 단어별로 긍정/부정의 강도가 다름 (Greate > good)
• 단어별로 가중치가 필요하지 않을까?
• 긍정/부정의 단어를 사전에 정의함.
• 입력된 문장에 포함된 단어를 집계하여 score의 합을 계산
모델의 구성 Threshold classifier의 문제점
• 하나의 단어로 긍정/부정을 평가하기 어려움
• Good à 긍정
• Not Good à 부정
Classifier를 학습
(후반부에 자세히 설명)
좀 더 복잡한 feature를 이용
12. 12
Week 3-1. Linear Classifier
단어별로 가중치를 부여하여, 긍정/부정의 score로 분류
• 아래 문장에서 긍정을 표현하는 단어의 가중치가 높아서
• 긍정으로 분류함
• 가중치가 부여된 단어의 score 합계를 이용하여
• 긍정/부정을 분류함
모델의 구성 문장의 Scoring
14. 14
Week 3-2. Training and evaluating a classifier
Classifier를 학습한다는 것은, Error를 최소화 하는 최적의 weight를 찾는것이다
• Training set를 이용하여 최적의 weight를 학습하고,
• Test set를 이용하여 정확도를 검증한다.
• 아래와 같이 가중치가 부여된 경우
• linear regression의 함수를 생성할 수 있다.
Decision boundary 결정 최적의 weight 탐색 과정
• 위 함수를 이용하여 긍정/부정을 분류 가능
awesome 2회
awful 1회
15. 15
Week 3-2. False positives, false negatives
학습된 모델이 예측을 실패하는 유형 이해
• [Spam Filtering]
• FP : 정상 메일을 spam으로 판단하면, 중요한 메일을 읽지
못함.
• [병/질환 진단]
• FN : 실제 병이 있는데, 없는 것으로 판단 à 치료시기 놓침
• FP : 병이 없는데 있다고 판단 à 불필요한 치료비용/독한 약
• False Negative : 부정(Negative)으로 예측한 것이 틀렸다(False)
• False Positive : 긍정(Positive)으로 예측한 것이 틀렸다(False)
모델의 예측 실패 유형 예측 실패의 영향
16. 16
Week 3-2. Learning curves
데이터가 많을 수록 예측 오류는 줄어들지만, 특정 bias(편향) 이하로는 줄지 않음
• 단순한 단어가 아닌 복합 단어를 포함한 파라미터를 추가• 데이터가 많을 수록, 모델의 정확도가 높아짐 (오류가 감소)
데이터와 예측오류의 관계 복잡한 모델은 bias 감소
데이터가 무한대로 증가해도, 오류가 감소하지 않음
• 기존 모델과 비교하여 오류가 현저하게 감소함
17. 17
Week 3-2. Class probabilities
모델의 예측 정확도를 신뢰할 수 있도록 확률로 표현한다
• 입련 문장에서 긍정/부정이 나타날 확률로 계산• 단어를 보고 긍정 or 부정 판단
• 하지만, 실제 문장에는 긍정과 부정이 함께 표현되는 경우가 많음
• Sushi는 맛있지만, 서비스는 별로?
기존 모델의 예측 방식 확률을 통한 예측
• 따라서,
• 이를 특정 문장이 주어졌을때,
• 긍정이 나타날 확률과
• 부정이 나타날 확률로 구분해야 한다
19. 19
Week 4-1. Algorithms for retrieval and measuring similarity of documents
수많은 문서들간의 유사도를 비교하는 방법
• 입련 문장에서 긍정/부정이 나타날 확률로 계산• 단어의 순서는 무시하고,
• 단어가 얼마만큼 나타났는지의 빈도로 유사도를 계산
Bag of Words model (단어 주머니) Word Count 유사도 계산 방식
20. 20
Week 4-1. Prioritizing important words with tf-idf
희소단어들은 기사의 주제를 잘 표현하므로, 가중치를 높여야 한다
• 상용어인 “The”의 비중을 줄이고,
• “Messi”와 같은 의미있는 단어의 가중치를 높임.
• 일부 문서에서만 나타나는 희소단어의 가중치를 높이기 위해서,
• 많이 발생하는 단어의 가중치를 감소시킨다.
• IDF
• Log(전체 문서 수 / 단어가 포함된 문서)
• Log 함수로 아주 큰 수가 나오지 않도록 조정
• 발생빈도 높은 단어 à 0에 가까움.
• 발생빈도 낮은 단어 à 0보다 크지만, 아주 크지는 않음
TF-IDF (Term Frequency – Inverse Document Frequency) TF-IDF 예시
+1을 하는 이유?
문서의 단어 중 말뭉치에 없는 단어가 있을 수 있으므로,
0이 되지 않도록 1을 추가
log0 16 = 4
(여기서는 log0로 가정)
• 최종적으로, Messi라는 단어의 가중치가 20으로 증가되고
• The라는 단어는 0으로 감소
21. 21
Week 4-1. Retrieving similar documents using nearest neighbor 검색
문서간의 유사도를 비교하는 가장 보편적인 기법
• Input : Query article
• Output : 가장 유사한 기사 (1개만 출력)
• Algorithm :
1. Corpus의 모든 article을 검색하면서
2. 유사도(Query article vs article) 비교
3. 전체 중에 가장 유사도가 높은 것만 출력
• 일부 문서에서만 나타나는 희소단어의 가중치를 높이기 위해서,
• Query article : 검색기사 (현재 보고 있는 기사)
• Corpus(말뭉치) : 모든 문서의 총합, 여기서 추천할 기사를 선택
nearest neighbor search 개념 1 - Nearest neighbor
• 거리 기준 : 유사도를 측정할 기준 (distance metric)
• Input : Query article
• Output : 유사한 기사의 목록 (List of K)
K – Nearest neighbor
23. 23
Week 4-2. Clustering documents task overview
라벨이 없는 article들에서 관련된 기사 및 그룹을 발견하는 방식
• 3개의 클러스터로 지정 후
• 랜덤 중심점 3개로 시작하여, 반복하여 중심점을 조정하면서
• 클러스터를 최적화 하는 기법
• 단어의 빈도를 이용하여 기사(문서)를 자동으로 분류하는 방식
• Input : 문서 (vector형식)
• Output : Cluster Label (문서별로 label을 부여, 스포츠/정치 등)
Clustering 개념 거리 중심의 클러스터링 (K-Means)
• 문서에 포함된 단어가 2개(word1, word2)만 존재하는 경우,
• 위와 같이 2차원 평면으로 표현가능 (실제는 더 많은 고차원)
• 가장 가까운 거리의 문서 집합을 클러스터로 분류하여 라벨링
24. 24
Week 4. Assignment
Wiki의 인물사전의 설명을 기준으로 각 인물간의 유사도를 분류
• TF-IDF 필드를 이용한 유사도 모델 생성 및 평가• Word_Count : ”Text” 필드의 단어 발생 빈도
• TF-IDF : 각 단어가 문서들(Corpus)에 발생한 빈도
Word를 이용한 단어 빈도 계산 거리기반 유사도 모델
• Elton John과 가장 유사
한 사람은 “Phill Collins”
26. 26
Week 5-1. Recommender systems
라벨이 없는 article들에서 관련된 기사 및 그룹을 발견하는 방식
1. 인기도 기반 (Popularity)
• 가장 단순 (뉴스에서 활용, 가장 인기 있는 기사 추천)
• 독자에게 공유된 횟수
• 문제
• 개인화(개인별 선호도)에 대한 고려 없음
2. Classification Model
• 개인별 feature로 모델 학습
• 장점
• 개인의 선호도 반영
• 문맥(시간, 활동내용 등)을 반영한 추천
• 개인의 이력을 반영한 추천
• 단점
• Feature가 부족할 수 있음 (나이, 성별 등..)
• à collaborative filtering으로 한계 극복
• 개인화 (Personalization)
• 사용자와 Item을 연결 (User vs Product/Movie …)
• 추천 시스템의 핵심 개념
• 시간에 따른 변화
• 작년에 구매한 유아 운동화를 몇년 후에는 구매하지 않음
• 시간에 따라 다른 추천
• Item의 유사성
• 음악 청취시 비슷한 음악을 연속적으로 듣는 경향
Recommender system의 특징 추천 모델의 유형
28. 28
Week 5-2. Collaborative Filtering
구매이력을 기반으로 특정 상품을 산 사람들은 다른 특정 상품을 살거라는 가정
• 특정 상품이 압도적으로 많이 구매되는 경우, (예를 들어 기저귀)
• 어떤 상품을 구매하더라도, 무조건 그 상품(기저귀)를 추천함
• Matrix C
• 사용자가 구매한 상품간의 대칭 Matrix
• 특정 상품을 구매한 사람이 어떤 상품을 동시에 구매했는지
쉽게 확인 가능
Co-Occurrence Matrix (상품 구매 매트릭스) Co-occurrence matrix의 문제점 (populiarity)
• 기저귀와 아기 물티슈를
동시에 구매한 사람 수
• 이 Matrix를 이용하면,
• 특정 상품을 구매한 사람이 구매한 다른 상품의 갯수(많이 구매)
순서로 추천할 수 있다.
• 기저귀를 먼저 추천 à
29. 29
Week 5-2. Normalizing co-occurrence matrix
Popularity를 기준으로 유사도를 가지도록 데이터를 정규화
• 구매 이력에 있는 각 상품에 대하여,
• 추천할 상품과의 점수를 구하고, (Co-occurrecne matrix 사용)
• 이를 평균으로 나누어서 가중 점수를 계산
• 내가 구매한 이력이 (diaper, milk)만 있고,
• 나머지 상품에 대한 추천점수를 계산해야 한다면,
• Diaper와 milk와 다른 상품간의 점수를 각각 계산하고,
• 이를 평균으로 계산
• 상품 i와 j를 동시에 구매한 사람의 수를
• 상품 I 또는 j를 구매한 전체 사용자 수로 나누어 유사도를 구한다.
• 이 공식을 이용해 전체 Matrix를 정규화
Jaccard similarity Weighted Average of purchased items
[ Co-occurrence Matrix의 문제점]
• 현재 상태(특정 상품]만 추천이 가능
• 즉, 과거의 구매이력을 이용하여 추천하지 못함.
• 왜냐하면, matrix에서 전체 이력을 계산한 값이 없기 때문…
• 이 점수가 가장 높은 순으로 추천한다
• Baby wipes 추천 점수
• (가중 평균점수)
[ 한계점]
• 문맥(시간 등), 사용자 개인정보, 제품정보를 반영하지 못함.
• Cold Start Problem (신규 사용자 또는 신규제품은?)
30. 30
Week 5-3. Matrix Factorization
데이터를 통하여 사용자 또는 상품의 특징을 학습하는 방법 (행렬 분해)
(예를 들어, 영화 평점데이터를 통해 사용자 및 영화의 특징 추출)
• Feature : X1, X2 (영화의 특징)
• 가중치 : 𝜽(𝒖𝒔𝒆𝒓)
• 예측평점 : 𝒚 = 𝜽 𝒋 𝑻
(𝒙 𝒊
)
• 즉, 사용자가 영화를 평가했던 이력이 있고,
• 사용자 및 영화의 feature을 가지고 있다면,
• 여기서는 romance, action 등의 선호도
• 실제는 사용자(나이, 성별, 거주지역 등), 영화(감독, 배우, 장르 등)
• 이를 통해서 가중치를 학습하여 최적의 값을 찾는다. (cost 최적화)
• Feature(특징)이 정의되지 않은 경우, 이를 데이터를 통해 학습
• 먼저, 사용자(U)와 영화(V)의 feature matrix를 이용하여 점수
(rating)을 예측해 보자.
데이터를 통해 특징을 찾아서 분해(Matrix Factorization) Feature를 통해 학습하여 가중치 추출
• Andrew NG 강의
• Week 9 참고 (더 자세함)
• 학습을 통해 𝜽를 최소화
가중치를 통해서 Feature(유형)를 추출
• 가중치를 알면, 평가점수를 기반으로 feature를 추출 가능
• 즉, 사용자 및 영화의 feature를 추출
• 이를 통해 사용자의 유형을 분류할 수 있음
• 사용자 1(Allice)의 3번째 영화(Cute pupple of love)의 평점을 예측해 보자
• 이때 𝜽(𝟏)
은 사전에 학습되었다고 가정한다. [0, 5, 0]
34. 34
Week 6. Quiz
(x1 AND x2) OR (NOT x1 AND NOT x2) 문제를 NN으로 표현하는 방법
• 수식을 2개로 분리하고, 각 결과를 다시 계산
• 총 3단계의 가중치가 필요함
• Z1(w0, w1, w2), Z2(w0, w1, w2), Z3(w0, w1, w2)
• Z1 à -1.5, 1, 1
• Z2 à 0.5, -1, -1
• Z3 à -0.5, 1, 1
• (x1 AND x2) OR (NOT x1 AND NOT x2) 정의
• X1과 X2의 논리 연산 결과 확인
• 아래와 같이 (1 0 0 1)이 도출되어야 정답
문제 문제 풀이 방법
https://www.coursera.org/learn/ml-foundations/discussions/weeks/6/threads/AAIUurrtEeWGphLhfbPAyQ
• 정답을 찾기 위해서는 어떤 가중치(weight)가 주어져야 할까?
• Deep Learning에서는 Cost 최적화를 통하여
• 위의 가중치(w0, w1, w2)를 자동으로 찾아 줌