반응형

안녕하세요, 매주한책입니다. 

 

최근에 머신러닝과 딥러닝을 이용해 업무에 적용하는 일을 받아서 책을 읽었습니다. 

혼자 공부하는 머신러닝+딥러닝

학부생 때 머신러닝 분야를 들은 적이 없어서 정말 생소한 분야였는데, 이 책은 입문서로 좋다고 생각했습니다. (추천도 받았습니다) 왜냐하면 예제가 다양하고, 스토리라인이 이어져서 예제를 적용하기 쉽고, 코드가 왜 쓰이는지 쉽게 설명이 쓰여있어서 이해하기 쉬웠기 때문입니다. 

 

머신러닝, 딥러닝에는 수학적인 부분이 많다고 들었는데, 코드 위주의 설명이어서 더욱 좋았습니다. 

 

책 요약 

머신러닝을 보려면 1~6장을 읽으면 됩니다. 

딥러닝을 보려면 7~9장을 읽으면 됩니다. 

목차에서 심화인 부분과 기초인 부분을 분류해주어 좋았습니다. 

그리고 챕터마다 핵심 포인트와 간단한 문제가 있어서 이해도를 점검할 수 있어서 좋았습니다. 

1. 나의 첫 머신러닝 

1) 인공지능, 머신러닝, 딥러닝의 정의를 소개한다. 

인공지능이란?

인공지능은 사람처럼 학습하고 추론할 수 있는 지능을 가진 컴퓨터 시스템을 만드는 기술입니다. 

 

머신러닝이란?

머신러닝은 규칙을 일일이 프로그래밍하지 않아도 자동으로 데이터에서 규칙을 학습하는 알고리즘을 연구하는 분야입니다.

사이킷런이 대표적인 머신러닝 라이브러리입니다. 

 

딥러닝이란?

딥러닝은 인공 신경망을 기반으로 한 방법들을 통칭합니다. 

딥러닝의 대표적인 라이브러리로 텐서플로가 있습니다. 

 

2) 예제 실행을 위한 환경 설정 방법

 

3) 분류 문제 start 

python csv 파일 읽는 방법 : pandas 사용

import pandas as pd
df = pd.read_csv("my.csv")
df.info()

산점도 그리는 방법 소개: matplotlib 맷플롯립 사용 

import matplotlib.pyplot as plt

plt.scatter(x배열, y배열)
plt.xlabel('x')
plt.ylabel('y')
plt.show()

데이터프레임을 넘파이 배열로 바꾸는 방법 

사이킷런을 사용하려면 리스트가 필요하여 np를 사용하여 바꿨다. 

import numpy as np
data_full = df.to_numpy()

K 최근접 이웃 알고리즘을 사용하는 방법 

import sklearn
model = sklearn.neighbors.KNeighborsClssifier()
kn=KNeighborsClassifier()
kn.fit(fish_data, fish_target)
kn.score(fish_data, fish_target) 
kn.predict([[30, 600]])

2. 데이터 다루기 

1) 훈련 세트와 테스트 세트 

 넘파이는 파이썬의 대표적인 배열 라이브러리입니다. 

 지도학습은 입력과 타깃을 전달하여 모델을 훈련한 다음 새로운 데이터를 예측하는 데 활용합니다. 

 비지도 학습은 타깃 데이터가 없습니다. 

 훈련 세트는 모델을 훈련할 때 사용하는 데이터입니다. 

 테스트 세트는 전체 데이터에서 20~30% 테스트 세트로 보통 사용합니다. 

 

2) 넘파이 활용

 

3) 데이터 전처리 방법 

사이킷런으로 훈련 세트와 테스트 세트 나누기 

 

from sklearn.model_selection import train_test_split
train_input, test_input, train_target, test_target = train_test_split(fish_data, fish_target_random_state=42)

3. 회귀 알고리즘과 모델 규제

1) k-최근접 이웃 회귀

회귀란? 클래스 중 하나로 분류하는 것이 아니라, 임의의 어떤 숫자를 예측하는 문제입니다. 

KNeighborsRegressor를 활용합니다.  

 

from sklearn.neighbors import KNeighborsRegressor
knr = KNeighborsRegressor()
knr.fit(train_input, train_target)
print(knr.score(test_input, test_target)

2) 선형 회귀

