[Python]Octave to Python! 두번째

python으로 작업하기 두번째이다.

사실 오늘 좀더 많이 진도를 나가고 싶었지만, contour plot에 점찍기가 너무 오래 걸려 많은 양의 코딩을 하진 못했다.

해결하고나니 정말 별거아니라 더 짜증…


먼저 어제에 이어 surface 결과값이다.

왼쪽이 octave, 오른쪽이 python 결과물이다.

당연하지만 둘의 차이점은 크게 느낄 수 없다.

surf를 그리려고 굉장히 많은 시간을 허비했다.

하지만, matplotlib 정식 사이트에서 보여주는 example 덕에 조금이나마 빠르게 해결할 수 있었다.

X축은 theta0가 취한 값, Y축은 theta1가 취한 값, Z축은 theta에 따른 cost값이다.

다음은 대망의 contour plot 이다.

왼쪽이 octave, 오른쪽이 python 결과물이다.

X축과 Y축은 theta를 의미하고 영역은 cost값으로 구분되어 있다.

붉은색 x표시는 최적의 theta값의 위치를 표현한 것이다.


나에게 큰 절망을 준 contour plot…  가운데 점찍는데 한참이 걸렸다.

google에 안쳐본 검색어가 없는거 같다.

결국 stackoverflow가 해결해 주었지만 저걸 보고도 30분간은 씨름했었다.

data2[0,0]과 data2[0][0]의 차이로 error가 계속 발생하였는데 정말 멍청하게도 저걸 의심하지 않았다. 젠장…

다음부턴 best_theta=data2[0] 이런식으로 바로바로 해서 에러를 줄여야지 화나서 안되겠다.

내일은 multiple regression 예제 파일을 바꾸어서 올려보도록 노력하겠습니다.

도움이 된 사이트 :

https://matplotlib.org/

http://stackoverflow.com/questions/28504737/how-can-i-plot-a-single-point-in-matplot-python

이번에 만든 파일 ex1.py :

https://drive.google.com/file/d/0BzyLCuLKF-OGYmd5X09hT1Fkd0E/view?usp=sharing

Advertisements

[Python]Octave to Python! 첫번째

이전 machine learning을 배우며 코딩했던 Octave프로그램을 Python으로 바꾸어 코딩하는 작업을 진행하였다.

일단 내용은 간단히 처음에는 단위행렬을 출력하고,

다음은 받아온 내용으로 그래프를 출력한다.

다음은 gradient descent 방법을 이용하여 적당한 theta를 구하는 것이다.

내용은 simple linear regression임으로 어렵지 않았다.

아래 내용은 python으로 작성한 내용이다.

ex1


아래는 그 결과물이다.

왼쪽이 octave에서의 결과물이고, 오른쪽이 python으로 그려낸 결과물이다.

ex1data1.txt라는 파일로 machine learning 강좌를 들으면서 주어진 값을 이용했다.

내일은 왼쪽처럼 선로가 보이도록 추가할 예정이다.

추가로

J =32.07273388

theta = [-3.6302914394043593, 1.166362350335582]

이 나왔다.

J는 theta가 [0,0]일 때 cost function을 이용하여 나온 값이고,

theta는 gradient descent를 이용하여 최소로 cost가 나올때 theta를 구한 값이다.

참고로, numpy를 설치하기 위해 3.6버전으로 갈아탔다…

2.7버전에서 설치를 잘못했는지 pip을 쓰면 에러가 난다 ㅜㅜ

[DataCamp]Intro to Python for Data Science 내용 정리

앞 부분들은 List, Function, Method 등 Python에서 기본적인 부분들을 다루었다.

Ch1은 너무 쉬운 내용이므로 생략한다.

CH2. Python List
type이 list인 것들에 대해 다루었다.
중요 부분은 List의 slicing과 dicing과 del function이라 생각된다.
slicing과 dicing
list[start:end] -> list의 start 인덱스부터 end까지 뽑아온다. 이때 end index는 불포함
list[start:] or list[:end] -> 생략하면 그 부분의 끝을 의미 ( 처음부터거나 끝까지)
list[-3] -> 음수가 들어간 경우는 뒤에서 부터 시작을 의미 -1이면 맨 마지막 값이다.
del function
del(list[index]) -> list에서 index번째 값을 제거한다.

