햐 이것도 일이네 일이야. 고만할까봐 ㅎㅎ
---
오늘은 총정리 겸하고 머신러닝 예를 보여줌
형은 두가지 중요한 툴을 쓴다 - 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차 방정식의 그래프라 보면 됨.
분류는 담에 예를 보여줌 ㅇㅇ
옥타브 말고 갓갓 파이썬 합시당
scikit-learn에서 .fit(X, y)만 하면 다 되게 해놨다능!
그거 넘나 좋더라
147.46/너 혹시 인공지능쪽 랩임? 그러 뭐 하나 물어봐도 되냐
인공지능은 아니지만 머신러닝 비슷한거 하긴함
얌마 Clojure로 서버 만들고 cljlab 쓰면 걍 옥타브 불러서 계산만 시킬 수 있는데, 파이썬은 이게 안됨. 나는 게을러서 최소의 자원으로 최대의 효과만 추구한닷
얌마 사기치지 마러. 내가 Python Machine Learning 주요 챕터를 이미 다 읽어봤어
히익... 전 로컬머신밖에 몰라요옷..
근데 형님 뉴럴넷 쓸려면 무조건 파이썬이에영
매틀랩으로 논문쓰는 근성가이들도 있긴하지만...
얌마 뉴럴넷 내가 옥타브/매트랩에서 돌아가는 코드를 짰는데 뭔 개소리여 ㅋㅋㅋ 뉴우럴 네트는 일단 대부분의 경우는 오버킬이라 ㅇㅇ
최신 regularization이나 optimizer들이 옥타브랑 매트랩에는 잘없어여
특히 regularizer는 2~3달에 한번씩 state-of-the-art 나오는지라..
짜서 쓰면 되죵. 실험하는거랑은 또 다른
얌마 최신 regularization이라니 이게 뭔 소리여? 내가 엊그제 마소 머신러닝 자문하러 간 liblinear 저자 교수한테 질답해서 얻은 답이 경우의 수가 많고 실질적으로 큰 도움이 안되기 때문에 (이하 형의 노하우로 남기기 위해 생략) 이러저라 하다. 이런 이메일을 받았는데? 좌표 찍어봐라 형이 니기 뭔 소리 하는지 확인해 보게
뭐 하기사 나라면 걍 가져다가 쓰긴 하겠음.
뉴럴넷이 expression power가 세니까 overfitting이 잘일어나자나여
암튼 dropout 정도까진 있는데 zoneout이나 batch normalization같은건 잘 없더라구여
읭? ㅇㅇ흉말대로 레귤라이제이션이나 옵티마이제이션이 이슈인거 맞는데열.
아 물론 나도 가져다 쓰는 거지 ㅋㅋ 일단 응센세 ML에서 건지 conjugate gradient decent 구현은 라이센스가 걸리는 지라. liblinear 쓰면 간단히 해결되는 부분이고, 뉴우럴 네트워크는 뭐 지금은 필요가 없는지라 ㅇㅇ
아니 그러니까 내 말은 그걸 그리드 서치, CV해서 찾아내는 거지 거기에 무슨 아주 특별난 노하우가 있는건 아니라구. 사실 내가 생각하는 머신러닝 최대 난제는 feature engineering ㅇㅇ
feature engineering이 뭐임? feature extraction말하는거?
ㅇㅇ 그 분야를 제외하고는 이제 특이점이 와서 걍 라이브러리 쓰고, 책에 나온 아이디어 걍 베끼면 되는 수준이라. 내가 그 부분을 클로져로 미니 랭귀지 같이 제공해서 raw data -> high level data compose 이게 되게 하면 좋겠다는 생각이 있음
feature engineering 안해도 되는게 뉴럴넷이에영
ㅇㅇ이 너 무슨 책으로 배웠는데 그렇게 책에 있는거 그대로 다 믿냐? 얌마 니가 구글같이 클라우드 머신 니 맘대로 다 쓸 수 있으면 존내 돈 안되는 거에 딥러닝 돌리고 그지랄 하겠지만, 형같은 사람은 최소 자원으로 최대 이윤을 추구해야 되서 안됨 ㅋㅋㅋ
ㄴㅂㄷㄱㄷㅋㄱ/ 얌마 모델이 다른 것이여. 정답은 없는 것이여. 그럴 듯 한고 큰 문제 안생기면 되는게 인공지능
피쳐 사람이 안 뽑잖아요. cnn같은것만 봐도
야이미친//되서->돼서 (되어 = 돼임) [리듬 맞춤법 봇♬]
트코/뭔소리임? 데이터베이스 덤프를 걍 뉴우럴 네트워크에 떠먹인다고 훈련이 되진 않지
http://systemdesign.altera.com/can-you-see-using-convolutional-neural-networks/
요즘은 네떡 구조를 어떻게 하느냐가 중요하고요. 피쳐엔지니어링이 피쳐익스트렉션 얘기하는거면 안 뽑는게 대세라
근데 흉이 농담으로 했지만 네떡상에 뭐든지 떠먹일 능력이 되면 대단한거죠 ㅎㅎㅎ.