2022. 8. 29. 22:44ㆍML_DL/ML
- 범주형데이터
- OneHotEncoder
- 정규화모델
- Ridge Regression
- Lambda, Alpha, t
- RidgeCV
- SelectKBest
- Ridge Regression
범주형데이터

https://horae.tistory.com/entry/범주형수치형이상형연속형명목형순서형-정리
범주형,수치형,이상형,연속형,명목형,순서형 정리
출처: KQTI 오늘은 기본적인 데이터의 종류에 대해서 알아보도록 하겠습니다. 데이터의 종류를 알아보는 것은 데이터 수집시 어떤 유형으로 수집하는 것이 좋은지를 설정하는 것부터 분석이나
horae.tistory.com
순서형 : 만족도 (1~5) , 성적등급(1~9)
Q) 범주형데이터는 컴퓨터가 어떻게 처리하게 해야할까?
Onehotencoding

**주의점 및 문제점**
- Onehotencoding이 아닌 순서형 encoding(1~N)으로 하는 경우, 컴퓨터는 자체적으로 숫자의 대소를 비교하기 때문에 논리적인 오류가 발생한다.
- 집합의크기 ( Cardinality ) 이 매우 큰 경우 onehotencoding을 진행하면 무수한 컬럼이 발생한다.
- 예 ) 편의점에서 결제한 시간 내역
<OneHotEncoding 예제>
df = pd.DataFrame({
'City': ['Seoul', 'Seoul', 'Seoul', 'Busan', 'Busan', 'Busan', 'Incheon', 'Incheon', 'Seoul', 'Busan', 'Incheon'],
'Room': [3, 4, 3, 2, 3, 3, 3, 3, 3, 3, 2],
'Price': [55000, 61000, 44000, 35000, 53000, 45000, 32000, 51000, 50000, 40000, 30000]
})
## get_dummies 를 사용한 원핫인코딩
df_oh = pd.get_dummies(df, prefix=['City'])
## 불필요한 요소를 없인 더미 코딩
df_dum = pd.get_dummies(df, prefix=['City'], drop_first=True)
df_dum
## Initialize LinearRegression
model_oh = LinearRegression()
# 모델 학습(fit)
model_oh.fit(df_oh[['City_Seoul','City_Busan','City_Incheon']], df_oh['Price'])
## model coef_, intercept_
print("coefficients: ", model_oh.coef_)
print("intercept:" , model_oh.intercept_)
# 더미 코딩
model_dum = LinearRegression()
model_dum.fit(df_oh[['City_Seoul', 'City_Incheon']], df_oh['Price'])
print("coefficient: ", model_dum.coef_)
print("intercept: ", model_dum.intercept_)

Q) 밑 더미코딩을 통해서 학습한 모델은 테스트 입력값이 City라는 컬럼에 대해서 서울 혹은 인천이 아니라면 어떻게 될까? ( 부산도 아닌 경우 )
-이런 경우에 대비해서 만든것 아닐까? 즉, 서울과 인천이 아닌 모든 지역에 대해서 판단을 내리는 것 같다.
< 정규화모델 >
회귀계수(기울기)에 있어서 제약을 걸어줌으로 오히려 미흡 학습을 유도하는 것 = 과적합을 방지하기 위해서
과적합을 방지한다 → 분산을 줄인다 → (Trade Off) → 편향이 커진다
= 단순화


lambda 식을 왜 추가했는지를 생각해보면, lambda 의 크기에 따른 과소적합, 과적합 상태를 쉽게 이해가 가능하다.
lambda 식이 없으면??
OLS와 동일하다.
⇒ 우리는 과적합을 줄이기 위해서, Ridge를 사용한다
⇒ 기존에는 과적합을 신경쓰지 않았다
⇒ 분산은 상관없으니 Bias 값을 최대한 낮추자
정규화 모델이란 : Bias값이 증가해도 좋으니, Variance를 좀 안정화 시켜보자.
다양한 정규화 모델이 있는데 이를 나누는 기준은 뭘까?
어떠한 조건(제약)을 어떻게 걸 것인가
Ridge Regression


2차 원뿔 방정식 → 판별식 “D” → D의 범위에 따라서 단면적의 형태가 결정이 된다.
D값의 따라서,
타원, 포물선,쌍곡선
원 (타원의 특별한 경우) 이 나온다.

해당 식은 원의 방정식이다. $\sqrt{t}$ 는 반지름
**하나가 결정이 되면, 다른 하나도 자연스럽게 결정이 된다.**
특성 선택 방법
SelectKBest
# target(Price)와 가장 correlated 된 features 를 k개 고르는 것이 목표입니다.
## f_regresison, SelectKBest
from sklearn.feature_selection import f_regression, SelectKBest
## selctor 정의합니다.
selector = SelectKBest(score_func=f_regression, k=10)
## 학습데이터에 fit_transform
X_train_selected = selector.fit_transform(X_train, y_train)
## 테스트 데이터는 transform
X_test_selected = selector.transform(X_test)
어떤 변형을 일으키는 행렬을 만든다 ⇒ selector = ~~
해당 행렬의 원소값을 조절한다 ⇒ fit
행렬을 통해서 어떤 데이터를 변형 시킨다 ⇒ transform
f_regerssion = F-statics, P-value를 반환한다. 해당 값들을 통해 feature 별 가중치를 부여하는 것이라고 생각되어짐.
K는 어떻게 구하나?


alpha는 어떻게 구하는가?
from sklearn.linear_model import RidgeCV
alphas = [0.01, 0.05, 0.1, 0.2, 1.0, 10.0, 100.0]
ridge = RidgeCV(alphas=alphas, normalize=True, cv=3)
ridge.fit(ans[['x']], ans['y']) # Train 값들을 넣어줄것임.
print("alpha: ", ridge.alpha_)
print("best score: ", ridge.best_score_)
CV = 교차검증 횟수
Best_Score = 설명 할 수 있는 정도의 지표
'ML_DL > ML' 카테고리의 다른 글
| ML) CrossValidation (0) | 2022.08.30 |
|---|---|
| ML) Metrics (0) | 2022.08.29 |
| ML) Logistic Regression (0) | 2022.08.29 |
| ML) Multiple Regression (0) | 2022.08.29 |
| ML) 선형회귀 ( Linear Regression ) (0) | 2022.08.25 |