특성이 하나인 경우 어떤 직선을 학습하는 알고리즘입니다. 

LinearRegression을 사용합니다. 

 

from sklearn.linear_model import LinearRegression
lr = LinearRegression()

lr.fit(train_input, train_target)
print(lr.predict([[50]]))

모델 파라미터란?

선형 회귀가 찾은 가중치처럼 머신러닝 모델이 특성에서 학습한 파라미터를 의미합니다. 

LinearRegression 클래스는 선형회귀, 다항 회귀, 다중 회귀를 지원합니다. 

 

3) 특성공학과 규제 

특성이 여러 개인 경우엔 PolynomialFeatures 클래스를 사용하면 됩니다. 

 

from sklearn.preprocessing import PolynomialFeatures
poly = PolynomialFeatures()
poly.fit(train_input)
train_poly = poly.transform(train_input) 
print(train_poly.shape)
test_poly = poly.transform(test_input)
print(lr.score(test_poly, test_target))

선형 회귀 모델에 규제를 추가한 모델을 릿지와 라쏘라고 부릅니다. 

릿지는 계수를 제곱한 값을 기준으로 규제를 적용하고,

라쏘는 계수의 절댓값을 기준으로 규제를 적용합니다. 

4. 다양한 분류 알고리즘

1) 로지스틱 회귀

로지스틱 회귀는 이름은 회귀이지만, 분류 모델입니다. 

클래스 확률을 계산할 때 사용합니다. 

 

2) 확률적 경사 하강법

SGDRegressor는 확률적 경사 하강법을 사용한 회귀 모델을 만듭니다. 

loss 함수는 기본으로 squared_loss를 사용합니다. 

5. 트리 알고리즘

1) 결정 트리

2) 교차 검증과 그리드 서치

3) 트리의 앙상블

RandomForestClassifier 는 랜덤 포레스트 분류 클래스입니다. 

ExtraTreesClassifier의 회귀 버전은 ExtraTreesRegressor 클래스입니다.

GradientBoostingClassifier의 회귀 버전은 GradientBoostingRegressor 입니다. 

히스토그램 기반 그레이디언트 부스팅의 회귀 버전은 HistGradientBoostingRegressor 클래스입니다. 

 

6. 비지도 학습

군집 알고리즘

k-평균

주성분 분석

7. 딥러닝을 시작합니다. 

1) 인공 신경망

SGDClassifier를 사용할 때, 기울기가 가장 가파른 방향을 따라 이동하기 때문에, 표준화된 데이터를 사용해야 합니다.

사이킷런과 케라스 모델의 차이점을 설명해줍니다. 

#사이킷런 모델
#모델
sc=SGDClassifier(loss ='log', max_iter=5)
#훈련
sc.fit(train_scaled, train_target)
#평가 
sc.score(val_scaled, val_target)

#케라스 모델
#모델 
dense= keras.layers.Dense(10, activation='softmax', input_shape=(784,))
model = keras.Sequential(dense)
model.compile(loss ='sparse_categorical_crossentropy', metrics='accuracy')
#훈련
model.fit(train_scaled, train_target, epochs=5)
#평가
model.evaluate(val_scaled, val_target)

 

2) 심층 신경망 

Dense 클래스를 추가하는 방법은 아래와 같습니다. 

 

model= keras.Sequential()
model.add(keras.layers.Dense(100, activation='sigmoid', input_shape(784,)))
model.add(keras.layers.Dense(10, activation ='softmax'))
model.summary()

옵티마이저를 추가하는 방법은 아래와 같습니다. 

 

model.compile(optimizer='adam', loss='sparse_categorical_crossentropy', metrics='accuracy')

3) 신경망 모델 훈련 

모델 저장하는 방법은 아래와 같습니다. 

 

model.save_weights('modelName.h5')
model.save('modelName.h5')
#불러오는 방법 
model = keras.models.load_model('modelName.5h')
model.evaluate(val_scaled, val_target)

8. 이미지를 위한 인공 신경망

합성곱 신경망의 구성 요소 

합성곱 신경망을 사용한 이미지 분류 

합성곱 신경망의 시각화 

9. 텍스트를 위한 인공 신경망

순차 데이터와 순환 신경망

순환 신경망으로 IMDB 리뷰 분류하기

LSTM과 GRU 셀 

 

부록 한발 더 나아가기 

 

반응형