본문 바로가기

Study/딥러닝 텐서플로 교과서 - 길벗

[Book]3. 머신러닝 핵심 알고리즘

개요
책을 보고 공부한 내용을 정리합니다.


딥러닝 텐서플로 교과서

  • 저자 서지영님 
  • 길벗 출판사

코드 출처

https://github.com/gilbutITbook/080263

 

GitHub - gilbutITbook/080263

Contribute to gilbutITbook/080263 development by creating an account on GitHub.

github.com


[Book]3. 머신러닝 핵심 알고리즘

3.1 지도 학습

지도 학습 : 정답을 컴퓨터에 미리 알려주고 데이터를 학습시키는 방법

  • 지도 학습 종류 : 분류, 회귀
  • 분류 : 주어진 데이터를 정해진 범주에 따라 분류
  • 회귀 : 데이터들의 특성을 기준으로 연속된 값을 그래프로 표현하여 패턴이나 트렌드 예측

3.1.1 K-최근접 이웃

  • 분류
  • 직관적, 사용 쉬움
  • 새로운 입력을 받았을 때, 기존 클러스터에서 모든 데이터와 인스턴스 기반 거리를 측정한 후 가장 많은 속성을 가진 클러스터에 할당하는 분류 알고리즘

K-최근접 이웃

# 최적의 K값 찾아보기 
# k값을 1~ 10 까지 돌려보기

k = 10
acc_array =  np.zeros(k)

for k in np.arange(1, k+1, 1): # 그냥 1부터 10이랑 같은거
  classifier = KNeighborsClassifier(n_neighbors = k).fit(X_train, y_train)
  y_pred = classifier.predict(X_test)
  acc = metrics.accuracy_score(y_test, y_pred)
  acc_array[k-1] = acc

max_acc = np.amax(acc_array)
acc_list = list(acc_array)
k = acc_list.index(max_acc)
print("정확도", max_acc, "으로 최적의 k는", k+1)

 

3.1.2 서포트 벡터 머신

  • 분류
  • 커널만 적절히 선택한다면 정확도가 상당히 좋음
  • 텍스트 분류할 때도 많이 사용
  • 분류를 위한 기준선을 정의하는 모델
  • 분류되지 않은 새로운 데이터가 나타나면 결정 경계(기준선)를 기준으로 경계의 어느 쪽에 속하는 분류
    서포트 벡터 머신
  • 결정 경계는 데이터가 분류된 클래스에서 최대한 멀리 떨어져 있을 때 성능이 좋음
  • 마진은 결정 경계와 서포트 벡터 사이의 거리
  • 서포트 벡터? 아무튼 워라벨님의 SVM 정리
svm = SVC(kernel = 'linear', C= 1.0, gamma = 0.5)
svm.fit(X_train, y_train)

predictions = svm.predict(X_test)
score = metrics.accuracy_score(y_test, predictions)

print("정확도 :{0:f}".format(score))
  • SVM은 선형 분류와 비선형 분류
  • 비선형 문제를 해결하는 기본적인 방법은 저차원 데이터를 고차원으로 보내는 것
  • 수학적 계산이 많이 필요하기 때문에 성능에 문제를 줌 -> 해결하기 위해 '커널 트릭' 도입
커널 트릭
선형 모델에 : 선형 커널
비선형 커널 :  '가우시안 RBF 커널' , '다항실 커널'
수학적 기교를 이용하는 것으로, 벡터 내저을 계산한 후, 고차원으로 보내서 연산량 줄임

3.1.3 결정 트리

  • 분류
  • 이상치가 많은 값으로 구성된 데이터셋을 다룰 때 좋음
  • 데이터를 1차로 분류 후 -> 영역의 순도 증가 -> 불순도, 불확실성 가소하면서 학습

엔트로피

  • 확률 변수의 불확실성을 수치로 나타낸 것
  • 높으면 불확실성이 높은 것

지니 계수

  • 불순도 측정 지표
  • 지니계수는 원소 n개 중에서 임의로 두 개 추출했을 때, 두 개가 서로 다른 그룹에 속해 있을 확률
  • 높을수록 데이터가 분산되어 있음을 의미
# 모델 새성
model = tree.DecisionTreeClassifier()

model.fit(X_train, y_train)

# 예측
y_predict = model.predict(X_test)

# 정확도
accuracy_score(y_test, y_predict)

