데이터 4주차

sss·2022년 3월 1일
0

1강

자전거 수요의 상관관계 분석
시각화
예측

선형회귀 기초
sciket learn사용해서 선형회귀분석

2강

선형회귀
예측할 때 필요한 개념. 예를 들어 공부시간으로 성적 예측 등.

공부시간을 늘리면 성적이 잘나온다는 가설을 세웠을 때 독립변수 x는 공부시간. 종속변수 y는 성적.
여기서 선형회귀는 한 개 이상의 독립변수 x와 y의 선형 관계 모델링함.

y = wx + b

여기서 독립변수 x과 곱해지는 값w를 가중치(weight), 별도로 더해지는 값 b는 편향(bias)라 함. b를 y절편이라 부르기도 하고 상수(constant)라 부르기도 함.

w와 b의 값을 찾아나가는 과정이 선형회귀.
이걸로 공부시간이 얼마일 때 성적을 얼마일 것이라는 예측을 할 수 있음.

데이터들에 가장 가깝게 선을 긋는 행위가 선형회귀임. 데이터가 선 모양으로 회귀하는 것.

한가지 요인만이 결과에 영향을 주는 경우 : 단순 선형 회귀

여러가지 요인이 결과에 영향을 주는 경우 : 다중 선형 회귀
ex)평수, 층수, 위치, 지하철역까지 거리 등

3강

회귀와 분류의 차이

줄거리로 영화 장르를 예측하는 행위 - 분류
공부시간으로 성적을 예측하는 행위 - 회귀

회귀 - 특정한 수치를 추정
분류 - 범주/클래스를 추정 --> 결과값은 이미 정해져있는 결과값 중 하나

회귀 - 선형회귀, 릿지회귀, 라쏘회귀
분류 - 로지스틱회귀(이름만 분류), SVM, 나이브베이즈분류기

회귀 - 예측값과 결과값의 오차를 기준으로 결정. 오차가 적으면 좋은 모델
분류 - F1-Score / Precision / Recall를 평가지표로 씀. 예측값과 실제값의 일치 여부

4강

선형회귀를 하려면 뭔가 예측해야함
ex) 중간, 기말, 가산점까지 나왔는데 최종성적 나오는 공식을 모름.
근데 지난 번 성적은 있음.

sklearn.leaner_model패키지의 LinearRegression모듈을 사용
fit()으로 학습시킴

가중치의 값은 .coef로 알수있음 (w1, w2, w3등)
편향의 값은 .intercept
로 알 수 있음 (b)

.predict()로 예측

5강

6강

subplot - 여러개의 그래프를 한번에 출력
boxplot - 사분위 개념을 이용해 데이터 분포 확인

plt.subplot(행의 수, 열의 수)

boxplot
여기서 최대, 최소값은 실제 최대, 최소값이 아니다. 박스에서 가장 가까운 최대, 최소값임. 여기서 흔히 말하는 최대 최소값은 이상치라고 한다. 왜냐 다른 값과 비교했을 때 이상한 값이라서. 너무 차이남.

이런 데이터는 제외해야함. 올바르게 예측하지 못하는 경우가 생김.

7강

상관관계 분석, 정규화
정규화는 규제, 정규분포화가 있는데 둘다 저렇게 부름(번역 이상하게 해서)
히스토그램 - 범주별 빈도수

8강

평가지표 - 정확도 계산하는 수단
회귀 - 실제값 예측값 오차 평가 어떻게 할까?

EMSLE - Root Mean Squared Log Error

예측값 - 실제값 = 오차

예측값에 로그 씌우고
실제값에도 로그를 취한 다음
둘을 빼서 오차값 구함
그리고 오차값을 제곱
오차값의 제곱이라는 값을 모든 데이터에 대해서 다 구한 다음
그 값을 다 더함
데이터의 갯수로 나옴 (모든 데이터에 대해 오차값제곱의 평균값이 나옴)
거기에 루트를 씌우면 완성

오차를 얼마나 잘 구현해서 함수를 만드느냐? 이게 중요한 건 아님

RMSE - Root Mean Squared Error

예측값 - 실제값 = 오차
예측값에서 실제값 빼서 오차를 구하고
오차값을 제곱
오차값의 제곱이라는 값을 모든 데이터에 대해 구해서 다 더함
데이터 갯수로 나눔 (오차값의 제곱의 평균값 구하기)
모든 데이터에 대한 오차값 제곱의 평균값에다가 루트를 씌워줌

사이킷런에는 MSE가 있음. 여기에 루트를 씌우면 RMSE가 됨

9강

선형회귀 해볼것임
이 계절에 이 양에는 데이터가 이렇게 될 것이다

