프로그래밍 Programming
scikit-learn (2) - 선형분류 (훈련데이터 만들기)
2016. 11. 6.scikit-learn (2) - 선형분류 (훈련데이터 만들기) 1. 훈련데이터셋 만들기이 문제는 속성에 따라 인스턴스의 레이블을 지정하는 분류 문제의 한 종류이다. 선택한 두 속성과 목적값으로 만든 본래 데이터셋의 일부 데이터이다. 데이터셋을 임포트한 후 약 75%의 인스턴스를 무작위로 선택하고 남은 인스턴스를 평가 목적을 위해 보유한다.12345678910111213141516>>> from sklearn import datasets>>> iris = datasets.load_iris()>>> X_iris, y_iris = iris.data, iris.target>>> print X_iris.shape, y_iris.shape (150, 4) (150,) >>> from sklearn.cross_va..
matplotlib - <matplotlib.text.Text at 0x7fc3298533d0>
2016. 11. 3.쥬피터 노트북에서 다음과 같이 그래프가 보이지 않는 경우 sklearn_1 In [3]: # 속성을 표준화한다 scaler = preprocessing.StandardScaler().fit(X_train) X_train = scaler.transform(X_train) X_test = scaler.transform(X_test) In [4]: import matplotlib.pyplot as plt colors = ['red', 'greenyellow', 'blue'] for i in xrange(len(colors)): xs = X_train[:,0][y_train == i] ys = X_train[:,1][y_train == i] plt.scatter(xs, ys, c=colors[i]) plt.le..
Jupyter Notebook 셀 크기 조절하기 How to increase/decrease the cell width of the jupyter notebook in browser
2016. 11. 3.Jupyter Notebook 셀 크기 조절하기How to increase/decrease the cell width of the jupyter notebook in browser 아래와 같이 쥬피터 노트북의 소스를 블로그 등에 html 형태로 가져올 때 가로폭이 너무 커서 아래와 같이 스크롤이 생기는 경우가 있다. 한 눈에 볼 수 있도록 창의 크기를 조절해보자. 1. 먼저 Jupyter Notebook 디렉터리를 찾는다. 123(tensorflow)root@localhost:~# jupyter --config-dir/root/.jupyter Colored by Color Scriptercs 2. 해당 디렉토리에 custom 디렉터리를 만들고 아래와 같은 custom.css 파일을 만든다.(width 는..
scikit-learn (1) - 기계학습이란?
2016. 11. 1.scikit-learn (1) - 기계학습이란? 1. 기계학습의 3가지 개념1) 태스크(T)를 해결하기 위해 학습해야 한다2) 태스크를 실행하기 위해 학습할 일부 경험(E)이 필요하다(데이터셋을 통해 표현된다) 3)얼마나 태스크를 잘 해결했는지 파악하기 위한 성능(P)을 측정할 필요가 있다 2. 기계학습기법은 보통 데이터셋으로 대표되는 과거 경험에 의존한다. 본 포스팅에서는 로널드 피셔가 소개한 아이리스 꽃 데이터셋을 사용한다. 해당 데이터셋에는 4개의 속성, 150개의 원소(인스턴스)가 있다. Iris flower data set https://en.wikipedia.org/wiki/Iris_flower_data_set Fisher's Iris Data Sepal length Sepal width Pe..
scikit-learn 을 통한 머신러닝 - 데이터셋 로딩, 학습, 그리고 예측
2016. 10. 31.scikit-learn 을 통한 머신러닝 - 데이터셋 로딩, 학습, 그리고 예측 scikit-learn 을 통한 간단한 머신러닝에 대해 알아본다. 1. 예제 데이터셋 로딩다음과 같이 iris 와 digits 데이터셋을 로딩한다. 123from sklearn import datasetsiris = datasets.load_iris()digits = datasets.load_digits()cs데이터셋은 데이터와 데이터에 대한 메타 데이터를 가지고 있는 일종의 딕셔너리같은 오브젝트이다. 데이터는 .data 로 저장되고, n_samples, n_features 배열을 가진다. 지도학습의 경우, 하나 또는 그 이상의 대응하는 변수가 .target 으로 저장된다. 숫자 데이터셋의 경우, digits.data를 통해..
텐서보드 사용법
2016. 10. 31.텐서보드는 텐스플로우 실행을 통해 생성할 수 있는 요약 데이터를 가지고 있는 텐서플로우 이벤트 파일을 읽음으로써 작동한다. 텐서보드 설치 위치 1/root/anaconda/envs/tensorflow/lib/python2.7/site-packages/tensorflow/tensorboardcs 텐서보드 실행은 다음과 같이 한다. 기본 포트는 6006 이다. 12345(tensorflow)root@localhost:~/tensorflow# tensorboard --logdir=tmp/tf_logsWARNING:tensorflow:IOError [Errno 2] No such file or directory: '/root/anaconda/envs/tensorflow/lib/python2.7/site-pack..
텐서플로우 코드 에러 - ResourceExhaustedError
2016. 10. 31.Deep MNIST for Experts 튜토리얼 실행시 발생할 수 있는 텐서플로우 코드 에러 ResourceExhaustedError 가 발생하는 경우 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120step 18500, training accuracy 1step 18600, training accuracy..
Deep MNIST for Experts - 전체 코드 (2)
2016. 10. 31.텐서플로우 첫걸음에 나오는 전체 코드입니다. 구글 홈페이지 튜토리얼과는 다소 다르네요. mnist_for_expert-1 In [1]: from tensorflow.examples.tutorials.mnist import input_data mnist = input_data.read_data_sets('MNIST_data/', one_hot=True) Extracting MNIST_data/train-images-idx3-ubyte.gz Extracting MNIST_data/train-labels-idx1-ubyte.gz Extracting MNIST_data/t10k-images-idx3-ubyte.gz Extracting MNIST_data/t10k-labels-idx1-ubyte.gz In [2]..
Deep MNIST for Experts - 전체 코드 (1)
2016. 10. 31.mnist_for_expert In [1]: import tensorflow as tf sess = tf.InteractiveSession() In [ ]: def weight_variable(shape): initial = tf.truncated_normal(shape, stddev=0.1) return tf.Variable(initial) def bias_variable(shape): initial = tf.constant(0.1, shape=shape) return tf.Variable(initial) In [3]: x = tf.placeholder(tf.float32, [None, 784]) In [4]: W = tf.Variable(tf.zeros([784, 10])) b = tf.Variabl..
텐서플로우 코드 에러 - FailedPreconditionError
2016. 10. 30.Deep MNIST for Experts 튜토리얼 실행시 발생할 수 있는 텐서플로우 코드 에러 FailedPreconditionError 가 발생하는 경우123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117for i in range(20000): batch = mnist.train.next_batch(50) if i%100 ==..
텐서플로우 코드 에러 - Cannot evaluate tensor using `eval()`
2016. 10. 30.Deep MNIST for Experts 튜토리얼 실행시 발생할 수 있는 텐서플로우 코드 에러 value error 가 발생하는 경우 12345678910111213141516171819202122232425262728293031for i in range(20000): batch = mnist.train.next_batch(50) if i%100 == 0: train_accuracy = accuracy.eval(feed_dict={x:batch[0], y_: batch[1], keep_prob: 1.0}) print "step %d, training accuracy %g" % (i, train_accuracy) train_step.run(feed_dict={x: batch[0], y_: batch[1],..
주피터 노트북 html 파일로 변환하기 How to copy/paste from IPython Notebook to other format
2016. 10. 29.다음과 같이 주피터 노트북의 데이터프레임을 html 포맷으로 변환할 수 있다.123(tensorflow)root@localhost:~/tensorflow# jupyter nbconvert mnist_for_beginner.ipynb[NbConvertApp] Converting notebook mnist_for_beginner.ipynb to html[NbConvertApp] Writing 260242 bytes to mnist_for_beginner.htmlcs 변환 관련 옵션 및 예제 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566..
텐서플로우 따라잡기 MNIST For ML Beginners (3) -Training & Evaluating Our Model
2016. 10. 29.MNIST For ML Beginners (3) -Training & Evaluating Our Model 모델을 훈련시키기 위해, 먼저 모델에게 좋다는 것이 무엇을 의미하는 것인지부터 정의해야한다. 사실 머신러닝에서는 전통적으로 모델에게 나쁜 것 - 통상 cost 혹은 loss 라고 부른다 - 을 정의하곤 하는데, 이는 우리가 만든 모델이 우리가 의도하는 결과에서 얼마나 떨어져있는가를 나타내는 것이다. 에러의 오차를 줄일수록, 모델은 훌륭해진다. 모델이 가진 loss 를 정의하는 좋은 지표중의 하나는 "cross-entropy" 라고 불리는 것이다. Cross-entropy는 우리의 예측이 얼마나 비효율적인지를 측정해주는 도구로서, 관심이 있으신 분들은 다음 링크를 통해 자세한 내용을 찾아볼 수 있다...
텐서플로우 따라잡기 MNIST For ML Beginners (2) - Implementing the Regression
2016. 10. 29.MNIST For ML Beginners (2) - Implementing the Regression 텐서플로우를 사용하기 위해 먼저 임포트한다. 1import tensorflow as tfcs 아래와 같이 변수를 생성하자.1x = tf.placeholder(tf.float32, [None, 784])cs 여기서 x 는 특정 값이 아니다. x는 placeholder라는 것으로 텐서플로우로 하여금 연산을 하도록 요청할 때 우리가 입력하게 되는 값이다. MNIST 이미지의 어떤 수라도 입력할 수 있도록 우리는 이것을 [None, 784] 형태를 가진 부동소수점수의 2-D 텐서로 표현할 것이다(여기서 None 이 의미하는 것은 어떤 값이라도 될 수 있다는 것이다). 그리고 가중치와 편향 역시 필요하다. 이 요..
텐서플로우 따라잡기 MNIST For ML Beginners (1)
2016. 10. 29.MNIST For ML Beginners (1) MNIST 는 Mixed National Institute of Standards and Technology 의 약어로, 아래의 손글씨 이미지 등을 포함한 시각 데이터 셋이다. 이미지와 각각의 이미지에 대한 레이블을 포함하고 있다. 예를 들어, 위의 이미지의 레이블은 각각 5, 0, 4, 그리고 1이다. 본 게시물에서는 이러한 이미지를 관찰하고 숫자를 맞추는 모델을 트레이닝함으로써 텐서플로에 발을 딛는 것을 목표로 한다. 소프트맥스 회귀(Softmax Regression)라고 불리는 간단한 모델로부터 시작한다. 아래와 같이 실습에 필요한 파일을 적당한 위치에 다운로드한다. 앞에서도 언급했지만 MNIST 데이터는 수기 이미지와 그에 대응하는 레이블 이상의 2..
원격지 주피터 노트북 로컬에서 실행하기 Remote Access to Jupyter Notebook via SSHRemote Access to Jupyter Notebook via SSH
2016. 10. 28.원격지 주피터 노트북 로컬에서 실행하기 Remote Access to Jupyter Notebook via SSH 로컬호스트에서 원격지에서 구동중인 Jupyter Notebook 을 실행해보자. 1. 원격지에서 아래와 같이 Ipython notebook 을 실행한다. 원격지에서 브라우저를 띄울 필요는 없으므로 --no-browser 플래그를 추가한다. 해당 포트 방화벽 정책 적용 여부도 확인해본다.12345678(tensorflow)root@localhost:~# ipython notebook --no-browser --port=8889[TerminalIPythonApp] WARNING | Subcommand `ipython notebook` is deprecated and will be removed ..
아나콘다 환경에서의 텐서플로 설치 (Anaconda+Ubuntu+CPU Only)
2016. 10. 26.텐서플로는 구글이 오픈소스로 공개한 차세대 딥 러닝 시스템이다. 텐서플로는 데이터 플로우 그래프를 사용하여 수치 연산을 하는 라이브러리라고 볼 수 있다. 그래프의 노드는 수학 연산을 나타내고, 노드를 연결하는 그래프의 에지는 다차원 데이터 배열을 나타낸다. 1. 설치환경포스팅에 언급된 환경은 Ubuntu 14.04 LTS x64 + CPU Only 기반이다(아래와 같이 그래픽카드 확인해본 결과 GPU 가 아니라 CPU Only 였다).* 리눅스에서 하드웨어를 확인하는 명령은 다음 사이트를 참고한다. http://blog.simplism.kr/?p=1778 12root@localhost:~# lspci | grep VGA00:02.0 VGA compatible controller: Cirrus Logic ..
Eclipse에서의 Git 사용 - (3) Github 연결
2016. 10. 22.Eclipse에서의 Git 사용 - (3) Github 연결 1. github repository 생성https://github.com/new 에서 아래와 같이 저장소를 생성한다. 2. Eclipse Git repositories perspective 로 전환이클립스로 돌아와 Git repositories perspective 로 전환한 후 해당 프로젝트 Remotes > Create Remote > URI Change > Location URI 에서 앞서 생성한 github 저장소의 주소를 입력한다. 하단의 인증정보 입력란에 github 계정 정보를 입력한다. Configure Push > Advanced... > Add All Branches Spec 클릭 > Save and Push master [..
guessing_game 민들기 - (3) Looping
2016. 10. 19.1. 반복문 만들기 현재까지는 정답을 맞출 때까지 질문이 이어지지 않고 1회성으로 끝난다. 이제 필요한 것은 이 과정을 반복작업으로 만드는 것이다. 아래를 보자. 123456789101112131415161718192021222324252627282930313233extern crate rand; use std::io;use std::cmp::Ordering;use rand::Rng; fn main() { println!("Guess the number!"); let secret_number = rand::thread_rng().gen_range(1, 101); println!("The secret number is: {}", secret_number); loop { println!("Please inp..
guessing_game 민들기 - (2) Generating a secret number
2016. 10. 18.1. 난수 발생기 다음으로 해야할 일은 비밀 숫자를 만들어내는 것이다. Rust 는 아직까지는 난수를 발생하는 기능을 표준 라이브러리에 포함하지 않고 있다. 하지만 rand crate 를 제공하고 있으므로, 이 패키지를 이용하면 된다. 외부 크레이트를 사용하기 위해서는 Cargo.toml 을 수정해야 한다. 파일을 오픈하고 dependencies 아래에 아래와 같이 rand 크레이트의 정보를 입력해주면 된다. [dependencies] rand="0.3.0" Cargo.toml 파일의 [dependencies] 는 일종의 패키지와 같다. Cargo 는 dependencies 섹션을 통해 어떤 외부 크레이트와 크레이트의 버전을 요구하는지 파악한다. 이 경우 0.3.0 이 의미하는 것은 0.3.0 과 호환되..
guessing_game 민들기 - (1) Processing a Guess
2016. 10. 18.사용자가 정답을 추측하는 Guessing game 을 만들어보자. 1. 아래와 같이 새로운 프로젝트(guessing_game)을 생성한다. cargo new 명령을 통해서 새로운 cargo 프로젝트를 명명하고, 바이너리임을 나타내는 --bin 플래그를 붙인다.123456789101112131415161718192021bourne@vikander MINGW64 ~/Evariste/workspace (master)$ cd rust-projects bourne@vikander MINGW64 ~/Evariste/workspace/rust-projects (master)$ cargo new guessing_game --bin Created binary (application) `guessing_game` proj..
Eclipse에서의 Git 사용 - (2) 커밋
2016. 10. 16.Eclipse에서의 Git 사용 - (2) 커밋 1. 예제로 사용할 C++프로그램을 만들어보자. 방금 작성한 파일에서 마우스 오른쪽 버튼을 클릭한 후 Team > Commit 를 선택한다. Unstaged Changes 의 파일 전체를 선택하여 Staged Changes 로 옮긴 후, Commit Message 항목에 메시지를 작성한다. 그리고 Commit를 클릭한다. 이제 프로젝트가 [topcoder NO-HEAD] 에서 [topcoder master]로 바뀐 것과 파일과 프로젝에 붙어있던 물음표가 사라진 것을 확인할 수 있다.
Eclipse에서의 Git 사용 - (1) 플러그인 설치 및 저장소 생성
2016. 10. 16.Eclipse에서의 Git 사용 - (1) 플러그인 설치 및 저장소 생성 1. Eclipse 플러그인 Egit 설치Luna 버전부터는 Git이 플러그인으로 기본으로 포함되어 있음필요한 경우 update를 한다. 2. Git Perspective 실행Egit 을 설치/업데이트한 후 Eclipse를 재실행한다.Perspective List에서 Git 아이콘을 클릭하거나 리스트 제일 좌측의 Open Perspective 아이콘을 클릭하여 Git Perspective를 실행한다. 3. 저장소 생성 Perspective에서 C/C++을 선택하고 새로운 프로젝트를 생성한다(File > New > C++ Project).프로젝트위에서 마우스 오른쪽 버튼을 클릭한 후 Team > Share Project 를 선택한다...
Django queryset filter datefield not empty
2016. 10. 15.특정 기간내에 유료회원으로 등록한 유저를 검색하는 쿼리에서 유료회원등록일이 Null 값인 회원이 검색되어 나오는 경우에는 다음과 같이 처리한다.123qs = Member.objects.exclude(reg_date__gt=end_dt).exclude(reg_date__lt=start_dt)\ .filter(~Q(reg_date__isnull=True)) Colored by Color Scriptercs Null 값을 포함하고자 하는 경우에는 다음과 같이 처리한다. 123456 qs = Member.objects.exclude(reg_date__gt=end_dt).exclude(reg_date__lt=start_dt)\ .filter(Q(reg_date__isnull=True)) qs = Member.ob..
Git 설치 및 사용준비
2016. 10. 13.1. Git 다운로드 https://www.git-scm.com/downloads사용중인 운영체제에 맞는 소프트웨어를 다운로드한다. 2. 사용자 계정 생성 12$ git config --global user.name "John Doe"$ git config --global user.email johndoe@example.comcs 3. 기본 편집기 설정 1$ git config --global core.editor "C:\Program Files (x86)\Notepad++' -multiInst -nosession"cs 4. 현재 설정내용 확인 12345678910111213141516$ git config --listcore.symlinks=falsecore.autocrlf=truecore.fscach..
Rust 프로그래밍 - 시작하기 (Rust - Getting Started)
2016. 10. 8.The Rust Programming LanguageRust is a systems programming language that runs blazingly fast, prevents segfaults, and guarantees thread safety. “The Rust Programming Language” (https://doc.rust-lang.org/stable/book) 의 내용을 기반으로 Rust 프로그래밍을 실습하는 포스팅을 게재해보고자 합니다. 먼저 Rust 시작하기(https://doc.rust-lang.org/stable/book/getting-started.html)입니다. 1. 앞으로 Rust 실습에 사용할 아나콘다 가상환경 설치한다. 123456789101112131415161..
Django - Error: That port is already in use.
2016. 9. 20.Django runserver 실행시 Error: That port is already in use. 가 발생하는 경우 아래와 같이 해당 프로세스를 죽인 후 다시 실행한다. 1234567891011Error: That port is already in use.## ps aux | grep -i manageroot 73 0.0 0.0 0 0 ? S
하스켈 리스트
2016. 7. 10.1. 리스트는 같은 종류의 데이터 구조이다.2. 리스트는 대괄호로 둘러싸이며, 리스트의 값은 콤마로 구분된다.3. ++ 연산자를 이용하여 리스트를 연결한다. 주의할 점은 하스켈은 ++ 의 왼쪽에 위치한 첫 번째 리스트 전체를 읽어들여야 하기 때문에, 항목이 많은 경우 이런 점을 고려하여야 한다.++ 연산자는 항상 두 개의 리스트를 인자로 받는다. 따라서 ++ 를 이용하여 어떤 리스트의 끝에 단 하나의 항목을 추가하고자 하는 경우에도 그 항목을 대괄호로 감싸야 한다. 그래야 리스트로 취급하여 ++ 연산자가 정상적으로 작동한다. 123456789101112131415Prelude> [1,2,3,4,5] ++ 5:49:1: Non type-variable argument in the constraint: Nu..
하스켈 함수 호출하기 및 함수 정의하기
2016. 7. 10.1. 함수 호출하기 - 중위함수(infix function)와 전위함수(prefix function)1) 대부분은 전위함수이며, 형식은 다음과 같음매개변수는 공백으로 구분됨[함수의 이름] [공백] [매개변수1] [공백] [매개변수 2] .... 12Prelude> min 3.4 3.23.2 cs 2) 함수는 모든 연산자 중 가장 높은 우선순위를 가짐라인 5 에서 보듯이 succ 9 이 먼저 실행되고 결과값 10과 10을 곱해서 100이 나오게 됨 123456789Prelude> succ 9 + max 5 4 + 116Prelude> (succ 9) + (max 5 4) + 116Prelude> succ 9 * 10100Prelude> succ (9*10)91 Colored by Color Scripter..
하스켈의 특징(철학)
2016. 7. 10.하스켈은 순수 함수형 프로그램밍 언어이다. 1. 순수 함수형 프로그래밍 언어는 어떤 작업을 하라고 컴퓨터에게 알려주는 것이 아니라, 그 작업이 무엇인지를 알려준다. 예를 들어 컴퓨터에게 숫자의 팩토리얼은 1부터 그 숫자까지의 모든 정수의 곱이라고 말한다거나, 숫자 리스트의 합은 첫 번째 숫자들의 합을 더한다고 말할 수 있다. 그리고 이러한 작업들은 함수로 표현할 수 있다. 2. 함수형 프로그래밍에서는 변수에 하나의 값을 설정하고 나중에 다른 것으로 설정할 수 없다. 3. 순수 함수형 언어에는 함수는 부작용이 없다. 함수가 할 수 있는 유일한 것은 어떤 것을 계산하여 그 결과를 반환하는 것이다( 참조투명성 : 어떤 함수를 동일한 매개변수로 두 번 호출하면 두 번 모두 동일한 결과를 반환한다는 것이 보장된다..