본문 바로가기

파이썬

[머신러닝] 의사결정나무 : 엔트로피, 지니 계수란? 1. 의사결정나무란? 결정트리(Decision Tree) 라고도 하는 의사결정 나무는 랜덤포레스트 앙상블 알고리즘의 베이스가 되는 알고리즘으로, Tree구조를 가진 알고리즘이라고 할 수 있습니다. 결정트리는 데이터를 분석하여 데이터 사이에 패턴을 예측 가능한 규칙들의 조합으로 나타내도록 합니다. 이처럼 결정터리는 이러한 학습 결과에 대하여 시각화를 통한 직관적인 이해가 가능하다는 것이 큰 장점입니다. 또한 랜덤포레스트 알고리즘도 결정 트리의 알고리즘을 기반으로 하는데요, 사용이 쉽고 성능이 매우 우수하다는 점에서 결정트리가 많이 사용된답니다. 2. 엔트로피란? 의사결정나무에서 엔트로피(Entropy)는 주요 매개변수 중 하나인데요, 무질서한 정도를 수치화 한 값을 말합니다. 즉, 불손도를 측정하는 지표로.. 더보기
[머신러닝] CNN 층에 dropout(드롭아웃) 추가하기 (텐서플로) Dropout(드롭아웃)은 랜덤으로 선택한 node만 학습시키고, 일부 node는 버리는 것을 말하는데요, 한 번의 학습 후 다음 학습 때 이 과정을 반복합니다. Dropout을 사용하면 은닉층이 많은 neural network에서 오버피팅 문제를 방지할 수 있다는 장점을 가지는데요, 텐서플로를 이용하여 만든 CNN 층에 드롭아웃 층을 추가하는 코드에 대해서 살펴보겠습니다. model = models.Sequential() model.add(layers.Conv2D(32, (3, 3), activation='relu', input_shape=(28, 28, 1))) model.add(layers.MaxPooling2D((2, 2))) model.add(layers.Conv2D(64, (3, 3), act.. 더보기
[머신러닝] CNN(합성곱 신경망) 모델 만들기 (텐서플로 / 코드) 이번 글에서 텐서플로(tensorflow)를 이용하여 합성곱 층(CNN)을 만들어보도록 하겠습니다. 모델에 사용할 데이터는 텐서플로에서 제공하는 MNIST 데이터셋을 사용하도록 하겠습니다. 1. 텐서플로 import & 데이터셋 준비 먼저, tensorflow 라이브러리를 import 해준 뒤, 학습을 위한 데이터를 다운로드합니다. import tensorflow as tf from tensorflow.keras import datasets, layers, models (train_images, train_labels), (test_images, test_labels) = datasets.mnist.load_data() 이미지 데이터는 아래 코드처럼 28 x 28 형태의 shape으로 바꾸고, 픽셀 값을.. 더보기
[머신러닝] 은닉층(Hidden Layer)에서 활성화 함수를 선형 함수(Linear function)로 사용하지 않는 이유 - 은닉층에 활성화 함수를 선형 함수로 사용해도 될까? 학습시킬 neural network의 은닉층(Hidden layer)에서 활성화 함수(activation function)를 선형 함수로 사용해도 되는지, 사용하면 안 되는지 궁금하실 수 있는데요, 바로 말씀드리자면, 선형 함수(linear function)를 사용하면 은닉층의 의미가 사라지게 됩니다. 왜냐하면, 은닉층에서 선형 함수를 활성화 함수로 사용해서 학습시키는 구조를 은닉층이 없는 Input layer, Ouput layer로만 똑같이 구현시킬 수 있기 때문입니다. 즉, 은닉층 없이도 동일한 학습을 시킬 수 있다는 것입니다. 따라서 이러한 경우 오히려 은닉층을 없애고 모델을 간단하게 만들어 학습시키는게 더 효율적일 수 있습니다. 따라서 은닉.. 더보기
[머신러닝] [single / multi / shallow / deep] neural network 명칭 정리 머신러닝에서 여러 neural network를 공부하다 보면, neural network에 대해서 이름을 single layer neural network, multi layer neural network, 또는 shallow neural network, deep neural network라고 불리어지는 것을 확인할 수 있는데요, 이러한 명칭에 대해서 처음에 정리가 안되어 있으면 헷갈리실 수 있습니다. 따라서 각 명칭은 어떠한 neural network를 가리키는지 빠르게 알아보도록 하겠습니다. 1. single layer neural network vs multi layer neural network 먼저, single layer neural network는 말 그대로 neural network에서 층.. 더보기
[머신러닝] 지도학습과 비지도학습의 차이 및 알고리즘 종류 머신러닝 알고리즘에는 크게 지도학습과 비지도학습, 그리고 강화학습으로 구분되는데요, 지도학습과 비지도학습에 대해서 간단하게 살펴보도록 하겠습니다. 1. 지도학습(Supervised Learning) 먼저, 지도학습은 학습 데이터에 대한 올바른 input data와 output dataset으로 학습으로 이루어지는데요, 에러를 감소시키도록 학습이 이루어집니다. 즉, 지도학습은 weight(가중치) 값을 바꿔가며 학습을 통해 나온 output data와 올바른 output data와의 차이를 줄이는 방향을 학습됩니다. 이러한 지도학습에는 다양한 알고리즘이 있는데요, Regression, Decision Trees, Random Forests, Classification 등이 있습니다. 여기서 Regressi.. 더보기
[머신러닝] 데이터프레임 : Null 값이 있는 행 확인하고, 삭제하는 방법 머신러닝 학습을 하기 전 데이터 전처리를 할 때, 데이터프레임 상에서 Null 값이 있는 행이 있는지 확인하고, 또 존재한다면 삭제하고 싶을 때, 코드를 어떻게 작성해야 하는지 아래 코드를 보면서 살펴보도록 하겠습니다. 1. Null 값 확인하기 먼저, 다음과 같이 Null 값이 있는 데이터프레임이 있다고 가정해보겠습니다. # itempricecount 0water1000.01.0 1milk2000.0NaN 2coffee3000.02.0 3adeNaN1.0 4latte5000.03.0 5tea6000.02.0 위 데이터프레임을 보면 각각 1행과 3행에 NaN 으로 Null 값이 있는 것을 확인할 수 있는데요, 이 데이터프레임의 데이터는 매우 작아서 어디에 Null 값이 있는지 바로 알 수 있지만, 데이터.. 더보기
[자연어처리] Okt : 형태소 단위로 나누는 방법 (파이썬) 자연어처리를 할 때, 데이터 전처리로 문장을 형태소 단위로 나누는 과정을 거쳐야 하는데요, 파이썬에서 형태소 단위로 나누는 라이브러리는 다양합니다. 그중에서 Okt 라이브러리를 이용하여 형태소 단위로 나누는 방법에 대해서 살펴보도록 하겠습니다. - 형태소 단위로 나누기 먼저, 필요한 라이브러리를 설치해줍니다. from konlpy.tag import Okt import re 그리고, 형태소 단위로 나눌 문장은 다음과 같다고 가정하겠습니다. text1 = "Tue) 오늘도 나는 커피를 마셔요!" Okt 객체를 이용해서 이 문장을 형태소 단위로 나누기 전, 한글과 공백을 제외한 문자를 모두 제거해주어야 하는데요, 정규표현식을 이용해서 코드를 다음과 같이 입력해주면 됩니다. text2 = re.sub("[^가.. 더보기
[자연어처리] 파이썬으로 원 핫 인코딩(One-Hot Encoding) 구현하기 (코드) 1. 원-핫 인코딩이란? 원-핫 인코딩(One-Hot Encoding)이란 단어 집합의 크기를 벡터 차원으로 만든 뒤, 표현하고 싶은 단어의 인덱스에 1의 값을 부여하고 다른 인덱스에는 0을 부여하는 방식을 말합니다. 한편, 케라스에서는 원-핫 인코딩을 하기 위한 함수 'to_categorical()'를 제공하는데요, 코드를 통해 원-핫 인코딩을 어떻게 하는지 살펴보도록 하겠습니다. 2. 코드 구현하기 먼저, 다음과 같은 문장이 있다고 가정해보겠습니다. text = "나는 얼죽아 추워도 아이스아메리카노 나는 아이스아메리카노 좋아 아이스아메리카노 마시자" 그리고나서 이 문장에 대해 원-핫 인코딩을 하기 위한 코드를 작성해보겠습니다. (1) 라이브러리 설치 먼저, 원 핫 인코딩을 하기 위한 라이브러리를 비롯.. 더보기
[자연어처리] 패딩(Padding) : 다른 숫자로 패딩하는 방법 (파이썬) 이전 글들에서 pad_sequences() 함수를 사용하여 패딩을 구현하고, 길이 지정 등 다양하게 패딩하는 방법에 대해서 계속 살펴보았는데요, 이번 글에서는 0이 아닌 다른 값으로 패딩하는 방법에 대해서 살펴보겠습니다. 먼저, pad_sequences() 함수를 이용하여 길이 10의 제로패딩을 하는 코드를 작성해보겠습니다. import numpy as np from tensorflow.keras.preprocessing.text import Tokenizer sentences = [['place', 'tree'], ['tree', 'nice', 'green'], ['nice', 'sky', 'and', 'tree'], ['bird', 'tree']] #정수 인코딩 tokenizer= Tokenizer(.. 더보기