jupyter ubuntu linux daemon으로 설정하기

Published / by greennuri

ubuntu에서 jupyter daemon으로 설정하기

다음과 같은 방식으로 서비스 설정 파일을 작성한다.

위치 : /etc/systemd/system/
파일명 : ipython-notebook.service

내용
Unit
type=simple
PIDFile=/var/run/ipython-notebook.pid
ExecStart=/usr/bin/ipython notebook –no-brower
User=ipynb
Group=ipynb
WorkingDirectory=/home/ipynb/notebooks

Install
WantedBy=multi-user.target

위의 설정 파일에서는 서비스를 돌리는 계정과 그룹을 ipynb로 정의 하고 있다. 그러므로 계정을 추가 해야 한다

useradd ipynb
su – ipynb
cd $IPYNB HOME ipynb로 계정 전환후 ipython 홈 디렉토리로 이동한다.
systemctl daemon-reload
systemctl enable ipython-notebook
systemctl start ipython-notebook

jupyter에서 암호 설정하기

Published / by greennuri

출처 :
http://jupyter-notebook.readthedocs.io/en/stable/public_server.html

jupyter notebook을 서버로 운영하다 보면 주피터를 실행시키면 token을 입력해야지 웹 브라우저에서 접근이 허용가능하게 되어 있다.

아무나 접속하지 못하게 하기위한 방법인데, 이게 좀 길고 프로세스를 다시 뛰울때 마다 바뀌기 때문에 가끔은 햇깔리기도 하다.
그래서 고정된 암호를 설정하는 방법을 찾아 보니 다음과 같은 방법이 있다.

주피터 설정은 ‘jupyter_notebook_config.py’파일을 편집 하면 된다.
이 파일의 위치는 $HOME.jupyter\jupyter_notebook_config.py 이다.
이 파일이 없을 경우 아래와 같이 입력 하면 작성된다.
‘jupyter noteook generate-config’

간단히 암호를 설정하려면 다음과 같이 입력 하면 된다.

‘$ jupyter notebook password
Enter password: ****
Verify password: ****
[NotebookPasswordApp] Wrote hashed password to /Users/you/.jupyter/jupyter_notebook_config.json’

위와 같이 jupyter notebook password를 입력하면 암호를 입력받고 그 암호를 암호화시켜서 jupyter_notebook_config.json으로 저장 된다.

pyspark dataframe 관련함수 1

Published / by greennuri
  1. rdd -> dafaFrame 변환
    dataframe df = spark.createDataFrame(rdd,columns)
    columns : array of string
    ie
    rdd에 두개의 컬럼이있다고 치고
    dataFrame df = spark.createFataFrame(rdd,["key","value"])

  2. 기존 데이터 프레임 컬럼에 기존 컬럼 데이터로 새로운 컬럼 더하기
    df = df.withcolumn(new_column_name, function | column)
    ie. 기존 데이터 그대로 새로운 컬럼에 할당
    df = df.withcolumn("new_column", df["value"])
    ie. 기존 데이터에 “test” 문자열을 더해서 할당 하기
    df = df.withColumn("new_column", df["value"]+"test")
    ie. 기존의 데이터에 사용자 정의 함수 결과를 새로운 컬럼으로 추가 하기
    from pyspark.sql.functions import udf
    from pyspark.sql.types import *
    def plus_text(str):
    return str + "_test"
    udf1 = udf(plus_text, StringType())
    df = df.withColumn("col1", udf1("content"))

pyspark와 zeppelin 연동하기

Published / by greennuri

분산 처리 플랫폼 중 하나인 스파크(spark)를 제플린(apache zeppelin, 웹 개발 플랫폼 아님)) 연동 시키기 위한 삽질을 정리

제플린을 기준으로 스파크 설정

현재 제플린은 https://zeppelin.apache.org/download.html 홈페이지에서 다운 받을수 있으며 버젼은 0.7.3(2018.5.7일 현재)이며
이 버젼은 스카프 2.1, 2.2까지 지원한다.

스파크는 https://spark.apache.org/downloads.html 링크에서 다운 받을수 있으며 최신 버젼은 2.3.0까지 나와 있지만, 제플린과 연동을 위해서는 2.1.0을 추천(2.2버젼도 지원 된다고 하지만 좀 애매해서 한 버젼 낮은걸 사용)

