728x90
Machine Learning
25

Gradient Descent(경사하강법)

경사하강법으로는 크게 Gradient Descent와 Stochastic Gradient Descent로 나눌 수 있을 것 같다. 지금은 Gradient Descent에 대한 설명을 시작해보려고 한다. 경사하강법이란? 경사하강법은 반복적인 실행을 통해 에러를 최소화 시킬 수 있는 값을 구하는 방법이다. 여기서 에러라는 것은 실제값과의 다른 정도라고 이해하자. 자, 조금 더 파보자. 아래와 같은 그래프가 있다고 하자. 이 그래프에서 에러가 최소인 지점이 어디일까? 바로 아래 그림처럼 빨간 점으로 표시된 지점일 것이다. 이처럼 육안으로는 최소인 지점을 한 눈에 알아볼 수 있었다. 하지만 컴퓨터에게는 눈이 없기때문에 한 눈에 알아볼 수가 없다. 일단 저 빨간 점을 지나는 접선을 그려보자. 그러면 위 그림처럼 ..

[실습]주성분 분석(Principal Component Analysis, PCA)

1. 데이터 생성 import pandas as pd df = pd.DataFrame(columns=['calory', 'breakfast', 'lunch', 'dinner', 'exercise', 'body_shape']) df.loc[0] = [1200, 1, 0, 0, 2, 'Skinny'] df.loc[1] = [2800, 1, 1, 1, 1, 'Normal'] df.loc[2] = [3500, 2, 2, 1, 0, 'Fat'] df.loc[3] = [1400, 0, 1, 0, 3, 'Skinny'] df.loc[4] = [5000, 2, 2, 2, 0, 'Fat'] df.loc[5] = [1300, 0, 0, 1, 2, 'Skinny'] df.loc[6] = [3000, 1, 0, 1, 1, '..

주성분 분석(Principal Component Analysis, PCA)

주성분 분석(Principal Component Analysis)이란 고차원의 데이터를 저차원의 데이터로 차원 축소하는 알고리즘이다. 주로 고차원의 데이터를 3차원 이하의 데이터로 바꿔서 시각화하는데 많이 사용되며, 유용한 정보만 살려서 적은 메모리에 저장하거나 데이터의 노이즈를 줄이고 싶을 때도 사용하는 알고리즘이다. 이해하기 쉽게 시각화 가능한 2차원 데이터를 1차원 데이터로 축소하는 과정을 알아보겠다. 위와 같은 2차원 공간의 데이터들을 직선상의 데이터로 변환하면 다음과 같다. 보다시피 x1과 x2 선상에 옮기면 중첩되는 데이터가 많이 생긴다. 하지만 1차원 직선 상에 옮겨진 데이터들은 하나도 중첩되지 않고 육안으로 7개의 점을 확인할 수 있다.이를 정보이론 측면에서 해석해본다면 고차원 데이터를 저..

[실습] 단일, 다중 입력 로지스틱 회귀와 소프트맥스(다중 분류 로지스틱 회귀)

단일 입력 로지스틱 회귀 1. Import from keras.models import Sequential from keras.layers import Dense, Activation import numpy as np 2. 모델 생성 #sigmoid(wx+b)의 형태를 갖는 간단한 로지스틱 회귀 구현 model = Sequential() model.add(Dense(input_dim=1, units=1)) # 입력 1개, 출력 1개 model.add(Activation('sigmoid')) # 출력값을 시그모이드에 연결 model.compile(loss='binary_crossentropy', optimizer='sgd', metrics=['binary_accuracy']) 3. 데이터 생성 X = np..

로지스틱 회귀(Logistic Regression)

로지스틱 회귀에 대해 설명하기 전 일단 시그모이드 함수에 대해서 알아보자. 시그모이드 함수는 입력값이 크면 클수록 1이라는 값으로 수렴하고, 입력값이 작을수록 0이라는 값으로 수렴하는 함수이다. 또한 0부터 1까지의 값을 가지는 특성 때문에 시그모이드의 출력값은 확률로도 사용될 수 있고, 출력값이 0.5 이상일 경우에는 참, 0.5 이하일 경우에는 거짓이라고 분류하는 분류 모델로도 사용될 수 있다. 선형 회귀의 입력값(x), 출력값 및 로지스틱 회귀의 출력값에 따른 이진 분류 결과를 표로 정리하면 다음과 같다. [표] 선형 회귀 입력값(x) 선형 회귀 출력값(wx) 로지스틱 회귀 입력값(z) 로지스틱 회귀 출력값(y) 이진 분류 0.5 이상: O, 0.5 이하: X -2 -2 0.12 X -1.5 -1...

[실습] Linear Regression(선형회귀)

필요한 라이브러리를 임포트한다. Import from keras import optimizers from keras.models import Sequential from keras.layers import Dense import numpy as np import pandas as pd import matplotlib.pyplot as plt 데이터 생성 임의의 데이터를 생성한다. X = np.linspace(0, 10, 10) Y = X + np.random.randn(*X.shape) 데이터 조회 어떤 데이터가 만들어졌는지 확인한다. for x, y in zip(X, Y): print((round(x, 1), round(y, 1))) [출력] (0.0, -0.3) (1.1, 1.5) (2.2, 2.9)..

선형회귀(Linear Regression)

선형회귀 모델이란 회귀 계수를 선형적으로 결합할 수 있는 모델을 의미한다. 여기서 회귀 계수란 무엇이고 선형적으로 결합한다는 것은 무슨 말인지 알아보겠다. 회귀 계수 간단하게 설명하면 1차 함수의 기본 형식인 y = ax+b에서 a 와 b를 회귀 계수라고 한다. 선형 결합 선형 결합(linear combination)은 선형 대수의 벡터의 합에서 나온 개념이다. 즉, 서로 다른 a와 b 벡터를 더해 새로운 벡터를 얻는 과정이라고 말할 수 있다. 또한 가중치를 곱한 후 더하는 것도 선형 결합이다. 예를 들어 2a + b, a + 2b와 같은 것도 a 벡터와 b 벡터의 합을 말한다. 다시 선형회귀에 대해 말하면 선형회귀는 회귀 계수들이 선형 결합된 함수를 뜻하여 이 함수를 통해 데이터의 값을 예측하는 것을 ..

[실습] KMeans (K 평균 군집화)

KMeans를 사용한 실습은 간단한 키, 몸무게에 대한 데이터를 생성하여 진행해보았다. Import import pandas as pd import numpy as np from sklearn.cluster import KMeans import matplotlib.pyplot as plt import seaborn as sns 데이터 생성 df = pd.DataFrame(columns=['height', 'weight']) df.loc[0] = [185, 60] df.loc[1] = [180, 60] df.loc[2] = [185, 70] df.loc[3] = [165, 63] df.loc[4] = [155, 68] df.loc[5] = [170, 75] df.loc[6] = [175, 80] df [출..

K 평균 알고리즘(kmean++)

순서 데이터 준비 몇 개의 클래스로 분류할 것인지 설정 클러스터의 최초 중심 설정 데이터를 가장 가까운 클러스터로 지정 클러스터 중심을 클러스터에 속한 데이터들의 가운데 위치로 변경 클러스터 중심이 바뀌지 않을 때까지 4번부터 5번 과정을 반복적으로 수행 1. 데이터 준비 데이터 간의 거리를 사용해 가까운 거리에 있는 데이터끼지 하나의 클래스로 묶는 알고리즘이다. 물론 데이터는 수치화된 데이터여야 한다. 2. 몇 개의 클래스로 분류할 것인가 k는 몇 개의 클래스로 분류할 것인지를 나타내는 변수이다. 3. 클러스터의 최초 중심 설정 k 평균의 표준 알고리즘은 클러스터의 최초 중심을 무작위로 설정한다. 그리고 사이킷런의 k 평균 라이브러리는 기본적으로 kmean++라는 알고리즘을 써서 클러스터의 최초 중심을..

[실습] 랜덤 포레스트(Random Forest)와 앙상블(Ensemble)

랜덤 포레스트 모델을 사용하여 손글씨 분류를 실습해보았다. 랜덤 포레스트 손글씨 분류 Import from sklearn import datasets, tree from sklearn.ensemble import RandomForestClassifier from sklearn.model_selection import cross_val_score, train_test_split from sklearn.metrics import accuracy_score import matplotlib.pyplot as plt import pandas as pd import numpy as np 데이터 불러오기 mnist = datasets.load_digits() features, labels = mnist.data, m..

728x90