3.1.4 로지스틱 회귀와 선형 회귀

  • 회귀란 변수가 두 개 주어졌을 때 한 변수에서 다른 변수를 예측 Or 두 변수의 관계를 규명하는 데 사용
  • 독립 변수 : 영향을 미칠 것으로 예상되는 변수
  • 종속 변수 : 영향을 받을 것으로 예상되는 변수

로지스틱 회귀

  • 분류
  • 분석 대상이 두 집단 이상으로 나누어진 경우 사용
  • 최대 우도 법 사용
# 로지스틱 모델 객체 생성
logisticRegr = LogisticRegression()

logisticRegr.fit(X_train, y_train)

선형 회귀

  • 분류
  • 독립 변수와 종속 변수가 선형 관계를 가질 때 사용하면 유용
  • 단순 선형 회귀 : 독립 변수 하나
  • 다중 선형 회귀 : 독립 변수 두 개 이상

3.2 비지도 학습

  • 정답이 없는 상태에서 훈련시키는 방식
  • 군집과 차원 축소가 있음
  • 군집은 각 데이터의 유사성(거리)을 측정 후 유사성이 높은(거리가 짧은) 데이터끼리 분류 
  • 차원 축소는 차원을 나타내는 특성을 줄여서 데이터를 줄이는 것

K-평균 군집화

학습 과정

  1. 중심점 선택 : 랜덤
  2. 클러스터 할당 : K개의 중심점과 각 개별 데이터 간의 거리 측정 후, 가장 가까운 중심점 기준으로 데이터 할당, 클러스터는 덩어리 자체
  3. 새로운 중심점 선택
  4. 범위 확인 : 중심점의 더 이상 변화 없으면 진행 멈춤
K-Means는 아래와 같은 상황에 쓰지 말 것
데이터가 비선형
군집 크기가 다를 때
군집마다 밀집도와 거리가 다를 떄
Sum_of_squared_distances = []
K = range(1, 15)

for k in K:
  km = KMeans(n_clusters = k)
  km = km.fit(data_transformed)
  Sum_of_squared_distances.append(km.inertia_)

plt.plot(K,Sum_of_squared_distances, 'bx-')
plt.xlabel('k')
plt.ylabel('Sum_of_squared_distances')
plt.title('optimal k')
plt.show()

밀도 기반 군집 분석

  • 사전에 클러스터의 숫자를 모를 때 사용하면 유용 
  • 이상치가 많이 포홤되었을때 사용하면 좋음
  • 노이즈에 영향을 받지 않음
노이즈? 이상치?
노이즈 : 주어진 데이터셋과 무관하게 무작위성 데이터로 전처리 과정에서 제거해야 할 부분
이상치 : 관측된 데이터 범위에서 많이 벗어난 아주 작은 값이나 아주 큰 값

학습 과정

1. 엡실론 내 점 개수 확인 및 중심점 결정
   - 점 P1에서 거리 엡실론 내에 점이 m(minPts) 개 있으면 하나의 군집으로 판단
   - minPts =3 일 때 아래 그림에서 P1은 중심점

2. 군집 확장

  - 1단계에서 군집 만들고 , 두 번째 군집을 생성

  - 밀도가 높은 지역에서 중심점을 만족하는 데이터가 있다면 그 지역을 포함하여 새로운 군집 생성

  - 그러고 하나의 군집으로 확대

 

3. 1~2단계 반복

4. 노이즈 정의 : 군집에 포함되지 않은 데이터를 노이즈로 정의

 

주성분 분석(PCA)

  • 데이터 간소화
  • 데이터 특성이 너무 많을 경우에는 데이터를 하나의 플롯에 시각화해서 살펴보는 것이 어려움
  • 이 때 특성 p개를 두세 개 정도로 압축해서 살펴보고 싶을 떄 유용
  • 고차원 데이터를 저 차원 데이터로 축소

절차

  1. 데이터들의 분포 특성을 잘 설명하는 벡터 두 개 선택
  2. 벡터 두 개를 위한 적정한 가중치를 찾을 때까지 학습

'Study > 딥러닝 텐서플로 교과서 - 길벗' 카테고리의 다른 글

[Book]6. 합성곱 신경망 2  (0) 2022.01.04
[Book]5. 합성곱 신경망 1  (0) 2022.01.02
[Book]4. 딥러닝 시작  (0) 2021.12.29
[Book]2. 텐서플로 기초  (0) 2021.12.25
[Book]1. 머신러닝과 딥러닝  (0) 2021.12.24