그리고 spark 2.1.0 버젼은 python 3.6 버젼에서 호환성 문제(오류가 생김… 오류 생기니깐 호환이 안 맞는거 맞지 않을까…)

그래서 spark 2.1.0 설정에서 PYTHON_PATH에 python 3.5 버젼 python 파일을 설정해야 함.

아래 링크에서는 spark 2.1.0에서 python 3.6에서 사용하기 위한 픽스를 설명

http://www.blog.howechen.com/fix-compatibility-of-apache-spark-2-1-0-with-python-3-6/

그냥 아나콘다에서 python3.5 환경 추가 시켜서 PYTHON_PATH에 할당하고 사용함..

귀차니즘… ^^

Published / by greennuri

Markdown test
writing with Markdown is quick and easy. And reading Markdown is just as nice!

  • It’s just plain text.
  • No need to use the mouse.

강화학습 #2

Published / by greennuri

강화학습 #2

MDP(Markov Decision Process)

MDP는 이전 포스트에서 상태, 행동, 보상, 정책으로 구성 되어 있다고 적었는데

더 정확히 말하면 MDP는 [상태, 행동, 보상, 상태변환확률, 감가율]로 구성 되어 있습니다.

개별 요소에 대해 더 정확히 풀이 하면 다음과 같습니다.

이해를 간단히 하기 위해서 그리드 월드(격자로 표현 가능한 세상)를 중심으로 표현 합니다.

*상태

  • 그리드 월드에서 상태는 에이전트가 위치한 좌표를 의미 합니다.
  • 5*5 격자 그리드 월드 일 경우 나올수 있는 경우의 수는 25가지가 됩니다.
  • \(S = {(1,1),(1,2),(1,3),,,(5,5)}\)이 됩니다.
  • 그리고 어떤 특정 시간 \(t\)에 상태값을 표현 하는 것은 \(S_t\) 로 표현하고, 이 값이 \((1,3)\)일때 다음과 같이 표현 됩니다.
  • \(S_t = (1,3)\)
  • 어떤 상태 t에서의 상태 \(S_t\)는 정해져 있지 않습니다. 때에 따라서 \(t=1\) 일 때 \(S_t = (1,3)\)일 수도 있고, \(S_t=(4,2)\)일 수도 있습니다. 이러한 것을 확률 변수라고 합니다.
  • \(S_t=s\) 이 식은 “시간 \(t\)에서 상태 \(S_t\)가 어떤 상태 \(s\)다를 표현
  • 행동
  • 에이전트가 상태 (S)일 때 할수 있는 행동의 집합은 (A)
  • 행동 집합 (A)의 한 원소는 (a)로 표현.
  • 어떤 특정 시간 (t)에서 하나의 행동은 (A_t=a)로 표현
  • (A_t)는 어떤 특정 시간(t)에서 선택할 행동, 어떤 행동을 할 것인지를 정의한것이 아니기 때문에 전체집합(A)으로 표현
  • 그리드 월드에서의 행동은 다음고 같다
  • (A = {up,down,left,right})

강화학습 #1

Published / by greennuri

