Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- axios
- 혼공머신
- useEffect
- 혼공챌린지
- 알고리즘
- 혼공단
- 백준 #코딩테스트 #코테 #알고리즘
- typeScript
- 백준 #코딩테스트
- 유니티 #게임개발
- 혼자공부하는머신러닝딥러닝
- reactmemo
- 리액트
- clipboardapi
- TS
- 백준
- Redux
- 딥러닝
- 구조분해할당
- 머신러닝
- 에러해결방안
- 타입스크립트
- 초기값 설정하기
- 코딩테스트
- 혼자공부하는머신러닝
- CSS
- styledcomonents
- REACT
- js
- error맛집
Archives
- Today
- Total
좌충우돌 개발자의 길
8강 : 특성 공학과 규제 본문
다중 회귀
- 여러개의 특성을 사용함 (↔ 다항 회귀)
특성 공학
- 새로운 특성을 추가하거나 특성을 발견하거나 특성끼리 조합을 하는 것
- 머신러닝 알고리즘은 특성공학의 영향을 많이 받음
판다스 데이터로 준비
- 데이터 프레임으로 되어 있는데 이는 다른 종류의 데이터 타입을 받을 수 있는 특징이 있다.
- 엑셀과 비슷하다
- 판다스로 원격에 있는 파일을 불러와서 넘파이 배열로 만들기
- csv 파일
- 한줄에 샘플 하나가 들어있음 (length, height, wiedth)
- 콤마로 나눠진 열마다 특성 데이터가 들어있음
- read_csv() : 파일 불러오기
- to_numpy() : 넘파이 배열로 만들기
다항 특성 만들기
form sklearn.preprocessing import PolynomialFeatures
# degree = 2
# fit(훈련 : 새롭게 만들 특성 조합 찾기)과
# transform(변환 : 실제로 데이터를 변환 )은 변환기 클래스
poly = PolynomialFeatures() #객체 생성
poly.fit([2,3]) #2개의 특성 2와 3으로 이루어진 샘플 적용
# 두개의 특성을 가진 샘플 [2,3]이 6개의 특성을 가진 샘플로 변환
# 1(bias), 2, 3, 2**2, 2*3, 3*2
print(poly.transform([2,3])
[[1. 2. 3. 4. 6. 9. ]]
- 1이 추가된 이유 : 절편을 위한 가상의 특성 1을 만드는 경우가 있다.
- y = ax + b1 ⇒ [a, b][x, 1]
- 하지만 사이킷런의 선형 모델은 자동으로 절편을 추가하므로 굳이 이렇게 특성을 만들 필요가 없다 → include_bias = False로 지정해 다시 특성 변환
- PolynomialFeatures : 변환기 - 특성변환, 전처리 할 때 사용
- 메소드 : fit, transform ⇒ fit_transform() : 두가지 한번에 처리
- LinearKn~~, KN~~ : 추정기 - 모델링
- 메소드 : fit, predict, score
LinearRegression
poly = PolynomialFeatures(include_bias=False)
poly.fit(train_input)
train_poly = poly.transform(train_input)
# 크기 보기 (샘플 개수, 특성 개수)
print(train_poly.shpae)
(42,9)
# 특성이 어떻게 만들어졌는지 확인하기 -> get_featrue_names()
poly.get_feature_names()
['x0', 'x1','x2','x0^2','x0 x1',
'x0 x2','x1^2','x1 x2','x2^2',]
test_poly = poly.transform(test_input)
- x0^2 : 첫번째 특성의 제곱
- x0 x1 : x0 곱하기 x1
- degree=2 로 기본값으로 설정되어 있기에 제곱까지 나온거임
→ 이전보다 좋은 예측결과가 나옴
더 많은 특성 만들기
- degree를 5로 늘려서 만들면 train_poly.shape에서 55개의 특성으로 늘어난 것을 볼 수 있음
- 상당히 과대적합되었는데 이는 일부러 이렇게 만든 거고 규제라는 것을 통해 정돈할 수 있음
- poly.fit(test_input) 은 왜 안해?
- → 테스트 샘플은 자동적으로 fit메소드를 호출해서 따로 변환하지 않고 항상 훈련세트에서 먼저 학습한 객체를 사용해서 테스트 샘플을 변환
- 규제 : 극도로 과대적합된 모델을 완화하는 역할
→ 가중치(기울기)값을 줄여서 부드러운 그래프처럼 되게 만들기
→ 가중치 값을 적게 만들기
- LeanerRegression은 스케일(특성의 크기)에 영향x → 굳이 안맞춰도 됨
- BUTTT!!! 규제를 하려면 맞춰야함 → 특성의 스케일이 비슷해져야지 기울기도 비슷해짐
규제 전에 표준화
from sklearn.preprocessing import StandarScaler
ss= StandarScaler()
ss.fit(train_poly) # 표준편차를 각 특성마다 구하는 훈련하기
train_scaled = ss.transform(train_poly)
test_scaled= ss.transform(test_poly)
- preprocessing StandarScaler에서 제공하는 것으로 표준점수를 바꾸는 변환기
릿지 회귀
- 사이킷런에는 규제가 되어있는 선형모델을 다른 별도의 클래스로 구현되어 잇음
- → 릿지와 라소 클래스 두가지로 나눠짐
- 릿지 회귀는 선형회귀에 가중치^2인 L2규제를 적용한 것을 말함
- 릿지 클래스 규제의 강도 : Ridge() 매개변수에는 alpha=1이 있는데 이를 더 높게 하면 강도가 쎄짐, 작게하면 강도가 약해짐
- alpha같이 우리 스스로가 정해져야하는 것을 하이퍼파라미터라고 함
- 이 alpha값을 바꿔가면서 좋은 score 점수를 찾아야함
- 가중치는 모델 파라미터라고 불림
적절한 규제 강도 찾기 (릿지회귀)
- alpha_list 보면 10의 배수로 이루어져있는데 이게 일반적임 → 그래프에서 동일한 간격이 나오도록 하기 위해 log10도 사용함
→ 왼쪽으로 갈 수록 과대적합, 오른쪽으로 갈 수록 과소적합되어, 가장 간격이 좁은 -1인 10의 -1인 0.1 을 alpha값으로 준거임
라쏘 회귀
- 가중치의 절대값을 벌칙으로 줌 → L1규제를 적용한다
- 릿지 규제와 똑같은 방식으로 진행함
- L1 규제보다는 L2 규제를 대다수 선호함
- 가중치를 0으로 만들어서 특성 * 가중치 → 0이 되어서 특성이 아예 사라지게하는 기능있음
print(np.sum(lasso.coef_ == 0))
40
# 이렇게 표현하여 특성이 0이 되어버린 개수를 찾을 수 있음
'STUDYING > 머신러닝&딥러닝' 카테고리의 다른 글
9강 : 로지스틱 회귀 알아보기 (0) | 2021.07.24 |
---|---|
[WEEK2] 혼자서 공부하는 머신러닝 + 딥러닝 2주차 (0) | 2021.07.19 |
7강 : 선형회귀 (0) | 2021.07.18 |
6강 : k-최근접 이웃 회귀 (0) | 2021.07.14 |
5강 : 데이터 전처리 (0) | 2021.07.14 |