전체 글 251

카카오톡 대화 내용 워드클라우드

사이드 프로젝트로 간단하게 카카오톡 대화 내용을 불러와 워드클라우드를 만들어 보았다. 카카오톡 대화내용 가져오기 대화방에서 메뉴 -> 대화내용 -> 대화 내보내기 대화내용을 가져올 시 [이름][시간][대화내용]의 형태로 저장이 되는데 내가 필요한 것은 [대화내용]만 필요하므로 전처리 과정이 필요하다. replace 함수를 사용해 필요없는 내용들 및 불용어들을 처리해준다. 물론 replace를 쓰지 않고도 불용어 담겨져있는 text파일을 따로 열어서 진행하는 방법도 있다. 진행하던 도중 C:\Windows\Fonts에 있는 나눔 폰트 경로 문제인지 자꾸 에러가 뜨는 문제가 생겼었다. OSError: cannot open resource 문제인데 stackoverflow 및 다른 웹사이트쪽에서 검색을 해보니..

프로젝트 2023.01.13

비트마스크

정의 이진수를 사용하는 컴퓨터의 연산 방식을 이용하여, 정수의 이진수 표현을 자료 구조로 쓰는 기법 비트 연산자 A B ~A ~B A & B A | B A ^ B 0 0 1 1 0 0 0 0 1 1 0 0 1 1 1 0 0 1 0 1 1 1 1 0 0 1 1 0 NOT(~) : 비트 값을 반전하여 변환 AND(&) : 대응하는 두 비트가 모두 1일 때, 1 반환 OR(|) : 대응하는 두 비트 중 모두 1이거나 하나라도 1일 때, 1 반환 XOR(^) : 대응하는 두 비트가 서로 다를 때, 1 반환 SHIFT(>>, 0100 -> 1000 : 1 -> 2 -> 4 -> 8 오른쪽 시프트 : 1000 -> 0100 -> 0010 -> 0001 : 8 -> 4 -> 2 -> 1 비트 마스크의 집합의 활용 다..

힙 정렬

정의 완전이진트리를 기본으로 하는 힙 자료구조를 기반으로한 정렬 방식 동작 과정 1. 정렬할 N개의 원소로 최대 힙 구성 2. 최대 힙의 루트 노드와 마지막 원소 위치 교환 3. 새 루트 노드에 대해 최대 힙 구성 4. 원소 개수만큼 2와 3을 반복 수행 시간복잡도 최선일 경우 O(nlogn), 평균일 때 O(nlogn), 최악일 경우에도 O(nlogn)이다. 과정 1로 build heap 과정으로 O(nlogn)의 시간 복잡도를 가진다. 과정 2와 3은 최대 힙에서 원소를 하나 삭제한 다음 heapify를 진행하는 것과 같으므로 O(logn)이 걸리고 원소 개수만큼 반복되므로 O(nlogn)이 된다. 따라서 O(nlogn) + O(nlogn) = O(nlogn)의 시간복잡도를 가진다. 공간복잡도 추가적..

이진 탐색

정의 정렬되어 있는(이분 탐색의 주요 조건) 배열에서 데이터를 찾으려 시도할 때, 순차탐색처럼 처음부터 끝까지 하나씩 모든 데이터를 체크하여 값을 찾는 것이 아니라 탐색 범위를 절반씩 줄여가며 찾아가는 탐색 방법이다. 시간 복잡도 전체 탐색 : O(N) 이분 탐색 : O(logN) 동작 과정 우선 정렬을 한다. left와 right로 mid 값을 설정한다. mid와 내가 구하고자 하는 값과 비교한다. 구할 값이 mid보다 :left = mid + 1 구할 값이 mid보다 낮으면 :right = mid - 1 left > right가 될 때까지 계속 반복하기 소스 코드 Java public static int solution(int[] arr, int M) { // arr 배열에서 M을 찾자 Arrays...

병합 정렬

정의 하나의 배열을 두개로 균등한 배열로 분할하고 분할된 배열을 각각 정렬한 다음, 이를 다시 합하여 정렬을 완성하는 알고리즘이다. 분할 정복의 일종으로, 하나의 큰 문제를 두 개의 작은 문제로 분할하여 해결한 다음, 결과를 모아서 문제를 완전히 해결하는 전략이다. 동작과정 리스트의 길이가 1 이하이면 이미 정렬된 것으로 보고 그대로 데이터 리턴. 그렇지 않은 경우에는 분할(divide) : 정렬되지 않은 리스트를 절반으로 잘라 비슷한 크기의 두 부분 리스트로 나눈다. 정복(conquer) : 각 부분 리스트를 재귀적으로 합병 정렬을 이용해 정렬한다. 결합(combine) : 두 부분 리스트를 다시 하나의 정렬된 리스트로 합병한다. 시간복잡도 최선의 경우 O(nlogn), 평균의 경우 O(nlogn), ..

옵저버 패턴

정의 상태를 가지고 있는 주체 객체 및 상태의 변경을 알아야 하는 관찰 객체 주제 객체와 상태 변경을 알아야 하는 관찰 객체가 존재하며 1 대 1 or 1 대 N 관계이고 다른 객체의 상태가 변경될 때마다 어떤 이벤트를 실행하고 싶을 때 사용된다. 인터페이스를 연결하여 느슨한 결합성을 유지하여 Publisher와 Observer 인터페이스를 적용한다. 주로 분산 이벤트 핸들링 시스템을 구현하는데 사용된다. 추가로 MVC(Model-View Controller)패턴에 자주 사용된다. 느슨한 결합성 두 객체가 상호작용을 하지만 서로에 대해서 잘 모른다는 것을 의미한다. 옵저버는 언제든지 추가할 수 있고, 주제와 옵저버는 서로 독립적으로 재사용할 수 있고, 서로한테 영향을 미치지 않는다. 즉, 변경 사항이 생..

유용한 영어 숙어(40-42)

in the middle of something ~하는 중이다. Ex.) I stood in the middle of the lecture to go to the toilet. 화장실을 가기 위해 강의 도중에 일어났다. not one's cup of tea ~가 즐겨하는 것이 아닌 Ex.) Playing soccer is not my cup of tea. 축구를 하는 것은 내가 즐겨하는 것이 아니다. pay through the nose 많은 비용을 지불하다. Ex.) I would like to pay through the nose for having my own house. 내 집을 가지기 위해서는 나는 많은 비용을 지불 할 의향이 있다.

과대적합, 과소적합 및 해결방법

과대적합(overfitting) 모델이 훈련 세트에 과하게 적합한 상태가 되었을 때 발생하는 문제를 말한다. 모델을 지나치게 복잡하게 학습하여 훈련 데이터 셋에서는 모델 성능이 높지만 다른 데이터가 주어졌을 때에는 정확한 예측/분류를 못한다는 것이다. 예를 들어, 중간고사 시험을 위해 중간고사에 대한 답지를 모델에게 학습 시켰을 때 중간고사 시험에 대한 테스트 점수는 높겠지만 기말고사 시험 문제를 주었을 때에는 점수가 낮게 나오는 것으로 비유할 수 있다. 발생 원인 데이터 세트 내 데이터가 충분하지 못한 경우 데이터 세트 내 분산이 크거나 노이즈가 큰 경우 모델의 복잡도가 큰 경우 과도하게 큰 epoch로 학습한 경우 해결 방법 데이터 양 늘리기 데이터 양이 적어서 해당 데이터의 특징 패턴, 노이즈까지 ..

경사 하강법(Gradient descent)

1차 근삿값 발견용 최적화 알고리즘, 1차 미분계수를 이용해 함수의 최소값을 찾아가는 방법 학습률만큼 계속 이동하면서 학습하기 때문에 적절한 학습률을 지정해줘야 한다. 이때 비용함수을 사용하여 이 값을 최소화하는 방식을 사용한다. 비용 함수(Cost function) 예측 값과 실제 결과 간의 차이를 비용(Cost)라 하며, 이 Cost를 제곱해서 더한 함수로 만든 것을 비용 함수라고 한다. 제곱했기 때문에 이차함수의 형태를 가지게 되므로 이를 최소화하는 매개변수를 찾아가게끔 경사 하강법을 적용한다. 가설함수의 형태를 결정짓는 것은 매개변수(parameter)라 부르는 θ 이고 이 값을 적절하게 조정하여 실제값 y에 가장 근접한 가설함수를 Training set을 이용하여 도출해야 한다. 경사 하강법의 ..

팩토리 메소드 패턴

객체를 생성할 떄 어떤 클래스의 인스턴스를 만들 지 서브 클래스에서 결정하게되는 것 인스턴스 생성을 서브 클래스에게 위임한다. 팩토리 메소드 구조 팩토리 메소드 패턴 예시 Robot(추상 클래스) - SuperRobot - PowerRobot RobotFactory(추상 클래스) - SuperRobotFactory- ModifiedSuperRobotFactory # Robot이라는 클래스에서 RobotFactory에서 생성한다. RobotFactory 클래스 생성 public abstract class RobotFactory { abstract Robot createRobot(String name); } SuperRobotFactory 클래스 생성 public class SuperRobotFactory ..