Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

해커에게 전해들은 머신러닝 #1

5,772 views

Published on

한빛미디어 리얼타임 세미나 '해커에게 전해들은 머신러닝' 강의 자료(1/4)
http://www.hanbit.co.kr/store/education/edu_view.html?p_code=S4788493436

Published in: Technology
  • Be the first to comment

해커에게 전해들은 머신러닝 #1

  1. 1. 해커에게 전해들은 머신러닝-1 tensorflowkorea.wordpress.com/슬라이드-자료/ tensorflowkorea.wordpress.com/2016/10/29/해커에게-전해들은-머신러닝 github.com/rickiepark/ml-learn 2016. 11. Park Haesun(haesunrpark@gmail.com)
  2. 2. 머신 러닝 (Machine Learning)
  3. 3. “머신 러닝 또는 기계 학습은 인공 지능의 한 분야로, 컴 퓨터가 학습할 수 있도록 하는 알고리즘과 기술을 개발하 는 분야를 말한다.” - 위키피디아 “Field of study that gives computers the ability to learn without being explicitly programmed.” - Arthur Samuel, 1959 머신러닝이란
  4. 4. Machine Learning Computer Science Statistics Data Mining 컴퓨터 비전 자연어처리 뉴럴 네트워크 회귀 연관분석패턴인식 추천 베이지안 네트워크 확률 Statistical ML 인공지능 빅데이터 리소스 분류
  5. 5. 𝐀𝐈 ⊃ 𝐌𝐚𝐜𝐡𝐢𝐧𝐞 𝐋𝐞𝐚𝐫𝐧𝐢𝐧𝐠 ⊃ 𝐃𝐞𝐞𝐩 𝐋𝐞𝐚𝐫𝐧𝐢𝐧𝐠
  6. 6. 시간에 따른 변화
  7. 7. 우리에게 필요한 도구들
  8. 8. 어떤 것을 사용할 것인가
  9. 9. “Don’t be a hero”
  10. 10. 사이킷런
  11. 11. 온라인에서 읽을 수 있는 파이썬 책 http://byteofpython-korean.sourceforge.net/ byte_of_python.html http://www.flowdas.com/thinkpython/
  12. 12. 파이썬 인스톨러 http://www.activestate.com/activepython https://www.enthought.com/products/canopy/ https://www.continuum.io/downloads
  13. 13. IPython on Windows
  14. 14. Ipython on Mac, Linux
  15. 15. 머신러닝 분류
  16. 16. 학습 방법 지도학습, 감독학습 비지도학습, 비감독학습 강화학습
  17. 17. by Andreas C. Müller 사이킷런 치트 시트
  18. 18. ML Learn 프로그램 순서 선형 회귀 분석 (Linear Regression) 로지스틱 회귀 분석 (Logistic Regression) 뉴럴 네트워크 (Neural Network)
  19. 19. ML Learn regression toward the mean Francis Galton 프란시스 갈톤
  20. 20. 숫자를 사용하여 숫자를 예측한다. 회귀 분석 중국: 32.2 °C 일본: 33.3 °C ---> 한국: 31.6 °C 북한: 29.5 °C
  21. 21. y = 2 * x + 3 y = 2 * x2 + 3 (X) y = √x + 3 (X) 선형 == 1차함수
  22. 22. 당뇨병 데이터
  23. 23. ML Learn UC 얼바인 ML 저장소 http://archive.ics.uci.edu/ml/
  24. 24. 사이킷런의 내장 데이터 load_boston() : 주택가격 load_iris() : 붓꽃 load_diabetes() : 당뇨병 load_digits() : 손글씨숫자 load_linnerud() : 운동
  25. 25. 당뇨병 데이터 나이(Age), 성별(Sex), 체질량(BMI), 혈압(BP), 혈액검사 데이터 6가지(S1~S6) 1년 뒤의 당뇨병 악화 지수 당뇨병 환자를 추적한 442개의 데이터셋
  26. 26. 데이터 로드 $ ipython ... In [1]: %pylab In [2]: from sklearn import datasets In [3]: diabetes = datasets.load_diabetes() In [4]: print(diabetes.data.shape, diabetes.target.shape) Out [5]: (442, 10) (442, )
  27. 27. $ ipython ... In [1]: %pylab In [2]: from sklearn import datasets In [3]: diabetes = datasets.load_diabetes() In [4]: print(diabetes.data.shape, diabetes.target.shape) Out [5]: (442, 10) (442, ) 데이터 로드 넘파이, 맷플롯립 임포트 사이킷런의 데이터 패키지 임포트 데이터 로드 넘파이 변수 442개의 행 10개의 열 442개의 타겟 (병의 악화도)
  28. 28. 행렬(Matrix) 10개의 열(column) 442개의 행(row)
  29. 29. In [1]: print(diabetes.target[:10]) In [2]: print(diabetes.data[:5]) 데이터 들여다 보기 슬라이스 연산자
  30. 30. In [1]: print(diabetes.target[:10]) [ 151. 75. 141. 206. 135. 97. 138. 63. 110. 310.] In [2]: print(diabetes.data[:5]) [[ 0.03807591 0.05068012 0.06169621 0.02187235 -0.0442235 -0.03482076 - 0.04340085 -0.00259226 0.01990842 -0.01764613] [-0.00188202 -0.04464164 - 0.05147406 -0.02632783 -0.00844872 -0.01916334 0.07441156 -0.03949338 - 0.06832974 -0.09220405] [ 0.08529891 0.05068012 0.04445121 -0.00567061 - 0.04559945 -0.03419447 -0.03235593 -0.00259226 0.00286377 -0.02593034] [- 0.08906294 -0.04464164 -0.01159501 -0.03665645 0.01219057 0.02499059 - 0.03603757 0.03430886 0.02269202 -0.00936191] [ 0.00538306 -0.04464164 - 0.03638469 0.02187235 0.00393485 0.01559614 0.00814208-0.00259226 - 0.03199144 -0.04664087]] 데이터 들여다 보기 10개의 열(column) 442개의 행(row)
  31. 31. In [1]: print(diabetes.target[:10]) [ 151. 75. 141. 206. 135. 97. 138. 63. 110. 310.] In [2]: print(diabetes.data[:5]) [[ 0.03807591 0.05068012 0.06169621 0.02187235 -0.0442235 -0.03482076 - 0.04340085 -0.00259226 0.01990842 -0.01764613] 데이터 들여다 보기 나이 성별 체질량
  32. 32. In [1]: print(diabetes.target[:10]) [ 151. 75. 141. 206. 135. 97. 138. 63. 110. 310.] In [2]: print(diabetes.data[:5]) [[ 0.03807591 0.05068012 0.06169621 0.02187235 -0.0442235 -0.03482076 - 0.04340085 -0.00259226 0.01990842 -0.01764613] 데이터 들여다 보기 나이 성별 체질량 sklearn.preprocessing.scale ---> sklearn.preprocessing.normalize 0.05068012 , -0.04464164
  33. 33. 입력값, 출력값 독립변수, 예측변수, 특성(feature), 입력값(input) 종속변수, 응답변수, 출력값(output)
  34. 34. 산점도(Scatter Plot) In [1]: plt.scatter(diabetes.data[:,2], diabetes.target)
  35. 35. 적절한 선형 모델
  36. 36. 선형 회귀 방정식
  37. 37. 하나의 뉴런 (Single Neuron)
  38. 38. 뉴런(Neuron)
  39. 39. 뉴런의 신호전달
  40. 40. 하나의 뉴런 Neuron ŷ w x b * + y: diabetes.target
  41. 41. 하나의 뉴런 Neuron ŷ w x b * + 정방향 계산 역방향 계산 y: diabetes.target
  42. 42. SingleNeuron
  43. 43. SingleNeuron In [1]: n1 = SingleNeuron() In [2]: n1.set_params(5, 1) # w, b 를 5, 1 로 셋팅 In [3]: print(n1.forpass(3)) # x 에 3 을 입력 16 In [4]: n1.set_params(6, 1) # w, b 를 6, 1 로 셋팅 In [5]: print(n1.forpass(3)) # x 에 3 을 입력 19
  44. 44. w * x (5, 3) (5, -3)
  45. 45. w 에 대한 ŷ 의 변화율 In [1]: n1 = SingleNeuron() In [2]: n1.set_params(5, 1) # w, b 를 5, 1 로 셋팅 In [3]: print(n1.forpass(3)) # x 에 3 을 입력 16 In [4]: n1.set_params(6, 1) # w, b 를 6, 1 로 셋팅 In [5]: print(n1.forpass(3)) # x 에 3 을 입력 19
  46. 46. ŷ = w * 3 + 1 w 에 대한 ŷ 의 변화율
  47. 47. x 에 대한 ŷ 의 변화율 In [1]: n1 = SingleNeuron() In [2]: n1.set_params(5, 1) # w, b 를 5, 1 로 셋팅 In [3]: print(n1.forpass(3)) # x 에 3 을 입력 16 In [4]: n1.set_params(5, 1) # w, b 를 5, 1 로 셋팅 In [5]: print(n1.forpass(4)) # x 에 4 을 입력 21
  48. 48. ŷ = 5 * x + 1 x 에 대한 ŷ 의 변화율
  49. 49. b 에 대한 ŷ 의 변화율 In [1]: n1 = SingleNeuron() In [2]: n1.set_params(5, 1) # w, b 를 5, 1 로 셋팅 In [3]: print(n1.forpass(3)) # x 에 3 을 입력 16 In [4]: n1.set_params(5, 2) # w, b 를 5, 2 로 셋팅 In [5]: print(n1.forpass(3)) # x 에 3 을 입력 17
  50. 50. 경사하강법 (Gradient Descent)
  51. 51. w, b 를 최적화 하는 방법 • x 가 주어졌을 때 ŷ 를 계산 (442번) ŷ1 = 5 * x + 1 • w 를 조금 변경시켜 다시 ŷ2 계산 (442번) • w 의 변화율 계산 • 변화율에 비례하여 w 와 b 를 변경
  52. 52. 변화율 계산 대신 미분 공식 ŷ = w * x + b ---> ŷ’ = x w 에 대한 미분 ŷ = w * x + b ---> ŷ’ = 1 b 에 대한 미분 https://ko.wikipedia.org/wiki/미분표
  53. 53. 변화율 계산 대신 미분 공식 ŷ = w * x + b ---> ŷ’ = x w 에 대한 미분 ŷ = w * x + b ---> ŷ’ = 1 b 에 대한 미분 https://ko.wikipedia.org/wiki/미분표 편미분 기호 사용
  54. 54. 미분 공식 기억하세요? 𝑦 = 3𝑥 𝜕𝑦 𝜕𝑥 = 3 𝑦 = 2 𝜕𝑦 𝜕𝑥 = 0 𝑦 = 𝑥2 𝜕𝑦 𝜕𝑥 = 2𝑥 𝑦 = 𝑤𝑥 𝜕𝑦 𝜕𝑥 = 𝑤 𝜕𝑦 𝜕𝑤 = 𝑥
  55. 55. w, b 를 최적화 하는 방법 - 미분 • x 가 주어졌을 때 ŷ 를 계산 (442번) ŷ = 5 * x + 1 • w 에 대한 미분으로 변화율 계산 • 변화율에 비례하여 w 와 b 를 변경
  56. 56. w 와 b 가 나아갈 표면
  57. 57. w, b 가 변경되는 순서 ŷ = 90 이고 y = 100 일 때 10만큼 모자람 10 * (w 에 대한 변화율) = 10 * x 10 * (b 에 대한 변화율) = 10 * 1 변경량 속도 조절을 위해 * 0.1 w 와 b 의 변경량을 각각 업데이트
  58. 58. 역방향 계산 Neuron ŷ w x b * + y - ŷ + (y – ŷ) * x * 0.1 + (y – ŷ) * 1 * 0.1 y: diabetes.target
  59. 59. 업데이트 부호가 의미하는 것 Neuron ŷ w x b * + y - ŷ + (y – ŷ) * x * 0.1 + (y – ŷ) * 1 * 0.1 (y – ŷ) > 0 : 출력이 모자람 if x > 0: w 를 증가시킴 else : w 를 감소시킴 (y – ŷ) < 0 : 출력이 넘침 if x > 0: w 를 감소시킴 else : w 를 증가시킴 y: diabetes.target
  60. 60. 기울기 업데이트 이것이 경사하강법(Gradient Descent)! y - ŷ 전체 요소에 대해 계산전체 합
  61. 61. 선형 회귀 계산 체질량 데이터 전체를 이용 3만번 반복 3만번 업데이트
  62. 62. 선형 회귀 모델
  63. 63. 보통의 이론적인 방법
  64. 64. 비용 함수 모델의 오차를 정의하는 함수 비용 함수 (Cost Function) == 손실 함수 (Loss Function) == 목적 함수 (Objective Function) == 오차 함수 (Error Function)
  65. 65. 회귀 분석의 비용 함수 평균 제곱 오차(Mean Square Error)*
  66. 66. 회귀 분석의 비용 함수 오차의 제곱 모든 훈련 데이터의 오차 제곱을 더함 훈련 데이터 갯수로 나눔 미분후 깔끔을 위해 2로 나눔
  67. 67. 비용 함수 미분
  68. 68. 경사하강
  69. 69. 그래디언트 업데이트 학습속도(Learning Rate)
  70. 70. 뉴런에서 그래디언트 전달 Neuron ŷ w x b * + y - ŷ η(y – ŷ)x η(y – ŷ)
  71. 71. 사이킷런과 비교
  72. 72. SGDRegressor 페널티: 나중에Stochastic
  73. 73. by Andreas C. Müller 사이킷런 치트 시트
  74. 74. batch, mini-batch SGDRegressor(Stochastic Gradient Descent): 확률적 경사 하강법 훈련 데이터를 하나씩 사용하여 반복 학습 SingleNeuron(Batch Gradient Descent): 훈련 데이터 전체를 사용하 여 반복 학습 Mini-Batch Gradient Descent: 훈련 데이터를 10~20개씩 묶음으로 나 누어 반복 학습
  75. 75. LinearRegression 정규방정식을 사용:
  76. 76. LinearRegression 단점: 데이터가 클 경우 연산비용이 너무 크고 역행렬을 구할 수 없는 특이 행렬이 존재함 정규방정식을 사용:
  77. 77. 감사합니다.

×