CH3. Function & Package
Function Example : print(), type(), float(), str(), int(), bool(), len(), complex(), sorted() 등등
Method
-string : upper(), count() 등등
*자세한 내용 : https://docs.python.org/2/library/string.html
-list : index(), count() 등등
*자세한 내용 : https://docs.python.org/2/tutorial/datastructures.html
import : 다른 패키지에서 class나 function 불러와서 사용하도록 해주는 함수(?)
-math : pi나 radians같은 수학에 필요한 부분들을 빠르게 사용가능하도록 모여진 패키지
*from (패키지이름) import (불러올함수나 클래스) as (사용할 이름)

CH4. Numpy
install: pip3 install numpy
import numpy as np
numpy를 np라는 이름으로 import
array
오직 한가지 type만 가진다.
—————————————-
list * list **2 -> error
but!
array * array **2 -> not error
—————————————–
array안에 전부 int or float 이어야 한다.
값의 중복이 허용되지 않는다.
index는 0 부터 시작
2D numpy array
ndarray = N-dimensional array
np_2d = np.array([[1,2,3,4,5],[6,7,8,9,10]])
np_2d.shape
out :(2.5) -> 2rows, 5 columns
in:   np_2d[0][2]
out: 3
in:   np_2d[0,2]
out: 3
np.mean(array가 type인 변수명)
평균을 구해준다.
np.median(array가 type인 변수명)
중간값을 구해준다.
np.std(array가 type인 변수명)
표준편차를 구해준다.
np.corresf(array가 type인 변수명,…)
상관 분석을 구해준다.

Head First Python 6장

클래스와 딕셔너리와 관련된 내용들이 주를 이루었다.

딕셔너리는 C언어의 구조체 비슷한 개념으로 {}이나 dict()로 선언이 가능하다.

ex) a = dict() <=> a = {}

a={‘name’:’A’,”family”:[‘Father’, ‘Mother’]}

클래스는 java의 클래스와 비슷한 개념으로 상속기능도 가능하다.

ex)

class A(list):

def __init__(self):

list.__init__([])

위와 같이 코딩을 하면 dir(A)와 dir(list)가 같음을 알 수 있다.

__init()__는 클래스를 초기화하는 메소드이다.

self를 사용한 경우 self.하여 클래스 내부 데이터를 불러올 수 있다.

ex)

def Ho(self):

self.name = ‘A’

self.family = [‘F’,’M’]

keyword : class, dict(), {}, __init__, 상속, self

Head First Python 5장

5장은 정렬에 대해 심도있게 해보는 예제가 많았다.

[s for s in The_List]라는 배열에서 for문을 이용한 list생성을 배웠다.

set은 list와 다른 형태로 list와는 다르게 중복데이터를 허용하지 않는다.

sort()는 list의 내장 함수로 list.sort()시에 list를 오름차순으로 정렬한다.

sorted()는 sotrted(list)시 list를 오름차순한 list를 반환한다.

[n:m]은 배열에서 n번부터 m개를 반환하여 list를 만든다.(n은 0부터)

strip()은 문자열의 쓸데없는 공백을 지워준다.

keyword : set, sort(), sorted(), [n:m], strip()

Head First Python 4장

4장의 내용은 파일 입출력과 밀접한 관련있는 내용들이 었다.

try와 except를 이용한 IOError 뿐만 아니라 pickle을 import해서

파이썬의 모든 데이터를 간편하게 입출력하는 프로그램을 작성하는 법을 배웠다.

또한 with를 통해 파일 입출력에서 close와 finally 없이 사용하여 에러를 줄일 뿐만아니라 코딩의 길이도 줄어들도록 코딩하는 법을 배웠다.

keyword : with, pickle, pickle.dump(), pickle.load(), finally

Head First Python 3장

파일 입력을 배웠다.

import os를 함으로써 open(‘파일명’)을 data에 받아서 파일을 불러올 수 있다.

일단, 그전에 경로 설정을 해야한다.

os.getcwd()는 현재 폴더 경로를 알려준다.

그리고 os.chdir(‘경로’)는 해당 경로로 폴더를 바꿔준다.

split을 이용한 다중 입력도 배웠다.

(a,b)=str.split(‘.’)

위 문장의 경우 str을 .을 기준으로 a와 b에 각각 넣어주는 것이다.

이때 ‘.’이 여러 개인 경우 에러가 남으로

split(‘.’,1)로 하면 첫번째 ‘.’이 기준이 된다.

try와 except를 이용한 에러 처리를 배웠다.

try:에러가 나올수 있는 코딩

except (에러타입):에러시 코딩

이런 식이고 에러타입을 생략할 경우 모든 에러에 대해 아래 코딩을 실행한다.