Category Archives: Python

[Tensorflow] 텐서보드(tensorboard) 이용

소스코드에 몇줄을 추가함으로써 아주 쉽게 결과를 확인해볼 수 있다. 6000번 시행시킨 결과 cost는 점차 감소하고 accuracy는 점차 증가한다. 생각보다 training 횟수가 꽤 많다.(그래봤자 몇ms차이지만)

텐서플로우를 몇일간 사용해본 결과, 중요한 것은 -항상 그렇지만- 데이터 라고 다시한번 느끼게된다. 이전에 데이터를 계산하는 flow를 구성하는데 뛰어난 머리가 필요했다면, 이러한 부분이 이미 다 구현되어버린 상태인것. 잠깐 사족을 더하자면, 내가 우리나라 의료에 관련된 데이터들을 이용한 모든것 (=왓슨?은 미국데이터려나)에 신뢰성에 의문이 있는 부분도 바로 이 부분이다. 데이터..논문이 하나 만들어짐에 있어서 사용되는 데이터가 어떻게 수집되는지를 보면 정교하게 하는 경우가 그리 많지 않은 듯 하다.

이제 다음은 실제 device에서 좌표 수집을 시작해볼 예정, Tensorflow자체도 더 공부해야할 부분이 많지만 일단 이 정도로도 충분히 기본적인 부분은 해결될 것 같다.

 

[Tensorflow] 일주일간 진행상황

홍콩과기대 김성훈 교수님의 강의가 정말 어마어마하다.

http://hunkim.github.io/ml/

처음에 텐서플로우가 처음나왔을때 이게 뭔 소리지? 했던 부분들이 완벽히 이해되는 강좌. 이해를 하고 나니 훨씬 사용이 쉬워진 느낌.

궁극적으로는 softmax기법을 이용해서 5~6차원의 데이터를 classification하는 부분으로 진행해야하는데, 일단 오늘은 2차원에서만 테스트를 진행

다음과 같은 분포에서

hypothesis = tf.nn.softmax(tf.matmul(X, W))
cost = tf.reduce_mean(tf.reduce_sum(-Y*tf.log(hypothesis), reduction_indices=1))

기본적인 softmax로 진행했고, accuracy를 구했더니

correct_prediction = tf.equal(tf.argmax(Y,1),tf.argmax(hypothesis,1))
accuracy = tf.reduce_mean(tf.cast(correct_prediction,tf.float32))    
print session.run(tf.argmax(Y,1),feed_dict={Y:ty3})
print session.run(tf.argmax(hypothesis,1),feed_dict={X:tm4})
print session.run(accuracy, feed_dict={X:tm4,Y:ty3})
[0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1]
[0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 1 0 1 0 0 0 0 0 0
 0 1 0 1 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1]
0.94

94% 결과를 보였다. 위에서 잘못나온 좌표를 그래프랑 비교해보니, 사실 그렇게 (사람이 보기에) 헷갈릴만한 좌표는 아니었는데, 그래서 직접시행해보니

print session.run(hypothesis,feed_dict={X:[[1,-0.43,0.47]]})

[[ 0.48978248 0.51021749]]

print session.run(hypothesis,feed_dict={X:[[1,-0.4,0.4]]})
[[ 0.50540406 0.49459586]]

딱 -0.4, 0.4 부근의 값들이 0.5 내외의 결과를 만들어내는 좌표인 탓인 것 같다.

3개의 그룹에서는 57%로 출력. 생각보다 낮게나온다.

그래서 학습을 2000번에서 4000번으로 증가시켜봤다. 그랬더니 73%

6000번때는 85%, 10000번에는 90%까지 증가함을 확인.

다음번엔 3차원 자료를 이용해볼 예정

[Python] RandomGroupMaker

Machine Learning을 위해 제작한 그룹 나누기.

차원도 무한히 늘릴 수 있지만, 4차원부터는 시각화하기가 어려워 예시는 3차원으로 해보았다.

중간에 겹치는 구역이 없을 때 부터 점차 변화시켜 데이터의 범위가 교집합이 존재할 때 분류 확률이 어떻게 변하는지, 테스트해 볼 예정

[Python + Jupyter] Notebook에서 작성된 파일 import하기

여러 사람에 의해 번역이 잘 되가면서 이제 좀 이해할만해진 Tensorflow.

그래서 다시 시작했는데,

Python + Docker(Jupyter) + Kitematic 의 조합은 정말 신세계를 만난 느낌이다. 그동안 항상 딜레마였던, 이전에 작성한 소스 이해하기가 엄청 쉬워졌다.

# 제목 그대로 notebook으로 작성된 소스 코드를 제2의 노트북에서 import하고 싶을 때 다음과 같이 한다.

$ jupyter nbconvert --to script [YOUR_NOTEBOOK].ipyn

그리고 import 해야하는 소스에다가는

import sys
sys.path.append('/notebooks')
import [YOUR_NOTEBOOK]

이런식으로.

 

[python] CSV file loading, R의 DataFrame처럼 이용하기

작년에 만들었던 포스팅, 아마 작성하다 대충 마무리 되었던 것 같다.일단 올리고 봄

 

기본방법

import os

os.getcwd()
# '/Users/Seok/Documents/mycdlist'
os.chdir('/Users/Seok/Documents/MyPythonProject/cog1')