기계학습

  • 지도학습(Supervised Learning) : 주어진 데이터와 정답이 있어서 데이터를 통해서 정답을 판별하는 패턴을 학습
    • 분류기(Classification), 회귀분석(Regression)
  • 비지도 학습 (unsupervised Learning): 주어진 데이터를 개별적인 기준으로 비슷한것 끼리 묶는것.
    • Cluster, Topic Modelling
  • 강화학습(Reinforcement Learning) : 보상(Reward)을 통해 학습 하는 일련의 과정
    • 어떠한 환경에서 에이전트(즉 컴퓨터)가 어떤 행위를 통해 목표를 구행해 가면서 그 과정에서 보상을 받고 그 보상(보상이 긍정적인 것만 있는것은 아님, 때론 부정적 보상도 받음)을 통해 학습을 이루어 나감.
      흔히 강화학습에 대한 슬라이드 보면 스키너의 행동 심리학 실험(스키너 상자)을 주로 예를 든다.
      내용은 실험실에서 쥐에게 어떤 특정 버튼을 누르면 쥐가 좋아하는 먹이를 주게 하여 그 버튼을 계속 누르게 하는 보상을 통해 행동을 강화(Reinforcement)하는 실험을 이야기 한다.
      해당 내용 링크(스키너 상자)[https://www.youtube.com/watch?v=R4iK1rZKu4I]

    아래 그림은 강화학습을 간략히 표현한 그림.

    강화학습

    강화 학습은 어떠한 환경과 에이전트(컴퓨터)가 주어지고 에이전트가 어떤 상태에서 다음 상태로 가기 위한 어떤 행동을 수행하면, 그 결과로 보상을 받으면서 계속 자신의 상태와 행동을 계속 수행해서 목적한바를 수행 하는 과정을 의미. 강화학습은 이 과정을 모사하여 학습을 하고, 재현하는 것을 의미

강화학습은 어떤 문제를 푸는 과정을 모사하고 학습

이를 위해서 문제가 정의 되어야 하는데 이 문제는 순차적 행동 결정 문제이어야만 가능.

순차적 행동 결정 문제는 어떤 행동을 행하는데 있어 순서가 있고 지금 할수 있는 행동이 이전에 영향을 받는것을 의미.

간단히 말해서 동전을 100번 던져서 앞 뒤가 나올 확률은 순차적 행동 문제가 아님, 왜 냐면 동전을 10번째 던지나, 20번째 던지나 나오는 확률값은 똑같기 때문이다.

순차적 행동의 예제는 유명한 알파고나, 아케이드 게임처음 이전 혹은 지금의 행동이 다음의 내 행동에 영향을 주는 경우를 의미

이러한 순차적 행동을 풀기 위해서 마코프 의사결정 과정(Markov Decision Process)을 통해 문제를 수학적으로 정의 한다.

마코프 의사 결정과정은 마코프 과정(Markov Process)의 한 분류로서, 마코프 과정은 시간축에 따라서 상태가 변하는 것을 확률 개념으로 추론하여 시간의 변화에 따른 상태의 변화를 확률적으로 표현한다.

마코프 과정

상태 관측 가능 상태 관측 불가
상태 변화가 자동적(No Agent) Markov Model Hidden Markov Model
상태가 행동에 의해 바뀜(Single Agent) Markov Decision Process Partially Observable Markov Decision Process

kind of markov processes

위에서 보듯이 마코프 과정은 상태 변화가 자동적으로 이루어지고 모든 상태가 관측 가능하면 마코프 모델로, 상태가 숨겨지면 은닉 마코프모델로 모델링한다.

상태 변화가 자동적, 행동에 의해 바뀜의 차이는 상태와 상태 사이에 행동이라는 과정이 있냐 없느냐의 차이이다 .

강화학습은 마코프 의사결정 모델을 통해서 상태와 상태의 변화에 행동이 포함이 된다.

강화학습에서는 에이전트(컴퓨터)와 환경사이의 상호작용으로 학습을 수행한다.

강화학습을 마코프 의사결정 모델을 통해 처리 하기 위해서는 다음과 같은 값들이 필요로 하다.

에이전트가 움직일수 있는 환경이 그리드 월드라고 가정하면 다음과 같이 설명 할 수 있다.

그리드 월드 : 정사각형 좌표위에서 한칸씩 움직여서 원하는 위치로 옮길수 있는 환경

  1. 상태
    1. 에이전트의 상태 값. 에이전트가 현재 그리드 월드 위에서 어디에 있는지 나타내는 좌표값
  2. 행동
    1. 상태에서 할수 있는 행동의 집합, 그리드 월드에서 상하좌우로 움직일수 행동을 결정 할수 있으므로, 행동은 상하좌우가 된다.
    2. 에이전트가 행동을 취하면 환경은 상태를 변경시키고, 보상을 주게 된다.
  3. 보상
    1. 그리드 월드에서 어떤 행동을 선택 했을때, 그 행동에 대한 보상,’
    2. 보상은 꼭 긍정적이지만은 않다 경우에 따라서는 부정적인 보상을 받기도 한다.
    3. 보상은 상태 변화에 대한 보상이 아니라, 행동에 대한 보상’
  4. 정책
    1. 어떤 상태에서 어떤 행동을 취할것인가에 대해 결정 하는 과정을 정책이라고 한다.

좀더 엄밀히 말하면 이외에 여러가지 다른 변수를 포함하여 순차적 행동 문제를 모델링 한다.