전체 글
파이썬과 객체지향 (python and class) 1
음.. 필자와 같은 비전공자 출신이 처음 프로그래밍을 접했을 때 당황하는 모먼트가 분명 몇가지 있으리라 생각한다. 혹자가 “처음 프로그래밍을 접하면서 가장 이해 하기 힘든 개념이 무엇이었나요?”라고 묻는다면, 나는 주저없이 class에 관해 얘기를 하지 않을까 싶다. 머릿속으로 이해를 해도 쉽게 생각한 부분이 이미지로 형상화가 잘되지않으며, class안에 있는 속성(instance)와 행위 (method)는 코딩을 할때마다 다시금 “이해를 하고 지금 코딩을 하는것인가?”라고 생각하게 만들었다. 간략하게 필자가 이해한 절차적 프로그래밍(aka 구조적 프로그래밍, 함수지향적 프로그래밍)를 언급, 비교하면서 이번 파이썬의 객체지향에 대해 알아보겠습니다. 절차적 프로그래밍 대표적인 언어: c하나의 기능을 다시 ..
[강화학습] 조작적 조건화와 스키너 상자(Skinner Box)
강화학습이란? 강화학습(Reinforce Learning) 구현에 앞서, 강화학습이란 무엇인지 짚고 넘어가야 할 필요가 있다고 생각합니다. 강화학습의 가장 큰 특징은 사람처럼 시행착오를 통해 학습해가는 점이라고 할 수 있습니다. 즉, 어떤 행동을 취해보고, 그 결과가 좋았는지 나빴는지 확인하고 그 행동을 평가하여 조금씩 스스로 방법을 개선해 나간다고 할 수 있죠. 이러한 성질때문에, 게임 분야에서 강화학습의 예시가 직관적으로 다가옵니다. 강화학습은 시행착오의 결과로 얻은 보상(reward)에 따라 행동을 형상하게 되는데, 이런 보상에 의한 행동 형성을 조작적 조건화(operant conditioning)이라고 합니다. 스키너 상자 (Skinner Box) 예시를 통해 강화학습의 원리를 조금 더 직관적으로..
[python] 해밍 거리 (Hamming Distance) - 동적 계획법
해밍 거리 (Hamming Distance) 해밍 거리는 문자열 사이의 거리를 정의하는 가장 심플한 방법입니다. 동적 프로그래밍에서 Edit distance를 배울 때 같이 익히는 거리 계산법 중 하나인데요. 해밍거리는 문자열에 포함된 문자를 앞에서부터 하나씩 비교하여 몇 개나 다른가를 출력하는 거리 함수 입니다. 예제를 살펴보겠습니다 123456789 vs 023456789 => 1개의 문자열이 다름 (0과 1) ILOVEYOU vs YLOVEIOU => 2개의 문자열이 다름 (I & Y의 위치가 다름) 보시다시피 간단한 거리 계산 방법입니다. 이를 파이썬의 scipy 패키지를 이용하여 구현해보겠습니다. # 해밍 거리 활용 예제 from scipy.spatial import distance sample..
[python] 기본적인 탐색 알고리즘 2 - BFS
기본적인 탐색 알고리즘 관련 내용은 이전 포스팅 참고 [python] 기본적인 탐색 알고리즘 1 - DFS 탐색 알고리즘에 대해 알아봅시다. 인공지능을 공부하면, 상당수의 개념이 상태공간에서 비롯됨을 알 수 있습니다. 이러한 상태공간을 탐색하는데에는 여러 방법이 있는데요. 그중에서도 아무 benban.tistory.com 이번 포스팅에선 너비우선탐색 Breath-First Search (BFS)에 대해 알아보는 시간을 갖겠습니다. BFS 원리 설명 위 그래프와 리스트는 BFS의 전형적인 문제해결 방법을 나타냅니다. DFS와 다른점이 있다면, 어떠한 노드를 탐색했을 때, 해당 노드의 자식 노드를 가장 우선적으로 탐색하는 방법이 아닌 오픈리스트 맨 마지막에 추가하여 가장 나중에 탐색하여 넓게 넓게 확인하며 ..
[python] 기본적인 탐색 알고리즘 1 - DFS
탐색 알고리즘에 대해 알아봅시다. 인공지능을 공부하면, 상당수의 개념이 상태공간에서 비롯됨을 알 수 있습니다. 이러한 상태공간을 탐색하는데에는 여러 방법이 있는데요. 그중에서도 아무런 기초 지식이 없을때 활용할 수 있는 탐색 방법중 하나인 망라적 탐색(Exhaustive Search)에 대해서 알아보도록 하겠습니다. 망라적 탐색을 수행하려면 몇 가지 기본적인 Rule을 숙지해야합니다. 이미 확인한 곳을 다시 확인해서는 안됨 (closed list로 관리) 아직 확인하지 않은 곳을 알고 있어야함 (open list로 관리) 효율적인 순서로 탐색해야함 -> 깊이우선탐색(DFS), 너비우선탐색(BFS) 활용 그 중에서도 이번에는 깊이 우선 탐색인 Depth-First Search (DFS)에 대해 알아보고, ..
[Python] append vs extend (list의 append와 extend 차이점)
파이썬 리스트에 새로운 원소를 추가하여 확장시킬 때 사용하는 함수인 append()와 extend()에 대해 살펴보고 두 메소드의 차이점을 알아보도록 하겠습니다. list를 생성 후 새로운 데이터를 삽입하려면 크게 세 함수를 활용하여 삽입 가능합니다. 바로 insert, append, extend인데요. 여기서는 가장 헷갈리는 append와 extend에 대해 알아보죠. 파이썬 list의 append는 list.append(x) 를 통해 리스트 맨 마지막 요소로 x를 추가할 수 있습니다. (append appends a specified object at the end of the list) 파이썬 list의 extend는 list.extend(iterable 객체) 를 통해 리스트 맨 마지막 요소로 i..
[python] M1 mac konlpy No JVM 오류와 설치 방법
(M1 mac konlpy 오류: No JVM shared library file (libjli.dylib) found 마주시 대처 방안 포함) M1 맥의 삶은 다이나믹합니다. tensorflow, pytorch gpu 연동 등 어느 하나 쉬운게 없죠. (물론 지금은 많은 부분에서 개선되었지만요) 이번 포스팅에서 알아볼 한국어 nlp의 대표 패키지 konlpy 설치도 호락호락 하지 않습니다. 이건 비단 맥북이 조금 더 쉽게 설치할 수 있는 경향이 있습니다. 자바 설치와 자바 경로 잡아주는 것이 윈도우에 비해 더 단순하기 때문이죠. 거두절미하고 바로 알려드리겠습니다. 자바 설치하는 경우부터 살펴보시죠. (이 포스팅을 보러 오신 분들은 No JVM shared library file (libjli.dylib..
[SQL] 뷰(VIEW)란 무엇인가?
SqlD나 데이터베이스를 공부하다 보면 뷰(view)에 대해 다룬 내용을 마주할 때가 있으리라 생각됩니다. 대부분 뷰가 그냥 SELECT문을 날려서 보여주는 테이블 정도로만 이해하하고 넘어가시는 분도 계시지만 조금 구체적으로(?) 뷰와 뷰의 특징은 어떻게 되는지 한번 알아보겠습니다. 우선 뷰는 한 번 생성해 놓으면 테이블이라고 생각해도 될 정도로 테이블과 거의 동일한 개체로 여겨집니다. 그렇기 때문에 사용자가 SELECT 문을 통해 쿼리를 실행하면, 그것에 대한 결과값으로 보여지는 테이블이 뷰 테이블이라고 할 수 있습니다. 그럼 일반 테이블이랑 뭐가 다른 것이냐? '읽기 전용'으로 많이 사용되는 것이 다르다고 할 수 있습니다. 하지만 뷰를 통해 원 테이블의 데이터를 수정할 수도 있습니다. 이 부분에 대해..