과정부터 알아보자.
-훈련데이터 테스트데이터 나누는모듈 불러옴
-선형회귀학습 모듈 불러옴

-read csv로 불러와서 train이라는 변수로 저장, parse_dates로 문자열을 날짜로 바꿔줌 (apply대신)
-year, month, day, hour열 다시 만들어줌
-datetime열은 이미 나눠놨으니 삭제하고 casual, registered은 둘이 더하면 대여량의 전체가 바로 나오므로 의미가 없다 삭제 .drop으로 지움
-훈련데이터와 예측대상값(레이블 라벨)분리 - 대상값에는 inplace false
-훈련데이터와 테스트 데이터 7:3으로 분리 random_state로 데이터를 골고루 섞어줌

  • 선형회귀 학습하고 모델 평가
    -오차값이 나왔다. 정규분포로 더 낮춰보자.
  • 예측대상이 되는 값의 경우는 정규분포를 가지는 게 좋음. 모델 재학습
  • log1p를 사용해서 다시 학습
    -데이터가 바뀌었으므로 훈련/테스트 데이터 다시 분리
    -선형회귀 학습
    -로그 씌웠던 걸 다시 돌려놔야함 expm1로 함

9, 10강

범주형 변수 --> 더미형 변수
범주형 변수 계절을 1,2,3,4라고 해놨지만 기계는 이해 못함.
계절이 대여량에 미치는 영향을 분석해줘(x)
봄이 대여량에 미치는 영향을 분석해줘
여름이 대여량에 미치는 영향을 분석해줘
가을이 대여량에 미치는 영향을 분석해줘
겨울이 대여량에 미치는 영향을 분석해줘 (o)

범주형 변수 = 카테고리 ex)계절, 학점, 년도, 혈액형 등
수치형 변수 - 몸무게, 키, 온도, 습도, 인구 등

자전거 대여 데이터에서는 연, 계절 등이 있음.

pandas의 get_dummies로 함

가중치 시각화
=가장 영향을 많이 주는 특성을 찾는다

데이터프레임 만들고 lr.coef로 가중치만 출력하고
각 더미 특성들과 각 해당 특성들의 가중치값을 zip으로 묶어서 가져옴
컬럼 이름은 feature랑 coef
내림차순 정렬
상위 20개 데이터만 출력해보겠음

zip함수를 통해 가중치 값을 묶음

11강 정규화

정규분포와는 다른 개념. 여기서는 규제, 제약으로서의 정규화임

model이라는 모델을 구축했다고 가정하자. score함수는 x데이터와 y데이터를 넣으면 정확도를 자동으로 계산해줌.
훈련데이터는 정확도가 100%이 아님. 실제값을 알려줬어도 기계가 나중에 너무 많이 학습하면서 점점 오차가 발생.

훈련데이터에 너무 집착한 나머지 새로운 데이터가 들어왔을 때는 예측을 제대로 못함 - 과적합
ex) 빨간사과만 평생 보다가 새로운 빨간사과를 보면 사과네 이럼
그러다 녹색사과를 주면 사과는 빨간색인데 이건 뭐임 사과가 아닌건가 이럼 그게 과적합

머신러닝의 궁극적인 목표는 아직 못 본것의 예측가능성, 정확도를 높이는 것임. 그렇다면 정확도를 어떻게 높일까?
과적합상태를 해결해서 학습데이터의 정확도는 낮추더라고 테스트데이터의 정확도를 높여보자 --> 정규화

그래서 가중치의 제약을 통해 과적합 해결

ex) y = w1x1 + w2x2 + w3x3...+b
w가 가중치
w를 줄임.

사과로 치면 빨간색의 가중치를 줄여서 색깔에 구애덜받고 사과라고 판단하게 하기 위함

규제에는 L1, L2규제가 있다.

L1규제 - 각 가중치들의 절대값 합계를 고려해서 최적화 진행
L2규제 - 각 가중치들의 제곱수의 합계를 고려해서 최적화 진행

최적화는 합계를 최대한 줄여가면서 실제값과의 오차를 줄이는 것임.

그렇다고 특성이 없어질 정도로 엄청나게 줄어드는 건 아님. 규제의 정도는 사람이 판단해서 직접 입력해야함.
그 선을 찾는게 매우 중요.

릿지 회귀 - L2규제 사용

12강

정확도를 더 높이기위한 방법
1-정규화(규제 말고 정규분포화)
2-이상치 탐지 - 이상치를 너무 많이 제거하면 오히려 정확도가 떨어질 수 있음

profile

0개의 댓글

관련 채용 정보