문서 초반에 설명을 못했지만 이 글을 쓰고 있는 목적은 선형회귀분석을 구하는 것을 octave를 이용하여 구하는게 목적이였습니다.

추후 스칼라를 이용하여 머신러닝을 구현하는것이 최종 Goal.





최종 골은 가장작은 Cost Function을 구하는거고 (오차율 최소화)

거기에 맞는 새터를 구하는것입니다.

(선형 회귀 분석에서 가장 잘 맞는 라인을 찾는 것 이라고 생각하면 됩니다.)


자세한 이론은 추후 설명하고

이번에는 코스트 펑션을 구하도록 구현 해보겠습니다.



식은 아래와 같습니다.

1/2m * 1 to m 까지 ((새터0 + 새터1 * x) - y)제곱 의 더하기

 


cost function을 구현해보면


* 데이터 로딩

>> data = load('ex1data1.txt')


* y 변수 선언

>>  y = data(:, 2);


* m 변수 선언

>> m = length(y)

m = 97

: 행의 개수


* x 변수 선언

>> x = [ones(m, 1), data(:,1)];

: x변수에 첫번째 컬럼에 1값을 대입시킴

: 이유는 cost function의 h에 새터0 + 새터1 * x의 식인데 사실 새터 0에도 x를 곱해야 하는데 1이라 식에서 생략해서 그렇습니다.

x =


    1.0000    6.1101

    1.0000    5.5277

    1.0000    8.5186

    1.0000    7.0032


* 새터 선언

>> theta = zeros(2, 1);

: 0으로 초기화

theta =


   0

   0


* cost function 구현

function J = computeCost(x, y, theta)

m = length(y); % number of rows


J = 0;

h = 0;


for i=1:m

h = h + (theta(1) + theta(2) * x(i, 2) - y(i))^2;

end


h % print hypothesis

J = h / (2*m);


end


* cost function 호출

>> computeCost(x, y, theta)

h =  6222.1

ans =  32.073


32.073이라는 값이 리턴됩니다.

이 값을 최대한으로 줄이는 새터를 찾는게 이 프로그램의 최종 목표입니다.

'ML > octave구현 - w1' 카테고리의 다른 글

[octave] GradientDescent  (0) 2016.03.07
[octave] 새터에 따른 그래프 모양 확인  (0) 2016.03.06
[octave] 데이터 뿌리기 (plot)  (0) 2016.03.06
[octave] 파일 읽기  (0) 2016.03.06
[octave] 행렬 다루기  (0) 2016.03.05

앞서 얻은 행렬의 data를 그래프로 표현하는 방법에 대해 알아보겠습니다.


Syntax (http://kr.mathworks.com/help/matlab/ref/plot.html)


>> plot(X,Y)example

>> plot(X,Y,LineSpec)

>> plot(X1,Y1,...,Xn,Yn)

>> plot(X1,Y1,LineSpec1,...,Xn,Yn,LineSpecn)


문법은 위와 같습니다.

(참고로 octave와 matlab의 문법은 거의 일치한다고 한다. 대부분 기능도 지원되며)


octave에서는 같은 폴더 위치에 있는 *.m 파일을 자동으로 읽는다고 합니다.

그런 특징을 살려 파일을 여러개로 분할하여 관리합니다.

이번에는 새로운 plotData라는 함수를 만들어서 실행하는 것으로 테스트 해봅니다.


함수의 문법은 아래와 같습니다.


function 함수이름(args...)


end


: 보통의 함수와 같고 end로 끝나는것만 약간 다릅니다.



앞서 X, y로 변수할당한 것을 함수를 통해 표현 해보겠습니다.


function plotData(x, y)

plot(x, y, 'rx', 'MarkerSize', 5);

end


x : 변수

y : 변수

'rx' : red and cross

'MarkerSize', 5 : 좌표 사이즈






옵션은 아래와 같다.



SpecifierLine Style
-Solid line (default)
--Dashed line
:Dotted line
-.Dash-dot line

SpecifierMarker
oCircle
+Plus sign
*Asterisk
.Point
xCross
sSquare
dDiamond
^Upward-pointing triangle
vDownward-pointing triangle
>Right-pointing triangle
<Left-pointing triangle
pPentagram
hHexagram

SpecifierColor

y

yellow

m

magenta

c

cyan

r

red

g

green

b

blue

w

white

k

black


'ML > octave구현 - w1' 카테고리의 다른 글

[octave] GradientDescent  (0) 2016.03.07
[octave] 새터에 따른 그래프 모양 확인  (0) 2016.03.06
[octave] Cost Function 구하기  (0) 2016.03.06
[octave] 파일 읽기  (0) 2016.03.06
[octave] 행렬 다루기  (0) 2016.03.05

이번에는 파일에 저장된 데이터를 읽어 보도록 하겠습니다.


먼저 ex1data1.txt 파일에 아래와 같은 dataset 이 있습니다.


* dataset


6.1101,17.592

5.5277,9.1302

8.5186,13.662

7.0032,11.854

5.8598,6.8233

8.3829,11.886

7.4764,4.3483

....



* 파일 읽기

>> data = load('ex1data1.txt')

: load라는 함수를 이용하여 데이터를 읽어옵니다.

: 읽어온 데이터를 data라는 변수에 대입합니다.

: 바로 행렬로 읽어지는 것을 볼 수 있습니다.


data =

    6.11010   17.59200

    5.52770    9.13020

    8.51860   13.66200

    7.00320   11.85400

    5.85980    6.82330

    8.38290   11.88600

    7.47640    4.34830

    8.57810   12.00000

    6.48620    6.59870

    5.05460    3.81660

    5.71070    3.25220


* 행렬 다루기

: 읽어온 데이터를 각각의 변수로 Assign 합니다.


>> X = data(:, 1)

: 첫번째 열을 X 변수에 대입


X =

    6.1101

    5.5277

    8.5186

    7.0032

    5.8598


>> y = data(:, 2)

 

y =

   17.59200

    9.13020

   13.66200

   11.85400

    6.82330

   11.88600

    4.34830

'ML > octave구현 - w1' 카테고리의 다른 글

[octave] GradientDescent  (0) 2016.03.07
[octave] 새터에 따른 그래프 모양 확인  (0) 2016.03.06
[octave] Cost Function 구하기  (0) 2016.03.06
[octave] 데이터 뿌리기 (plot)  (0) 2016.03.06
[octave] 행렬 다루기  (0) 2016.03.05

+ Recent posts