zenn.skin 무료버전 배포중!
자세히보기

machinelearning 11

카테고리 없음
[ML] 퍼셉트론과 신경망 차이 (difference between perceptron and neural network)

1. 신경망(Neural Network) 퍼셉트론을 사용하면 복잡한 함수도 표현할 수 있습니다. 하지만 앞서 구현한 Gate들처럼 가중치를 직접 설정해주어야 한다는 단점이 있습니다. 하지만 신경망은 데이터들로부터 가중치를 자동으로 학습하여 직접 가중치를 설정하지 않아도 적절한 매개변수값을 구할 수 있습니다. 신경망은 기본적으로 입력층(Input layer), 출력층(Output layer) 그리고 은닉층(Hidden layer)으로 구성됩니다. 입력층과 출력층은 외부에서 볼 수 있지만 은닉층은 외부에서 볼 수 없습니다. 위 그림은 가중치를 갖는 노드들이 2개이기 때문에 "2층 신경망"이라고 하는데 표기에 따라 3층 신경망이라고 하는 경우도 있습니다. 2. 활성화 함수(Activation function)..

DataScience
[ML] 다층 퍼셉트론(multi-layer perceptron)

퍼셉트론은 하나의 선형 결정경계를 갖습니다. 그렇기 때문에 XOR과 같이 비선형 결정 경계를 갖는 문제는 풀 수 없는 한계점이 있었습니다. 하지만 두 개 이상의 퍼셉트론을 사용하면 이러한 비선형 결정 경계를 갖는 문제도 풀 수 있게 됩니다. 위와 같이 두 개의 선형 결정 경계를 사용하면 XOR문제를 깔끔하게 해결할 수 있습니다. 실제로 XOR문제는 AND, NAND, OR Gate를 사용해서 풀 수 있습니다. A B Q 0 0 0 1 0 1 0 1 1 1 1 0 앞서 구현한 AND, NAND, OR Gate 함수를 호출해도 동일한 결과를 구할 수 있습니다. def XOR(x1, x2): s1 = NAND(x1, x2) s2 = OR(x1, x2) return AND(s1, s2) 이렇게 XOR은 두 개 ..

DataScience
[ML] 퍼셉트론 (Perceptron)

1. 퍼셉트론(Perceptron) 퍼셉트론은 신경망의 기원이 되는 알고리즘입니다. 퍼셉트론의 구조를 배워야 신경망과 딥러닝의 아이디어를 이해할 수 있습니다. 퍼셉트론은 다수의 신호를 입력 받아 하나의 신호를 출력하는 역할을 합니다. 이 때 퍼셉트론은 0 또는 1의 출력을 가질 수 있습니다. 위 그림에서 x1, x2, y는 뉴런(노드)라고 부르며, x1과 x2는 입력 신호, y는 출력 신호가 됩니다. 입력 신호가 다음 뉴런에 보내질 때는 일정한 가중치가 곱해집니다. 출력 신호는 입력 신호에 들어온 신호의 합이 일정한 값(역치, 임계값)을 넘는 경우에만 1을 출력합니다. 2. 퍼셉트론을 이용한 논리 회로의 표현 이 퍼셉트론을 사용하면 AND, OR, NAND와 같은 논리 게이트를 표현할 수 있습니다. 출력..

DataScience
[ML] 분류모형의 평가지표(confusion matrix, accuracy, precision, sensitivity(recall), specificity, F1-score)

지난번에 회귀모형을 평가하는 지표에 대해 알아보았습니다. [ML] 회귀모형의 평가지표, MAE, MSE, RMSE, RSE, R^2 회귀모델을 평가하는 평가지표는 여러 가지가 있습니다. 1. MAE(Mean Absolute Error, 평균 절대 오차) 데이터의 단위와 동일하기 때문에 해석이 직관적이라는 장점이 있습니다. MSE에 비해 이상치의 영 koosco.tistory.com 분류모형을 평가할 때는 회귀모형에서의 MAE나 RMSE, R^2를 사용할 수 없기 때문에 혼동행렬(confusion matrix)을 이용한 별도의 지표를 사용해 모델을 평가하게 됩니다. 1. 혼동행렬(Confusion Matrix) confusion matrix는 모델의 성능 측정을 위해, 실제값과 측정값을 비교하기 위한 표를..

DataScience
[ML] MAB(Multi-Armed Bandit Algorithm, 멀티 암드 밴딧)

