간단한 예제를 통해 K-최근접 이웃 알고리즘(K-Nearest Neighbor; KNN)에 대해 알아보고자 한다. 본 예제의 내용은 한빛미디어의 책 혼자 공부하는 머신러닝+딥러닝의 내용 일부를 매트랩으로 구현한 것이다. 본 예제 실행을 위해서는 Statistics and Machine Learning Toolbox가 필요하다. 1. 데이터 준비 % 빙어(smelt)의 길이와 무게 smelt_length = [9.8, 10.5, 10.6, 11.0, 11.2, 11.3, 11.8, 11.8, 12.0, 12.2, 12.4, 13.0, 14.3, 15.0]; smelt_weight = [6.7, 7.5, 7.0, 9.7, 9.8, 8.7, 10.0, 9.9, 9.8, 12.2, 13.4, 12.2, 19.7..
수치해석 강의 중 굉장히 좋은 질문을 받았다. 왜 fprintf를 쓸 때에는 뒤에 세미콜론을 안 붙여도 되나요? 관찰력이 좋거나 호기심이 많은 사람이라면 한번쯤 가져봄직한 의문이다. 이 질문에 대한 힌트는 함수의 반환값 존재 여부와 반환값 무시 여부에 있다. 우선 세미콜론은 연산 결과를 출력하지 않을 때 사용한다. >> e = exp(1) e = 2.7183 >> e = exp(1); >> 등호 =도 대입연산자라는 연산자이므로 대입연산의 결과가 출력된다. 그 결과를 보고 싶지 않다면, 즉 변수 e에 값을 대입만 하고 그 결과를 보고 싶지 않다면 세미콜론을 붙이면 된다. 반환값이 없는 함수를 호출하면 세미콜론 여부와 무관하게 아무것도 출력되지 않는다. function fun(x) x = x^2; end >..
(본 글은 수학의 즐거움 직문수 4강을 참고하여 작성한 것입니다.) 아래와 같은 함수 $f: A \to B$가 있다. 함수가 갖춰야 할 조건을 모두 갖췄으므로 분명히 함수가 맞다. $f: A \to B$의 역함수 $g: B \to A$는 아래 조건을 만족해야 한다. $$g \circ f = \mathrm{id}_A$$ $$f \circ g = \mathrm{id}_B$$ $\mathrm{id}_A$와 $\mathrm{id}_B$는 각각 $A$에서 $A$로 가는 항등함수, $B$에서 $B$로 가는 항등함수를 말한다. 합성 함수의 결과가 항등함수가 되어야 한다고 하니, 그냥 심플하게 뒤집어서 붙여보자. 아차, $g$가 함수가 아니다. $g$가 함수이려면 어떻게 해야 할까? 우선 2와 3이 모두 $b$를 가리..
매트랩의 fprintf와 파이썬의 f-string 문법은 닮은 부분이 많다. 사실 거의 같다고 봐도 무방할 정도이다. f-string 문법이 제대로 정리된 페이지가 의외로 없는 듯하여, fprintf와 비교할 겸 만들어보았다. 아래에서 프롬프트가 >>인 것은 매트랩, >>>인 것은 파이썬이다. f-string 문법은 본 문서에 소개한 것 외에도 더 있는데, fprintf와 1:1로 매칭되는 것들만 본 문서에 정리하였다. 1. 그냥 출력 >> disp(256) 256 >>> print(256) 256 2. 정수 >> fprintf('%d\n', 256) %10진수 256 >> fprintf('%o\n', 256) %8진수 400 >> fprintf('%x\n', 256) %16진수 100 >>> print..
수학에서 공리는 왜 필요할까? 수학의 모든 명제는 근거가 있어야 한다. 명제 A를 증명하기 위해서는 근거가 되는 다른 명제 B가 있어야 한다. 즉, "B에 의해 A가 참이다."라는 문장으로 서술되어야 한다. 그런데 명제 B 또한 참이기 위한 근거가 필요하다. 명제 B가 참이 되는 이유를 명제 C라고 하자. 그렇다면 수학의 각 명제는 아래와 같은 논리로 연결될 것이다. 그런데 우리는 아래와 같은 순환논리에 빠지기는 원치 않는다. A가 참인 이유는 B 때문이고, B가 참인 이유는 C 때문이고, C가 참인 이유는 A 때문이다…와 같은 순환논리는 결국 "A가 참인 이유는 A가 참이기 때문이다"라는 항진식tautology에 지나지 않기 때문이다. 아래 대화를 보자. Q. 여기 이디야 커피 어디 있어요? A. 본죽..
함수 핸들에 대해 얘기해보고자 한다. 함수를 어떤 동작function을 하는 동사verb로서가 아니라 객체object로 다룰 수 있는 명사noun로서 취급하는 것은 개념의 전환이 필요한 부분이다. 이는 프로그래밍뿐만 아니라 수학에서도 모두 필요한 아이디어이다. 우리에게 익숙한 함수의 모양은 아래 그림과 같다. 물론 경우에 따라서는 입력이나 출력, 또는 둘 다 없을 수도 있다. 어쨌든 함수는 일동의 동작이다. 그런데 종종 함수를 동작이 아니라 객체로 다루고 싶을 때가 있다. 예를 들어 아래와 같은 질문을 생각해보자 함수 myadd는 입력 인자를 몇 개 받는가? 이 기능을 함수로 만든다면 이런 모양이 될 것이다. 함수명: num_input_args 입력: 함수 myadd 출력: myadd의 입력 인자 개수 ..
2015년이니까 벌써 8년 전 글이구나. 정리해둘 겸 적어둔다. 2023년 8월 기준 접속 안되는 사이트는 취소선 처리했다. 일반 edX Coursera Coursmos Highbrow Skillshare Curious lynda.com CreativeLive Udemy 코딩 Codecademy Stuk.io Udacity Platzi Learnable Code School Thinkful Code.org BaseRails Treehouse One Month Dash 데이터 DataCamp DataQuest DataMonkey 언어 (사람 언어, 프로그래밍 말고) Duolingo Lingvist Busuu Memrise 일반지식 TED-Ed Khan Academy Guides.co SquareknotLe..
n차원 구의 부피는 어떻게 계산할까요? 어...음... n차원 구가 무엇인지부터 말을 할 수 있어야겠군요. 3차원 구는 3차원 공간의 점들 중 어떤 한 점에서 떨어진 거리가 어떤 고정된 상수인 점들의 집합입니다. 3차원 단위구는 한 점에서 떨어진 거리가 1인 점들의 집합이죠. 그렇다면 2차원 구는 한 점에서 떨어진 거리가 어떤 고정된 상수인 2차원 공간의 점들의 집합이라고 볼 수 있겠군요. 네, 원입니다. 이 개념을 n차원으로 확장하지 못할 이유는 없습니다. n차원 구는 n차원 공간의 점들 중 어떤 한 점에서 떨어진 거리가 고정된 상수인 점들의 집합이고, n차원 단위구는 이 거리가 1인 점들의 집합일 겁니다. 2차원 구(원)의 부피는 $$ V(2) = \pi r^2 $$ 이죠. 3차원 구의 부피는 $$ ..
매트랩 단톡방에서 재밌는 문제가 나왔습니다. 숫자에 통화 표기처럼 세 자리마다 쉼표를 추가하는 것인데요. 다양한 방법들이 나왔는데, 저는 매트랩스러운 방법을 생각해보았습니다. 우선 쉼표가 추가된 이상 숫자는 분명히 아니니 char 배열로시작하도록 하죠. >> J = '1234567890'; 제 아이디어는 아래와 같습니다. 1. 길이가 3의 배수가 되도록 왼쪽에 zero padding을 한다. (뒤에서 보겠지만 0이 아니어도 무관합니다.) 2. 세 자리씩 끊어지도록 reshape을 한다. (역시 매트랩은 reshape이죠.) 3. 세 자리마다 뒤에 쉼표를 추가한다. 4. 한 줄로 다시 이어붙인다. 5. 맨 뒤 쉼표를 없애고, padded zero도 없앤다. 1. 길이가 3의 배수가 되도록 왼쪽에 0을 붙입..
후... 힘들었습니다. - 게으른