전체 글 35

SilverⅤ) 1251번. 단어 나누기 (미완료)

문제 알파벳 소문자로 이루어진 단어를 가지고 아래와 같은 과정을 해 보려고 한다. 먼저 단어에서 임의의 두 부분을 골라서 단어를 쪼갠다. 즉, 주어진 단어를 세 개의 더 작은 단어로 나누는 것이다. 각각은 적어도 길이가 1 이상인 단어여야 한다. 이제 이렇게 나눈 세 개의 작은 단어들을 앞뒤를 뒤집고, 이를 다시 원래의 순서대로 합친다. 예를 들어, 단어 : arrested 세 단어로 나누기 : ar / rest / ed 각각 뒤집기 : ra / tser / de 합치기 : ratserde 단어가 주어지면, 이렇게 만들 수 있는 단어 중에서 사전순으로 가장 앞서는 단어를 출력하는 프로그램을 작성하시오. 입력 첫째 줄에 영어 소문자로 된 단어가 주어진다. 길이는 3 이상 50 이하이다. 출력 첫째 줄에 구..

알고리즘/백준 2023.04.08

BronzeⅠ. 1157번 단어 공부

문제 알파벳 대소문자로 된 단어가 주어지면, 이 단어에서 가장 많이 사용된 알파벳이 무엇인지 알아내는 프로그램을 작성하시오. 단, 대문자와 소문자를 구분하지 않는다. 입력 첫째 줄에 알파벳 대소문자로 이루어진 단어가 주어진다. 주어지는 단어의 길이는 1,000,000을 넘지 않는다. 출력 첫째 줄에 이 단어에서 가장 많이 사용된 알파벳을 대문자로 출력한다. 단, 가장 많이 사용된 알파벳이 여러 개 존재하는 경우에는 ?를 출력한다. 예제 소스코드 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 word = input().lower() count = dict() for letter in word: count[letter] = count.get(letter, 0) + 1 ..

알고리즘/백준 2023.04.08

그래프와 워드 클라우드

⛄ 단어 빈도 그래프 텍스트 분석에서 가장 단순하고 기본적인 아이디어는 하나 혹은 여러 개의 문서에서 가장 많이 사용된 단어를 파악하는 것으로, 이것만으로도 상당히 많은 정보를 얻을 수 있다. 단어 빈도 그래프를 그리려면 먼저 단어의 빈도를 구해야 한다. 이 작업을 하기 전 전처리 단계에서 앞서 배운 다양한 전처리 기법들을 활용한다. 데이터셋은 저작권이 만료된 영어 소설들을 제공하는 구텐베르크 프로젝트가 있는데, 여기서 루이스 캐럴의 이상한 나라의 앨리스 문서를 활용한다. import nltk nltk.download('gutenberg') from nltk.corpus import gutenberg # 파일 제목을 읽어온다. file_names = gutenberg.fileids() print(file..

텍스트 전처리

⛄ 텍스트 전처리의 개념 자연어 처리는 - 자연어로 쓰여진 글을 전처리하는 준비단계 - 전처리된 결과를 컴퓨터가 다루고 이해할 수 있는 형태로 변환하는 단계 - 변환된 형태를 이용해 다양한 분석을 수행하는 단계 로 나누어 생각할 수 있다. ⛄ 전처리의 단계 텍스트 전처리(Text Preprocessing)는 1) 주어진 텍스트에서 노이즈와 같이 불필요한 부분을 제거하고, 2) 문장을 표준 단어들로 분리한 후에, 3) 각 단어의 품사를 파악하는 것’까지를 의미한다 이를 정리하면 다음과 같습니다. ✔ 정제(cleaning) : 분석에 불필요한 노이즈를 제거(noise removal)하는 작업 ✔ 토큰화(tokenization) : 주어진 텍스트를 원하는 단위(토큰, token)로 나누는 작업. ✔ 정규화 :..

텍스트 마이닝 기초

⛄ 텍스트 마이닝의 정의 텍스트 마이닝이란 텍스트에서 고품질 정보를 추출하는 과정(the process of deriving high-quality information from text)이다. 여기서 고품질 정보란, '패턴이나 트렌드를 통해서 얻어진다(High-quality information is typically obtained by devising patterns and trends)'라고 말한다. 정리하면, 텍스트로부터 패턴이나 트렌드를 분석해서 추출한 고품질의 정보이다. 그렇다면 패턴은 어떻게 찾을까? 우선 '통계적 패턴 학습'을 예로 들 수 있다. 최근 가장 많은 주목을 받은 머신러닝이 이에 해당하는 방법론이다. 다만 비정형적인 텍스트에 대해 머신러닝에 바로 적용할 순 없다. 즉, 비정형 ..

딥러닝과 신경망

