앞선 포스팅에서 최소제곱방법을 다뤘었는데 행렬표현으로 하지 않고 직관적인 설명 위주로 했습니다. 가장 간단한 (x,y) 에 대한 설명을 하였습니다. 이번에는 변수의 갯수를 n개까지 늘리는 소위 말하는 정규방정식 유도 방법을 포스팅하겠습니다. 이전 포스팅과 같은 최소제곱방법이지만 좀 더 일반적인 상황이고 초점이 파라미터가 아니라 x에 있습니다. 변수가 n 개까지 늘어나고 m 개의 데이터라고 보시면 될 것 같습니다. 즉, 변수 n개에 대한 m개의 방정식을 푸는 연립방정식이 되겠습니다. 보통 식이 많은 연립방정식은 선형대에서 배우는 linear system으로 넘겨 행렬 문제로 바꿔버립니다. 즉, linear system으로 표현하면 Ax = b 를 푸는 문제가 됩니다. n개의 변수와 n 개의 방정식이라면 정..
파이썬에서 pyinstaller로 exe 파일을 만들었습니다만 각종 옵션을 넣는 코드를 직접 알아야해서 불편함이 많았는데 이번에 auto-py-to-exe라는 모듈이 나왔습니다. 제 생각엔 pyinstaller의 옵션을 gui로 표현해놓은 하나의 프로그램을 만든 것 같습니다. 아시다시피 파이썬은 아직 불완전한 요소가 많기 때문에 exe는 C로 만드는게 더 낫지만 파이썬도 개선하다보면 안전하고 간편하게 exe를 만드는 날이 오지 않을까 싶습니다. 설치 auto-py-to-exe도 하나의 모듈이라서 pip으로 설치를 합니다. cmd에서 pip으로 라이브러리 설치하듯이 설치합니다. pip install auto-py-to-exe 설치가 끝난 후 auto-py-to-exe를 바로 실행시킬 수 있습니다. 가이드 ..
MNIST를 이용한 다중분류기 구현 방법입니다. 다중분류기는 여러 개의 클래스로 구별하기 위해서 만드는데 SGD, 랜덤 포레스트 ,나이브 베이즈 같은 분류기로 직접 처리가 가능합니다.다중 분류기를 사용해 직접 사용하기 전에 이진 분류기인 서포트 벡터 머신 분류기를 이용해 다중 클래스로 분류하는 방법을 소개할까 합니다. 원리를 설명하기에 좋고 전략을 세워가는 재미(?)를 아시게 되지 않을까 싶습니다. One-versus-the-rest(OvR)OvR은 숫자 하나 대 나머지를 비교하는 전략입니다. One-versus-all(OvA)라고도 합니다.숫자별로 숫자 하나만 구별하는 이진 분류기를 만들어서 점수를 매깁니다. 그럼 10개의 점수가 나오는데 이중에서 가장 높은 점수가 나오는 것을 선택하는 방식입니다. M..
이전 포스팅에서 MNIST에서 이진 분류기를 만들어 보았는데 글이 길어지다 보니 검증에 대한 개념을 위한 포스팅을 따로 합니다. 이진 분류기를 만드는 과정과 검증방법은 이전 포스팅에서 확인해주시기 바랍니다. 2021.11.28 - [데이터 사이언스/머신러닝 딮러닝] - [분류문제] MNIST로 이진분류기 만들기 [분류문제] MNIST로 이진분류기 만들기 머신러닝의 가장 기초중의 기초 머신러닝의 'Hello World' MNIST입니다. 머신러닝은 기본적으로 주어진 데이터를 가지고 컴퓨터를 훈련을 시키기 때문에 훈련,검증의 두단계를 거칩니다. 주어진 데 seong6496.tistory.com 혼동행렬은 약간 복잡합니다. 교차 검증을 통한 정확도를 하면 좋겠지만 분류기의 예측값과 정답과의 차이를 반영했는지와..
데이터 프레임을 병합하는 과정에서 중복한 데이터를 빼고 병합하고 싶은 경우가 생길 수 있습니다. merge, concat, join도 병합 메쏘드 중에 하나인데 중복이 있고 column이 똑같은 데이터프레임의 병합에서는 문제가 발생할 수 있습니다. 이는 각각의 메쏘드의 특징이 달라서인데요. merge는 서로 다른 column일 때 합치기 편하고 concat과 append는 row를 하나씩 추가하는 방식입니다. join은 인덱스를 기준으로 column으로 합쳐나가는 방식입니다. 만약 데이터프레임 A와 B의 column은 같은데 중복데이터만 없애고 합치고 싶다면 모든 메쏘드가 적절하지 않을 수 있습니다. 왜냐하면 key가 중복된 상황에서 merge를 하게 되면 merge는 key에서 가능한 모든 경우의 수를..
컴퓨터 사양을 알고 싶으면 윈도우 설정이나 탐색기의 내 컴퓨터 속성을 들어가 그래픽 카드 정보를 알곤 했습니다. 안타깝게도 윈도우 내에서는 그래픽 카드 정보가 없어서 한번에 볼 수 있는 곳이 없어 불편함이 있습니다. 사양을 한 눈에 보고싶다면 cpu-z라는 프로그램을 사용하는 걸 추천합니다. 무료이고 마더보드와 램 사양까지 모조리 다 나와서 사양과 호환가능성을 정확하게 살펴볼 수 있어 데스크탑 업그레이드시 굉장히 유용합니다. cpu-z 다운로드 cpu-z는 다운로드는 아래 사이트에서 할 수 있습니다. https://www.cpuid.com/softwares/cpu-z.html CPU-Z | Softwares | CPUID CPU-Z is a freeware that gathers information o..
블로그를 운영하다보니 어느덧 수익금이 100달러를 넘기게 되었습니다. 처음이라 적은 금액이지만 나름 시간을 내서 한 보람이 있는 것 같습니다. 구글 애드센스에서 수익금을 지급할 수단을 등록하라는 메일이 와서 계정을 등록했습니다. 외화계좌가 있어야만 계좌 등록을 할 수 있어서 괜찮은 계좌를 알아보았는데 다들 SC제일은행 외화계좌를 만드는게 가장 좋다해서 계좌를 만들었습니다. SC제일은행은 100달러 미만 출금 시 외환 수수료 1만원을 면제해주기 때문에 다른 은행에 비해 수수료비용이 덜 든다고 합니다. 요즘은 신분증만 있으면 SC제일은행 앱으로 계좌를 개설할 수 있습니다. 먼저 국내계좌를 개설한 후 외화계좌를 개설하면 됩니다. 앱으로 외화계좌를 개설한 후 구글 애드센스에서 결제 수단 추가를 눌러 계좌를 등록..
머신러닝의 가장 기초중의 기초 머신러닝의 'Hello World' MNIST입니다. 머신러닝은 기본적으로 주어진 데이터를 가지고 컴퓨터를 훈련을 시키기 때문에 훈련,검증의 두단계를 거칩니다. 주어진 데이터는 유한하니 데이터를 분리시켜 하나는 훈련을 시키고 다른 하나로는 검증을 시행합니다. 여기서 주의할 점은 훈련데이터와 검증데이터가 겹치면 안됩니다. 이미 훈련을 한 문제로 검증을 하면 당연히 100점이 나오기 때문에 의미가 없습니다. 적당한 훈련 끝에 데이터를 아무거나 가져와도 내가 원하는 답을 해주는지를 기대하기 때문에 주어진 환경안에서 잘 훈련되어 정확한 답을 끌어내게끔 만들어내는게 목적이라고 볼 수 있습니다. MNIST는 손으로 쓴 숫자이미지로 이를 이용해 컴퓨터를 학습시켜 컴퓨터가 아무 숫자를 보..
쥬피터를 켠 상태에서 컴퓨터를 꺼버려서 원본 파일에 손상이 일어났습니다. 제가 작업하려고 import 한 모든 라이브러리가 사라졌습니다. 쥬피터는 켜지지도 않고 '~~~ 손상된 파일이 복구되었습니다. ~~~' 는 형식의 오류창만 뜨고 있습니다. 일전에도 이런 적이 있어서 아나콘다를 다시 까는 불상사가 일어났었는데 또 다시 아나콘다를 깔아야한다니ㅜ 그 동안 설치한 라이브러리 목록을 백업해두지 않았는데 큰일났습니다. 해당 가상환경을 지우지 않고 해결하는 방법은 없을까 싶어 혹시나 하고 구글링을 해보니 저와 비슷한 처지였던 사람들이 있더군요. 다행히 해결방법이 있었습니다. 이 사이트에서 얻을 수 있었는데요. 사실 저와 똑같은 상황은 아닙니다. 해당 사이트는 Clobber 대상이 일정 라이브러리에서만 나왔는데 ..
이것저것 하다보니 글이 이리갔다 저리갔다 하고 있습니다만 그만큼 작업을 하면서 배우다보니 바삐 돌아가는 것 같습니다. 그래도 글이 다 모이면 순서를 갖출 수 있지 않을까 싶습니다. Qt 는 GUI 프로그래밍을 할 때 쓰는 라이브러리인데요. 보통 C에서 썼었던것같은데 이게 파이썬에서도 가능합니다. Pyqt5로 불리고 있는데 이게 Qt입니다. 큰 틀은 Qt라서 Qt를 안다면 금방 익히지 않을까 싶습니다. Pyqt5를 사용하면 tkinter나 wxpython과 다르게 직접 배치할 수 있는 프로그램(?)이 있습니다. Qt Designer라는 프로그램인데요. 이를 이용해 GUI 틀을 만들고 py파일로 바꿀 수 있습니다. 이번 포스팅에서는 Qt Designer를 이용해 GuI 틀을 만들고 py파일로 바꿔보겠습니다...
Numpy로 랜덤한 값을 기반으로 분포함수를 구현하는 방법입니다. 파이썬으로 하기 정말 간단한데 분포가 워낙 많이 있다보니깐 쓰는 함수만 쓰게 되긴 합니다만 복잡한 모델을 하다보면 평가방식을 달리 하거나 새로운 접근을 위해서 포스팅에 정리합니다. 구현 맛보기로 정규분포와 푸아송 분포를 구현해보겠습니다. 나머지 분포는 밑에 표로 남겨 놓겠습니다. poisson 분포의 람다값은 1로 하겠습니다. import numpy.random as npr #샘플 사이즈 sample_size = 500 #분포 rd1 = npr.standard_normal(sample_size) rd2 = npr.poisson(lam=1.0, size = sample_size) # 그리기 from pylab import plt, mpl p..
파이썬으로 미분할 때 Sympy를 사용하면 아주 편리합니다. 정의대로 미분 먼저 정의대로 되는지 구해보겠습니다. 미분의 정의는 순간속력을 알아내기 위한 방법으로 고안했습니다. 속력 = 거리/시간 인데 이를 그래프로 보면 속력은 기울기와 같게 됩니다. 예를 들어, a에서 b 시점까지의 평균속력은 a와 b 사이의 평균 기울기가 됩니다. 즉, 평균속력 = $ \frac{f(b)-f(a)}{b-a} $ 이 됩니다. 관심을 갖는 건 a에서의 순간 속력입니다. 그러니 저 기울기가 a만 지나가야 하는 접선의 형태로 나타난다면 a의 순간속력이 될 것입니다. 이를 위해 limit를 도입합니다. 왜냐하면 속력 = 거리/시간 인데 b=a 가 되면 분수는 성립하지 않아서 속력을 구할 수 없게 됩니다. 그래서 a는 아니지만 a..
파이썬에서 수학식을 세우는 라이브러리인 Sympy를 가지고 식을 만드는 간단한 방법을 소개하겠습니다. 파이썬이 객체지향언어다 보니 이런 것도 할 수 있나 싶어서 놀랍습니다. 직관적으로 수학식을 표현할 수 있어서 그 동안 배운 수학을 쉽게 코딩할 수 있는 것 같습니다. 수학에서도 미지수 x처럼 변수를 지정하고 문제를 풀어나가는데 Sympy에서도 마찬가지로 움직입니다. 그래서 Symbol() 함수를 이용해 변수를 지정하고 시작을 해야 오류가 발생하지 않습니다. 분수, 파이,복소수 ,변수 표시 분수는 sy.Rational(a,b)를 이용합니다. R을 반드시 대문자로 써야합니다. sy.Rational(1,2) 파이같이 임의로 정해진 것도 쓸 수 있습니다. sy.pi 수치화하고 싶다면 sy.N()으로 합니다. 또..
파이썬으로 적분을 하는 방법입니다. 적분에 대해 간단히 소개하면 적분은 면적을 구하는 방법으로 고대부터 연구된 분야입니다. 사각형이나 삼각형은 넓이를 구하는 방법은 잘 알려져 있습니다. 그리고 이를 활용해 직선으로 이루어진 도형에 대한 넓이를 구하는 방법을 알아낼 수 있습니다. 그런데 직선이 아닌 곡선으로 이루어진 도형은 사각형의 넓이를 구하는 방식으로는 구하기가 어렵습니다. 그럼에도 곡선으로 이루어진 도형을 구하기 위해 초반에는 직사각형의 넓이를 이용해 구분구적법이라는 방법으로 사용했습니다. 직사각형의 넓이가 밑변 x 높이 인 것을 알고 있었고 구하기 쉽기 때문에 곡선이 덮고 있는 면적을 수많은 직사각형으로 잘게 쪼개서 근사하는 방식으로 접근하는 방식입니다. 당연히 오차가 발생하고 계산량은 어마무시합니..
따로 설정을 하지 않으면 파워포인트는 맞춤법 검사를 합니다. 그러면 글자에 빨간밑줄이 생기는데 이게 가끔 불편할 때가 있습니다. 큰 문제는 없지만 그냥 신경이 쓰이는 경우죠. 다행히도 이를 간단히 없앨수가 있습니다. 1. 파워포인트를 실행시킨 후 파일 - 옵션으로 갑니다. 파일을 누르면 아래와 같이 나옵니다. 여기서 옵션을 갑니다. 2. 옵션 - 언어교정 - 입력할 때 자동으로 맞춤법 검사를 해제시킵니다. 체크를 없애고 확인을 누르면 맞춤법이 틀렸다며 있었던 빨간줄이 없어진 걸 볼 수 있습니다. 이상으로 ppt를 만들 때 아무 영향은 없지만 보기 편하기 위한 작은 팁이었습니다.