data = []
with open('random.csv', 'rb') as csvfile:
reader = csv.reader(csvfile, delimiter=',')
for row in reader:
#data.append(row)
data.append({
'group' : row[0],
'x'  : row[1],
'y'   : row[2]
})
del data[0] #title 삭제

이 객체의 경우 R과 같은 접근이 어렵다. 예를 들어 아래와 같이 하고 싶다고 하면,

>> data[1:5][‘x’]
Traceback (most recent call last):
File “<stdin>”, line 1, in <module>
TypeError: list indices must be integers, not str

이런식으로 에러가 나온다.

이를 해결하기 위해 numpy 를 이용하면 쉽다.

import numpy as np

r = np.genfromtxt('random.csv', delimiter=',', names=True)

>>> r[:]
array([(1.0, 0.6, 1.9), (1.0, 1.2, 1.5), (1.0, 2.7, 0.1), (1.0, 2.5, 1.4),
(1.0, 2.3, 1.1), (1.0, 0.2, 1.2), (1.0, 0.1, 1.1), (1.0, 0.4, 1.2),
(1.0, 0.8, 1.2), (1.0, 2.6, 0.1), (1.0, 0.3, 1.2), (1.0, 2.5, 0.9),
...
dtype=[('Group', '<f8'), ('X', '<f8'), ('Y', '<f8')])

>>> r[:]['Group']
array([ 1.,  1.,  1.,  1.,  1.,  1.,  1.,  1.,  1.,  1.,  1.,  1.,  1.,
1.,  1.,  1.,  1.,  1.,  1.,  1.,  1.,  1.,  1.,  1.,  1.,  1.,
1.,  1.,  1.,  1.,  2.,  2.,  2.,  2.,  2.,  2.,  2.,  2.,  2.,
2.,  2.,  2.,  2.,  2.,  2.,  2.,  2.,  2.,  2.,  2.,  2.,  2.,
2.,  2.,  2.,  2.,  2.,  2.,  2.,  2.,  3.,  3.,  3.,  3.,  3.,
3.,  3.,  3.,  3.,  3.,  3.,  3.,  3.,  3.,  3.,  3.,  3.,  3.,
3.,  3.,  3.,  3.,  3.,  3.,  3.,  3.,  3.,  3.,  3.,  3.,  4.,
4.,  4.,  4.,  4.,  4.,  4.,  4.,  4.,  4.,  4.,  4.,  4.,  4.,
4.,  4.,  4.,  4.,  4.,  4.,  4.,  4.,  4.,  4.,  4.,  4.,  4.,
4.,  4.,  4.])

>>> r[:]['X']
array([ 0.6,  1.2,  2.7,  2.5,  2.3,  0.2,  0.1,  0.4,  0.8,  2.6,  0.3,
2.5,  2.3,  0.5,  1.2,  2.9,  0.6,  2.1,  2.5,  0.7,  1.3,  1.9,
1.9,  1.9,  1.7,  0.3,  1.5,  1.9,  1.8,  1.6,  2.2,  5.8,  2.6,
5. ,  3.3,  2.4,  4.6,  4.9,  4.7,  4.6,  3.7,  2.9,  4.2,  3. ,
5.6,  5.2,  3.4,  3.5,  2.5,  3.7,  3. ,  2.3,  4.2,  5.4,  5.6,
4.2,  5.5,  2.3,  4.6,  4.3,  0.2,  0.6,  0.9,  0.2,  0.6,  0.6,
0.2,  0.5,  0.3,  0.7,  0.1,  0.2,  0.2,  0.3,  0.6,  0.4,  0.4,
0.8,  1. ,  0. ,  0.8,  0.9,  1. ,  0.7,  0.7,  0.6,  0.5,  0.3,
0.9,  0.6,  4.9,  4.6,  4.2,  4.1,  4.1,  4.5,  3.6,  3.4,  5. ,
4.6,  4.2,  4.6,  3.4,  3.2,  4.1,  3.5,  4. ,  3.8,  4.4,  4.1,
3.2,  4. ,  4.6,  4.5,  4.3,  4.8,  3.1,  3.4,  3.3,  3.1])

 

혹은 pandas를 이용하는 방법이 있는데 아래 링크 참조

http://nbviewer.ipython.org/github/re4lfl0w/ipython/blob/master/books/python_data_analysis/ch06_Data%20loading.ipynb#6.1-%ED%85%8D%EC%8A%A4%ED%8A%B8-%ED%8C%8C%EC%9D%BC-%EC%9D%B4%EC%9A%A9%ED%95%98%EB%8A%94-%EB%B0%A9%EB%B2%95

R에서의 DataFrame과 같은 접근이 가능

 

ScatterPlot을 위해 matplotlib 설치는 아래 링크 참조

http://matplotlib.org/examples/shapes_and_collections/scatter_demo.html

Matplotlib import error 발생할 경우 쉘에서

sudo pip uninstall python-dateutil
sudo pip install python-dateutil==2.2

해줘야함

 

==============

import os
os.getcwd()
# '/Users/Seok/Documents/mycdlist'
os.chdir('/Users/Seok/Documents/MyPythonProject/cog1')

import numpy as np
r = np.genfromtxt('random.csv', delimiter=',', names=True)

import matplotlib.pyplot as plt

plt.scatter(r[:]['X'],r[:]['Y'],c=r[:]['Group']) # s=radius of each points
plt.show()

figure_1