MAB는 다중 처리 실험에 대한 모델링으로 볼 수 있습니다. 카지노에 여러 개의 슬롯머신이 있습니다. 슬롯머신들은 각각이 다른 수익율을 낸다고 할 때 어떤 슬롯머신을 선택하는 것이 좋을지에 대한 답을 알려줍니다. 여러 슬롯머신들의 손잡이는 실험에서의 처리를 나타내고, 슬롯머신을 통해 얻은 수익을 처리에 대한 효과로 볼 수 있습니다. MAB 알고리즘의 핵심 아이디어는 탐색과 활용(Exploration & Exploitation)입니다. 슬롯머신들을 돌려보고(탐색) 수익이 높다고 생각하는 슬롯머신을 돌려봅니다.(활용) 1. Greedy Algorithm 가장 먼저 생각해볼 수 있는 방법은 일정 횟수만큼 슬롯머신을 돌려보고, 돌려본 슬롯머신들 중 가장 수익률이 높은 슬롯머신에 몰빵을 하는 방법입니다. A, B..

DataScience
[ML] 교차 검증(cross validate)

train_test_split을 사용하면 데이터셋을 train 데이터와 test 데이터로 분리할 수 있습니다. 하지만 train 데이터를 이용해 모델을 학습하고 test 데이터로 모델의 적합성 여부를 계속해서 판단하다 보면, 모델은 test데이터에 맞춰지게 됩니다. 그렇기 때문에 test 데이터는 마지막에 한 번만 사용해야 합니다. train 데이터를 다시 train 데이터와 검증용 데이터로 나누고, train 데이터로 학습한 후 검증용 데이터로 모델을 평가합니다. 교차 검증 train 데이터의 일부를 사용해 검증 세트를 만들었기 때문에 train 데이터가 많이 줄어들었습니다. 하지만 train 데이터를 늘리려고 검증 세트를 줄이게 되면 검증 점수가 불안정해집니다. 교차검증을 사용하면 안정적인 검증 점수..

DataScience
[ML] train_test_split을 이용한 데이터 분할

모델은 데이터를 이용해 학습을 합니다. 학습용 데이터만 가지고 모델이 학습한다면, 학습용 데이터에만 너무 과대적합(overfitting)되어 새로운 데이터가 들어왔을 때 정확한 예측이 어려울 수 있습니다. 그렇기 때문에 데이터셋을 먼저 학습용 데이터와 테스트용 데이터로 나누는 작업이 필요합니다. 학습용 데이터로 모델을 학습한 후에, 테스트용 데이터를 사용했을 때의 점수와 비교하여 모델이 잘 학습되었는지 평가합니다. sklearn.model_selection의 train_test_split은 데이터가 입력되면 학습용 데이터와 테스트용 데이터로 나누어집니다. import seaborn as sns from sklearn.model_selection import train_test_split iris = sn..

DataScience
[ML] K-NeighborsRegressor (K-최근접 이웃 회귀)

1. K-NeighborsRegressor(K-최근접 이웃 회귀 알고리즘) K-최근접 이웃 모델은 분류 모델뿐만 아니라 회귀 모델도 만들 수 있습니다. 분류 모델에서는 범주형 데이터를 예측한다면, 회귀 모델에서는 연속형 데이터를 예측합니다. 분류 모델과 마찬가지로 train 데이터가 입력되면 데이터를 저장하고 있다가 새로운 값들이 들어오면 근접한 이웃들의 평균값을 계산해 예측값으로 반환합니다. 오늘은 농어의 길이와 무게 데이터를 이용해 K-최근접 이웃 회귀 모델을 공부해보겠습니다. 농어의 길이와 무게 데이터 농어의 길이와 무게 데이터. GitHub Gist: instantly share code, notes, and snippets. gist.github.com import numpy as np perc..

DataScience
[ML] SimpleImputer (누락값 처리)

데이터를 정제하는 과정에서 반드시 필요한 과정 중 하나는 누락값(Nan)의 처리입니다. 누락값을 처리하는 방법에는 1) 누락값을 갖고 있는 행의 삭제, 2) 누락값을 갖는 열(특성)의 삭제, 3) 대체값으로 대체하는 방법이 있습니다. 1. 일반적인 누락값 처리 방법 import pandas as pd df = pd.DataFrame(data) # 누락값을 갖는 행(레이블) 삭제 df.dropna(subset=['col1']) # 누락값을 갖는 열(특성) 삭제 df.drop('col1', axis=1) # 누락값을 대체값으로 채움 mean = df['col1'].mean() df['col1'].fillna(mean) 데이터를 모으는 과정에서 누락값의 처리는 꼭 필요한 작업입니다. 누락값을 너무 많이 제거해..