목록알고리즘 (12)
Dev log
파이썬 코드를 가끔 보다 보면 _ 같은 것을 볼 수 있습니다. 이 언더바(_)는 언제 사용하는 걸까요? 언더바( _ )를 사용하는 경우 언더바를 사용하는 경우는 주로 아래의 4가지 경우입니다. 1. 인터프리터에서 마지막 값을 저장할 때 2. 값을 무시하고 싶을 때 3. 변수나 함수명에 특별한 의미를 부여하고 싶을 때 4. 숫자 또는 문자 값의 자릿수 구분을 위한 구분자로써 사용할 때 우선 첫번째, 인터프리터에서 마지막 값을 저장할 때 사용하는데, 아래와 같이 사용할 수 있습니다. 그래서 이런 출력도 가능합니다. 두번째는 값을 무시하고 싶을 때 사용하는데, for 문을 사용할 때 가장 많이 사용됩니다. 2를 무시하고 값이 출력되는 것을 알 수 있으며, for 문을 사용하면 아래와 같이 사용할 수 있습니다...
탐욕 알고리즘은 당장 눈앞의 이익만 추구하는 것을 이야기 하며, 먼 미래를 내다 보지 않고 지금 당장의 최선이 무엇인가를 판단하는 알고리즘입니다. 그럼 탐욕 알고리즘을 이용하여 금액과 화폐가 주어졌을 때 가장 적은 화폐로 지불하는 것을 구현해도록 하겠습니다. 예를 들어 액수를 362 라고 입력하고 화폐단위를 1,50,100 이라고 입력했을 때 결과 값이 100원 3개, 50원 1개, 1원 12개의 값이 나와야 합니다. def coinGreedy(): money = int(input('액수입력 : ')) cash_type = [int(x) for x in input('화폐단위를 입력하세요 : ').split(' ')] cash_type=sorted(cash_type, reverse=True) coin={}..
버블 정렬은 두 인접한 원소를 검사하여 정렬하는 방법입니다. 파이썬으로 구현하자면 아래와 같이 구현할 수 있습니다. def bubble_search(data): for i in range(len(data)): for j in range(len(data)-1): if data[j] > data[j+1]: (data[j],data[j+1]) = (data[j+1],data[j]) print('i=',i,'j=',j,data) print(data) data = [5,4,3,2,1,8,7,10] bubble_search(data) 여기서 버블 정렬을 재귀 함수로 구현한다면 아래와 같이 구현할 수 있습니다. def bubble_search(data): for i in range(len(data)-1): if da..
이진 검색 알고리즘(binary search algorithm)은 오름차순으로 정렬된 리스트에서 특정한 값의 위치를 찾는 알고리즘입니다. 처음 중간의 값을 임의의 값으로 선택하여, 그 값과 찾고자 하는 값의 크고 작음을 비교하는 방식입니다. data = [ 1, 7, 11 , 12, 14 , 23, 33, 47, 51, 64, 67, 77, 130, 672, 871 위와 같은 데이터가 있을 때, 이진 탐색을 구현하면 아래와 같습니다. def binary_search(in_data, input_num): in_data = sorted(in_data) start_num = 0 end_num = len(in_data) - 1 while start_num input_num: end_num = mid_num - ..
앞으로 다양한 데이터를 만나더라도 손쉽게 스크립트 하나로 knn을 돌리기 위해 간단하게 만들어보겠습니다. knn 자동화 스크립트 파일명을 입력 받고, 컬러명이 있는지에 관한 유무와 라벨이 위치한 번호 마지막으로 제거할 컬럼의 위치를 입력 받아보겠습니다. library(data.table) library(class) input_table
오늘은 적절한 k값을 알아내는 방법에 대해 이야기 해보겠습니다. 여태껏 이 블로그에서 다양한 데이터를 사용하여 knn 분류를 해보았는데, 그때마다 k값을 다르게 하면 매번 값이 달라진다는 것을 어렴풋 다들 알고 계실꺼라 생각합니다. 그렇다면 적절한 k값을 찾기 위해서는 어떻게 해야댈까요 ? 오늘은 그 방법에 대해 알아보겠습니다. 마찬가지로 데이터는 데이터는 여기에서 볼 수 있으며 전체 코드 역시 GitHub에서 보실 수 있습니다. DataSet 이번 데이터는 부도 데이터이며, load 후에 결측값과 공백값을 제거하겠습니다. HMEQ
오늘은 knn을 사용하여 유방암 분류를 해볼까합니다. 데이터는 데이터는 여기에서 볼 수 있으며 전체 코드 역시 GitHub에서 보실 수 있습니다. 월래 오늘 적절한 k값을 알아내는 것에 관려하여 포스팅을 할 예정이였으나, R에서 knn 관련 데이터 예제로 가장 많이 사용하는 것중에서 하나만 집고 넘어가는 것도 나쁘지 않고 해서 오늘은 유방암 데이터를 가지고 분류를 해보도록 하겠습니다. DataSet 우선 데이터를 load 해보겠습니다. wisc
계속해서 재귀 알고리즘에 익숙해지기 위해 알고리즘 단골 문제인 팩토리얼과 최대공약수를 풀어보겠습니다. 재귀 함수가 무엇인지는 저번 포스팅에서 설명했으므로 이번에는 자세한 이야기는 생략하겠습니다. factorial 10!을 구할껀데, 10!을 풀어서 이야기하면 10 * 9 * 8 * 7 * 6 * 5 * 4 * 3 * 2 * 1 이고 , 계산하면 3,628,800 입니다. 구현하면 아래와 같습니다. def factorial2(count): if count > 0: return count * factorial2(count-1) elif count==0: return 1 factorial2(10) 코드 설명을 조금 하자면, 아래와 같습니다. fact(10) 10 * fact(9) 9 * fact(8) 8 * ..
알고리즘 문제를 풀면서 반드시 알아야 할 알고리즘 중 하나는 아마 재귀 알고리즘일거라 생각합니다. 재귀 함수를 사용할 수 있는 곳에서는 재귀 함수를 사용하며 알고리즘을 풀면서 공부를 해야 된답니다. 재귀 함수 재귀 함수는 함수내에서 다시 자신을 호출한 후 그 함수가 끝날때까지 함수 호출 이후의 명령문을 수행하지 않습니다. 즉, "반복문 + 스택구조가 결합된 함수를 재귀함수라고 볼 수 있습니다. 스택 구조가 결합된 함수에 대해서 조금 더 풀어서 이야기해보도록 하겠습니다. 스택구조가 결합되었다는 의미는 먼저 들어간 데이터가 가장 마지막에 나오는 구조, 나중에 들어간 데이터가 가장 먼저 나오는 구조(후입선출) 을 말합니다. 쉬운 예를 들어보겠습니다. def hap(a,b): print(a+b) def gop(..
주 사용언어는 Python이지만, 복습의 의미로 다양한 언어로 알고리즘을 차근차근 풀어볼까 합니다. 오늘은 간단하게 오래전에 습득했지만, 전혀 사용하고 있지 않은 언어인PLSQL을 복습할겸, PLSQL로 간단한 문제를 풀겠습니다. PLSQL로 어떻게 알고리즘을 풀 수 있는가? 를 물어보신다면, PLSQL이 무엇인가? 라는 포스팅이 있으니 참고 하라고 말씀드리고 싶습니다만! 안보실꺼 같으니 다시 한번 설명 드리자면, PLSQL은 비절차적 언어인 SQL + 프로그래밍(if,loop)를 이야기합니다. 즉, 절차적 언어로 만드는 프로그래밍입니다. if문과 loop문을 사용할 수 있습니다. 그렇다면 가장 기본적인 두 수자의 덧셈을 만들어보겠습니다. accept p_num1 prompt '첫번째 숫자를 입력하세요 ..
오늘은 K-Nearest Neighbors(KNN)라는 알고리즘에 대해 알아보려고 합니다. Knn 머신러닝을 공부하면 가장 쉽게 먼저 접하는 알고리즘 중 하나입니다. 이번 포스팅에서는 Knn이 무엇인지, 필요한 이유에 대해 알아보겠습니다. knn 사회적인 관계를 관찰해본적인 있나요? 대략적으로 비슷한 사람끼리 모이는 성질이 있다고 합니다. 그래서 비슷한 취향의 사람들끼리 모여서 동회회를 만들거나 비슷한 부류의 계층의 사람들끼리 친분을 맺기도 합니다. 그렇다면 공간적은 관계를 관찰해볼까요? 길을 지나다가 보면 가구점이 모여있는 상가지역이 따로 형성된 곳이 있지 않나요? 한약방이 밀집되어 있는 지역이나, 가구점, 음식점 등 밀집되어 있는 지역이 따로 모여 있는 경우가 많은 것을 우리는 길을 지나다가 느낄 수..
knn을 사용하여 조금 의미 있는 결과를 가지고 재밌는 결과를 뽑아내보도록 하겠습니다. 데이터는 여기에서 데이터를 다운 받아주세요. DataSet 이번 데이터를 열어보면 나이, 월수입, 상품 구매여부, 나이가 있습니다. 이 데이터를 이용해, 백화점 또는 소셜커머스 회사에서 데이터 분석을 통해 구매자가 제품을 구매할 고객인지 아닌지를 알아내려고 한다고 가정해보고 knn을 이용하여 문제를 풀어보도록 하겠습니다. Nomalize (정규화) 우선 데이터를 불러옵시다. buy