본문 바로가기

전체 글

(231)
Next.js 개발 시작 - 프로젝트 생성, 기본적인 페이지 지금까지 Node.js, flask, 루비온레일즈로 웹 개발을 했었다.루비온레일즈는 블로그 시작하기 전에 했던거라 없지만 Node.js와 flask는 블로그에 정리되어 있다. Node.js, Next.js, flask가 각각 어떻게 다른지 간단하게 설명하자면, 우선 Node.js는 서버 사이드 애플리케이션 개발에 유리하다.그리고 Next.js는 react 기반이고 웹 애플리케이션 개발에 적합하다. Next.js는 서버 사이드 애플리케이션 개발에는 적합하지 않을 수 있다.flask는 Node.js와 Next.js와는 다르게 javascript가 아니라 파이썬 기반이고, 다양한 라이브러리로 인해 확장성이 높다.그리고 코드 자체가 간단하다는 것이 가장 큰 장점인 것 같다.프로젝트 자체가 가벼운 편이고 자유도가..
모두의 딥러닝 - 13장(과적합 피하기) 초음파 광물 예측 데이터 sonar.csv 파일을 이용해 딥러닝을 해볼 것이다.데이터는 그냥 sonar.csv를 검색하면 나오는 kaggle 사이트에서 가져왔다. 이전에 했던 것처럼 딥러닝 모델을 설계해서 작동시켰다. 200 epoch를 돌렸는데 정확도가 아예 1.0000이 나온다.이런 현상을 과적합이라고 한다.과적합을 설명하는 가장 적절한 그림이다.과적합은 모델이 학습 데이터셋 안에서는 높은 정확도를 보이지만 새로운 데이터에 적용하면 잘 맞지 않는 것이다.빨간색과 하얀색을 나누는 모델을 학습시켰다고 할 때, 과적합이 일어나면 주어진 샘플에 대해서는 정확히 맞게 선이 그어졌지만너무 주어진 데이터에만 최적화 되어있다.조금 다른 느낌이긴 하지만 이해를 돕기 위해서 개인적인 비유로 설명하자면, 1 2 3 4 ..
그래프 최단경로 알고리즘 - 플로이드워셜, 다익스트라, 벨만포드, SPFA 정리 그래프에서 최단경로를 구하는 대표적인 알고리즘 4개를 소개할 것이다.정점의 개수는 V(vertex), 간선의 개수는 E(edge)로 표기한다. 1. Floyd - Warshall 알고리즘모든 정점 간의 최단거리를 구하는 알고리즘이다.개념과 구현 모두 아주 간단한데, 그냥 중간 정점 k를 거치면서 i에서 j로 가는 최단경로를 갱신해나가면 된다.k를 1부터 N까지 돌면서 중간 정점으로 1~k를 사용하며 i->j로 가는 최단 경로를 저장한다.adjMat[i][k]와 adjMat[k][j]에 저장된 값은 중간 정점으로 1~k-1을 사용하는 최단 경로일 것이다.여기서 중간 정점 k를 사용할 때 거리가 더 짧아진다면 adjMat[i][j]가 갱신될 것이다. 매우 간단한 알고리즘이지만, 시간복잡도가 O(V^3)이고,..
모두의 딥러닝 - 12장(다중 분류 문제 해결하기) 12장에서는 아이리스 품종 예측으로 다중 분류 실습을 한다.데이터는 kaggle에서 가져오고, 제대로 다운이 되어서 열리는지 확인해본다.데이터 전체를 확인해보니, 꽃의 종류별로 데이터 분포가 다른 것을 확인할 수 있다. 품종 예측을 하기 위해서 먼저 원핫 인코딩을 해야 한다.품종이 문자열로 표시되어 있기 때문에 클래스 이름을 숫자 형태로 바꿔줘야 한다. sklearn 라이브러리의 LabelEncode를 사용하면 된다.Y값이 문자열에서 0,1,2 세가지 숫자로 바뀐다.그리고 이렇게 to_categorical을 이용해 (1,0,0), (0,1,0), (0,0,1) 이렇게 Y값을 바꿔줄 수 있다. 이제 모델 설계를 해준다.다중 분류에 적절한 오차 함수 categorical_crossentropy를 사용하고, ..
모두의 딥러닝 - 11장(데이터 다루기) 11장에서는 피마 인디언 당뇨병 데이터를 분석하는 실습을 한다.데이터는 kaggle에서 가져올 수 있다. .head(5)를 이용해 데이터의 첫 5줄을 출력했다..info() 함수는 데이터에 대한 정보를 알려준다. 768개의 데이터가 있고, 9개의 열에 대해 각각 768개의 데이터가 전부 있다는 걸 확인할 수 있다. .describe() 함수는 각 열의 데이터에 대한 백분위, min, max 등 구체적인 정보를 준다.matplotlib과 seaborn 라이브러리를 이용해 각 열의 데이터들 사이의 상관관계도 볼 수 있다.발병여부를 나타내는 outcome과 가장 상관관계가 높은 항목이 glucose이다. glucose와 outcome을 따로 떼어서 보면, outcome이 1일 때는 glucose가 큰 경우가 ..
모두의 딥러닝 - 10장(모델 설계하기) 2장에서 작성했던 코드이다.Sequentail()은 딥러닝 모델을 생성하는 부분이다.생성한 딥러닝 모델에 model.add를 통해 층을 쉽게 추가할 수 있다.Dense는 층의 구조를 결정하는 함수이다.model.add(Dense(30, input_dim=16, activation='relu')) 에서 30은 노드의 개수이다.input_dim은 입력 데이터의 개수이고, activation은 activation funnction을 의미한다.keras에서는 입력층이 따로 있는 것이 아니라서 첫번째 Dense가 은닉층이자 입력층이기 때문에 input_dim을 지정해줘야 한다.그리고 마지막 은닉층이 출력층이 된다.위의 코드에서는 출력층의 출력값 개수는 1개이고, sigmoid 함수로 결정된다. model.comp..
모두의 딥러닝 - 6장 ~ 9장(신경망) 6장부터는 신경망에 대한 내용을 다룬다.인간의 뇌에서 뉴런이 서로 연결되는 과정을 모방하여 여러 층의 퍼셉트론을연결시키고 복잡하게 조합하여 입력 값에 대한 판단을 하게 하는 것이 신경망의 원리이다. 앞에서 했던 회귀는 y = ax+b에서 a와 b를 찾는 과정이었다.퍼셉트론도 같은 원리인데 용어를 정리해보자면, y=wx+b로 표현을 하고w는 가중치(weight), b는 바이어스(bias)라고 한다.입력값 x와 w의 곱을 모두 더하고 b를 더한 값을 가중합이라고 부른다.이 가중합을 이용해 결과를 판단하는데, 이때 판단하는 함수를 활성화 함수(activation function)라고 한다.앞에서 사용했던 시그모이드 함수는 0과 1을 판단하는 대표적인 activation function이다. 퍼셉트론도 앞에서 ..
책 구매하기2 - 최대유량(에드몬드-카프 알고리즘) 최대 유량은 용량이 정해진 간선들이 있는 그래프에서 출발점->도착점으로 보낼 수 있는 최대 유량을 구하는 문제이다.최대 유량 문제를 해결하는 아이디어는 포드-풀커슨 방법이다.포드-풀커슨 알고리즘이라고 부르기도 하는데, 아이디어의 핵심은 음의 유량을 설정하는 것이다.우선 사이에 간선이 있는 두 정점에 간선이 한 방향으로만 있다면, 반대 방향 간선도 만들어주고, 용량을 0으로 설정한다.출발점에서 도착점까지의 경로를 dfs로 하나 찾으면, 그 경로에 흘려보낼 유량은 지나치는 모든 간선의 (용량-현재유량)의 min값이될 것이다.그렇게 계산한 유량을 흘려보내주고, 지나치는 모든 간선의 반대 방향 간선에 음의 유량을 흘려준다.처음에는 음의 유량을 설정하는 것이 어떤 의미인지 이해하기 어렵긴 한데, 여러 그래프의 예..