마켓과 머신러닝(Chapter_3_2)
1 | import numpy as np |
훈련 세트와 테스트 세트 분리
1 | from sklearn.model_selection import train_test_split |
((42,), (14,), (42,), (14,))
reshape(-1)은 무슨 의미인가?
- x.reshape(-1)은 x.reshape(1, -1)과 같이 1차원 배열을 반환합니다.
- x.reshape(-1, 1) => shape(12, 1)
- x.reshape(-1, 2) => shape(6, 2)
- x.reshape(-1, 3) => shape(4, 3)
++++ 출처: https://rfriend.tistory.com/345 [R, Python 분석과 프로그래밍의 친구 (by R Friend)]
1 | train_input = train_input.reshape(-1, 1) # 행렬 재배치 |
(42, 1) (14, 1)
모델 만들기
1 | from sklearn.neighbors import KNeighborsRegressor |
KNeighborsRegressor(n_neighbors=3)
예측
- p132
1 | print(knr.predict([[50]])) |
[1033.33333333]
시각화
- 객체 지향으로 변경 fig, ax 참고사이트
1 | import matplotlib.pyplot as plt |
- 머신러닝 모델은 주기적으로 훈련해야 합니다.
- MLOps (Machine Learning & Operations)
- 최근에 각광받는 데이터 관련 직업 필수 스킬!
- 입사와 함꼐 공부시작 (데이터 분석가, 머신러닝 엔지니어, 데이터 싸이언티스트 희망자)
선형 회귀 (머신러닝)
- 평가지표 확인이 더 중요! R2 점수, MAE, MSE
- 5가지 가정들…
- 잔차의 정규성
- 등분산성, 다중공선성, etc..
- 종속변수 ~ 독립변수간의 “인과관계”를 찾는 과정..
1 | from matplotlib.ticker import LinearLocator |
[7094.41034777]
1 | fig, ax = plt.subplots(figsize=(8, 5), facecolor="#c1f1f1") |
회귀식을 찾기
- 하나의 직선을 그리려면 기울기와 절편이 있어야합니다.
- 농어의 무게 = 기울기 x 농어 길이 + 절편
- y = a * x + b
1 | # 기울기, 상수 |
[39.01714496] -709.0186449535477
- 기울기 : 계수 = 가중치(딥러닝, 기울기)
1 | fig, ax = plt.subplots(figsize=(8, 5), facecolor="#c1f1f1") |
- 모형 평가 (p.138)
- 과소적합이 됨
다항회귀의 필요성
- 치어를 생각해보자
- 치어가 1cm
1 | print(lr.predict([[1]])) |
[-670.00149999]
- (p. 140) 1차방정식을 2차방정식으로 만드는 과정이 나옴
- 넘파이 브로드캐스팅 링크 텍스트
- 배열의 크기가 동일하면 상관 없음
- 배열의 크기가 다른데, 연산을 할때, 브로드캐스팅 원리가 적용
- 브로드캐스팅 튜토리얼 등을 찾아서 추가적으로 공부를 해야함
1 | train_poly = np.column_stack((train_input ** 2, train_input)) |
(42, 2) (14, 2)
1 | lr = LinearRegression() |
[1573.98423528]
1 | print(lr.coef_, lr.intercept_) # y = ax2 + bx + c 이차방적식, x = "length" |
[ 1.01433211 -21.55792498] 116.0502107827827
- KNN의 문제점
- 농어의 길이가 커져도 무게는 동일함 (현실성 제로)
- 단순 선형회귀(1차 방정식)의 문제점
- 치어(1cm)의 무게가 음수로 나옴 (현실성 제로)
- 다항 회귀(2차 방정식)로 변경
- 현실성 있음