⛄ 딥러닝 파이프라인 딥러닝(특히 컴퓨터 비전) 파이프라인은 (1) 이미지 입력, (2) 전처리, (3) 특징 추출, (4) 학습 알고리즘(분류기) 단계로 구성되어 있다. ⛄ 퍼셉트론 신경망은 많은 수의 뉴런으로 이루어져 있으며 이들 뉴런은 층 모양으로 배열되어 출력을 예측하기 위한 계산을 수행한다. 이러한 구조를 다층 퍼셉트론(multilayer perceptron)이라고 부른다. 다층 퍼셉트론의 그래프 구조에서 각 노드를 뉴런(neuron)이라고 부른다. 생물학적 뉴런은 여러 개의 수상돌기(dendrite)로부터 서로 다른 세기의 전기적인 신호를 받고 이 신호 세기의 합이 정해진 임계값을 넘으면 시냅스(synapse)를 통해 출력 신호를 보낸다. 이 출력은 또 다른 뉴런으로 연결되어 같은 과정을 반복..

Support Vector Machine(SVM)

서포트 벡터 머신이란, 결정 경계(Decision Boundary), 즉 분류를 위한 기준 선을 정의하는 모델이다. 그래서 분류되지 않은 새로운 점이 나타나면 경계의 어느 쪽에 속하는지 확인해서 분류 과제를 수행할 수 있게 된다. 만약 데이터에 2개 속성(feature)만 있다면 결정 경계는 이렇게 간단한 선 형태가 된다. 속성이 3개로 늘어난다면 3차원으로 그려야 한다. 이때의 결정 경계는 선이 아닌 평면이 된다. 우리가 시각적으로 인지할 수 있는 범위는 3차원까지며, 차원, 즉 속성의 개수가 늘어날수록 복잡해진다. 이에 따라 결정 경계도 단순한 평면이 아닌 고차원이 되며 이를 “초평면(hyperplane)”이라고 한다. 결정 경계는 무수히 많이 존재할 수 있다. 어떤 경계가 좋은 경계일까? 직관적으로..

로지스틱 회귀

⛄ 로지스틱 회귀란? 로지스틱 회귀(Logistic Regression)는 회귀를 사용하여 데이터가 어떤 범주에 속할 확률을 0에서 1 사이의 값으로 예측하고 그 확률에 따라 가능성이 더 높은 범주에 속하는 것으로 분류해주는 지도 학습 알고리즘이다. 로지스틱 회귀에서 데이터가 특정 범주에 속할 확률을 예측하기 위해서는 다음과 같은 단계를 거친다. 모든 속성(feature)들의 계수(coefficient)와 절편(intercept)을 0으로 초기화한다. 각 속성들의 값(value)에 계수(coefficient)를 곱해서 log-odds를 구한다. log-odds를 sigmoid 함수에 넣어서 [0,1] 범위의 확률을 구한다. 이를 이해하기 위해, log-odds의 개념을 알아보자. ⛄ Log-Odds 선형..

Simple Linear Regression : Gradient Descent Method

⛄ Gradient Descent Method(경사하강법) 비용함수를 최소화하는 w와 b를 구하는 최적화 알고리즘을 옵티마이저(Optimizer)라고 하는데, 경사하강법(Gradient Descent)은 가장 기본적인 옵티마이저이다. 이때, 경사하강법의 기본 개념은 함수의 기울기를 구하고 경사의 절댓값이 낮은 쪽으로 계속 이동시켜 극값에 이를 때까지 반복시키는 것이다. (예를 들어, 위 사진의 경우 노란색 점에 도달하고자 함) 그런데, 우리는 보통 함수의 최솟값을 찾고자 할 때 미분계수를 구함으로써 찾는다. 이 방법을 사용하지 않고 경사하강법을 사용하는 이유는 무엇일까? 1. 실제 분석에서, 특히 딥러닝 알고리즘을 활용하는 경우에 보게 되는 함수들은 형태가 굉장히 복잡해서 미분계수와 그 근을 계산하기 어..

validation set & K-fold cross validation

⛄ Validation set validation set : 학습이 이미 완료된 모델을 검증하기 위한 set (중간 점검) test set : 학습과 검증이 완료된 모델의 최종 성능 평가용 〰 주어진 데이터를 단순히 train set, test set으로 분리했을 때의 문제점 〰 : test set을 검증용으로 사용하면 훈련에 사용되었다고 보기 때문에 모델 수정 후 동일한 test set으로 검증하면 정확한 성능평가가 어려움 따라서, validation set이 필요하다! 보통 Train : Test 데이터를 8 : 2로 나누는데 여기서 Train 데이터 중 일부를 validation set으로 이용한다. 즉, 일반적으로 Train : Validation : Test 을 6 : 2 : 2로 이용한다. 〰..