햐 이것도 일이네 일이야. 고만할까봐 ㅎㅎ


---


오늘은 총정리  겸하고 머신러닝 예를 보여줌


형은 두가지 중요한 툴을 쓴다 - liblinear, libsvm. 형이 조사한 바에 의하면 지구상에 존재하는 머신러닝 툴중 대부분은 이 두가지 라이브러리를 최하위 레벨에 깔고 있다고 보면 됨.

또, 형은 응센세 ML하면서 익힌 Octave를 씀. 위의 두 라이브러리는 Octave 확장을 갖고 있어서 Octave 함수처럼 쓸 수 있다.


라이브러리 설명을 잠깐 해줌 - liblinear는 선형 방법으로 머신러닝 문제를 풀고 libsvm은 SVM 방법으로 머신러닝 문제를 푼다. SVM은 커널이라는 인자를 통해서 선형 혹은 비선형으로 쓸 수 있음. 뉴우럴 네트워크는 안다루지만, 비선형 SVM을 얼추 간단한 뉴우럴 네트워크와 비슷하다고 보면 됨.


비선형은 선형에 비해 복잡한 모델을 만들고자 하면 필요함. 딥러닝은 존나 복잡한 모델을 만들 때 쓴다고 보면 됨.


머신러닝의 문제 중 일단 회귀와 분류만 고려하자. 회귀는 니가 모델에 변수값들을 주어서 주관식 문제마냥 답을 하나 예측해주는 거고, 분류는 니가 모델에 변수값을 주면 객관신 문제마냥 가능한 분류목록에서 하나를 찝어내는 문제.


회귀는 liblinear의 경우 세가지 알고리듬, libsvm은 두가지 SVM x 두가지 커널, 대략 합이 7가지 알고리듬 조합이 가능함.


분류는 liblinear의 경우 여덟가지 알고리듬, libsvm은 하나를 분류하는 알고리듬 하나, 여럿을 분류하는 알고리듬 둘 x 다섯가지 커널, 합이 23 가지 조합임.


데이터셋을 머신 러닝 알고리듬에 넣어서 모델(혹은 파라미터 라고 부름)을 만들어 내는 건데, 응센세 ML에 나왔던 데이터셋 예를 들어줌.




먼저 회귀. 니가 치킨코더라는 치킨 전문점 코더야. 사장이 너한테 수익을 최대로 낼 수 있는 점포를 먼저 내줘야 되니까 퇴직 코더들이 온라인으로 신청하면 얼마 수익 예상하는지 보여주는 서비스를 만들래. 먹고 살기위해 활활 타오르는 너는 인구수와 수익이 관련이 있다고 보고, 과거 데이터를 뒤져서 이 둘을 이용해서 모델을 만듬.

데이터는 이런거지


X => 인구수             y => 수익

6천                            1천 7백

5천                                  9백

...



liblinear에선, train으로 모델 만들고 predict로 예상하는 답 계산하면 됨.


%% 모델 구하기

model = train(y, sparse(X), '-s 11 -n 8');


%% 인구 1만4천 일때 예상 수익 구하기

p = predict([0], sparse([14]), model)

>> Mean squared error = 126.876 (regression)

>> Squared correlation coefficient = -nan (regression)

>> p =  11.264 %% 예상 수익 1천 1백만원 예상



libsvm도 마찬가지지만, 함수가 다름 - svmtrain, svmpredict


model = svmtrain(y, sparse(X1), '-s 3')


p = svmpredict([0], sparse([14]),model)

>> Mean squared error = 87.4448 (regression)

>> Squared correlation coefficient = -nan (regression)

>> p =  9.3512 %% 예상 수익 9백만원 정도


위의 예는 둘다 선형 방법으로 간단하게 구한 거지만, 복잡한 모델을 만들 수도 있지(만, 자세한 설명은 생략한다)


내가 귀차니즘으로 인해 그래프는 안보여주는데, 걍 1차 방정식의 그래프라 보면 됨.


분류는 담에 예를 보여줌 ㅇㅇ