결측치 처리
1) 결측치를 적절한 값으로 대체 -> 어떤 값으로 대체할지를 선택해야함
2) NA처리-> 결측값이 많은경우 무시할 수 없음
3) 아무것도 하지 않음
틀린값 처리
1) 모두 버리거나
2) 적절한 값으로 대체
3) 프로그램에 의해 찾아냄
이상치 처리
: 값의 범위가 일반적인 범위를 벗어나 특별한 값을 갖는 것
- 이상치를 찾아내는 것을 이상치 검출 이라고함
데이터 변환
1) 범주형으로 변환 (Binning)
2) 일반 정규화
3) z-score 정규화 (평균을0 표준편차를1)
4) 로그변환 : 수치값에 로그를 취한 값을 사용하는 것 (로그 정규 분포)
5) 역수 변환 : 역수를 사용하면 오히려 선형적인 특성을 가지게 되어 의미를 해석하기 쉬워지는 경우도 있음
6) 데이터 축소
7) 샘플링
8) 훈련용,테스트
표준화 https://soo-jjeong.tistory.com/121
정규화 https://soo-jjeong.tistory.com/122
최소제곱법
1) 평균에 수평선을 긋는다.
2) 평균이 3.5인데, 이것을 b라고 표현한다.
3) y = b = 3.5
4) 제일 아래에 위치한 x1, y1값과 b의 거리를 계산
5) (b - y1) = 잔차
6) (b - y1) + (b - y2) + ... + (b - yn)
: 거리의 합을 구한 것인데, 양수와 음수가 합쳐지다보니 0에 가까워짐 -> 잘못된 방법
So, 모두 제곱하는 방법으로 함.
7) (b - y1)^2 + (b - y2)^2 + ... + (b - yn)^2
8) 선의 기울기를 다르게 하면서 잔차의 값 크기를 확인함.
9) 잔차의 값이 가장 작은 경우가 최소 제곱법에 적합한 값이라고 할 수 있음.
ㄴ 직선의 방정식 y = a*x + b ( a = slope, b = intercept )
10) x축을 옮겨가면서 최적의 값을 찾음
제곱근 구하는 공식 : roots
평균
Mean vs Expectation vs average
Expectation 이 무한히 커지면 Mean과 같게 된다.
Mean과 Average의 차이 : Average는 단순히 다 더해서 나누는 것
Mean은 산술통계, 기하통계, . . 등 통계적으로 말하는 것
편차
편차 : 관측값에서 평균 또는 중앙값을 뺀 값
분산 : 편차의 제곱의 평균
표준편차(standard deviation) : 분산의 제곱근
절대편차(absolute deviation) : 절대값을 취하여 구하는 편차
잔차와 오차
오차 : 하나의 점과 회귀식과의 차이 (모수)
잔차 : 하나의 점과 회귀식의 차이 (sample)
-> 편차 제곱의 합 : Sum of Squares
-> 편차 제곱의 합의 평균 : Sum of Squares/n = Variance
표준 편차 : 왜 이름이 Standard Deviation 인가?
칼 피어슨이 강의에서 standard deviation(표준편차)라는 단어를 사용했다.
그 전에는 mean error(평균편차) 라는 단어를 씀
SST SST SSE
SST (total) = SSR(regression) + SSE (error)
총변동, TSS(Total Sum of Squares) 혹은 SST(Sum of Squares Total)
설명된 변동, 회귀변동, ESS(Explained Sum of Squares) 혹은 SSR(Sum of Squares due to Regression)
설명안된 변동, 오차변동, RSS(Residual Sum of Squares) 혹은 SSE(Sum of squared Error)
분석 모형별 검정
# 데이터 특성 검정
- 상관성 검정 가설 : https://blog.naver.com/istech7/50153288534
- 정규성 검정(Nomality test) : https://rfriend.tistory.com/118
- 등분산성 검정(Homogeneity of Variance test) : https://mansoostat.tistory.com/46
- 독립성 검정(Test of Independence) : https://rfriend.tistory.com/138
- 적합도 검정(Goodness-of-fit test) : https://rfriend.tistory.com/137
- 동질성 검정(Test of Homogeneity) : https://rfriend.tistory.com/139
-> 잔차 분석(회귀분석 모형진단) : 선형성, 등분산성, 독립성, 정규성
- https://mindscale.kr/course/basic-stat-r/residuals
- https://blog.naver.com/shoutjoy/221830887127
1차 함수(Linear function)
- An equation in one unknown, ax=b, is a point in the straight line.
1) 하나를 모르면 점 을 찾는 것
- An equation in two unknowns, ax+by=c, is a line in the plane.
2) 두개를 모르면 선 을 찾는 것
- An equation in three unknowns, ax+by+cz=d, is a plane in the space.
3) 세개를 모르면 공간 에서 면 을 찾는 것
선형 회귀
univariate simple 단변량 단순 선형 회귀 모델
univariate multiple 단변량 다중 선형 회귀 모델
multivariate simple 다변량 단순 선형 회귀 모델 -> glm
multivariate multiple 다변량 다중 선형 회귀 모델 -> glm
General linear model(일반 선형 모델, R에서 lm 함수)
Generalized linear model(일반화 선형 모델, R에서 glm 함수)
글쓴이 : https://www.linkedin.com/in/eun-jo-lee-ba068734
https://brunch.co.kr/@gimmesilver/20 : 통계학이란 무엇인가
https://brunch.co.kr/@gimmesilver/17 : 회귀 모델에서 '회귀'란 무엇인가?
https://brunch.co.kr/@gimmesilver/18 : 선형 회귀 모델에서 '선형'이 의미하는 것은 무엇인가?
https://brunch.co.kr/@gimmesilver/38 : 회귀 모델의 종류와 특징
https://brunch.co.kr/@gimmesilver/64 : 회귀 분석의 이해 #1
https://brunch.co.kr/@gimmesilver/65 : 회귀 분석의 이해 #2
https://brunch.co.kr/@gimmesilver/66 : 회귀 분석의 이해 #3
https://brunch.co.kr/@gimmesilver/29 : 회귀 모델을 이용한 지표 해석 방안
https://brunch.co.kr/@gimmesilver/44 : Overfitting과 Underfitting
https://brunch.co.kr/@gimmesilver/32 : 군집 분석 #1
https://brunch.co.kr/@gimmesilver/39 : 군집 분석 #2
https://brunch.co.kr/@gimmesilver/40 : 군집 분석 #3
선형 회귀 모델에서 선형이란 ?
선형은 1차 다항식을 의미하는 것이 아니다.
선형 회귀 모델은 파라미터가 선형식으로 표현되는 회귀 모델을 의미합니다.
선형회귀
- Ridge
- Lasso
- Elastic Net
- MAE = 평균편차
- MSE = 분산
- RMSE = 표준편차 : scikit-learn은 지원하지 않으므로 np.sqrt(MSE) 해야 함
- R^2
선형 회귀를 이용한 보스턴 주택 가격 예측
------------------------------------------------------------------------
> Least Squares 예제 : LinearRegression을 이용한 보스턴 주택 가격 예측 <
------------------------------------------------------------------------
# 데이터 살펴보기 : https://ai-times.tistory.com/431
import numpy as np
import matplotlib.pyplot as plt
import pandas as pd
import seaborn as sns
from sklearn.datasets import load_boston
# boston 데이타셋 로드
boston = load_boston()
# boston 데이타셋 DataFrame 변환
bostonDF = pd.DataFrame(boston.data , columns = boston.feature_names)
# boston dataset의 target array는 주택 가격임. 이를 PRICE 컬럼으로 DataFrame에 추가함.
bostonDF['PRICE'] = boston.target
print('Boston 데이타셋 크기 :', bostonDF.shape)
bostonDF.head()
# 2개의 행과 4개의 열을 가진 subplots를 이용. axs는 4x2개의 ax를 가짐.
fig, axs = plt.subplots(figsize=(16,8) , ncols=4 , nrows=2) # 8칸짜리 화면을 만듦
lm_features = ['RM','ZN','INDUS','NOX','AGE','PTRATIO','LSTAT','RAD'] # 얘네끼리의 산점도 비교
for i , feature in enumerate(lm_features):
row = int(i/4)
col = i%4
# 시본의 regplot을 이용해 산점도와 선형 회귀 직선을 함께 표현
sns.regplot(x=feature , y='PRICE',data=bostonDF , ax=axs[row][col]) # regplot = 산점도 + 선형 회귀 직선
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LinearRegression
from sklearn.metrics import mean_squared_error , r2_score
y_target = bostonDF['PRICE']
X_data = bostonDF.drop(['PRICE'],axis=1,inplace=False)
X_train , X_test , y_train , y_test = train_test_split(X_data , y_target ,test_size=0.3, random_state=156)
y_true = y_test
# Linear Regression OLS로 학습/예측/평가 수행.
lr = LinearRegression()
lr.fit(X_train ,y_train )
y_preds = lr.predict(X_test)
mse = mean_squared_error(y_true, y_preds) # MSE 구하기
rmse = np.sqrt(mse)
print('MSE : {0:.3f} , RMSE : {1:.3F}'.format(mse , rmse)) # MSE, RMSE 구하기
print('Variance score : {0:.3f}'.format(r2_score(y_true, y_preds)))
print('회귀 계수값:', np.round(lr.coef_, 1))
print('절편 값:',lr.intercept_)
# 회귀 계수를 큰 값 순으로 정렬하기 위해 Series로 생성. index가 컬럼명에 유의
coeff = pd.Series(data=np.round(lr.coef_, 1), index=X_data.columns)
coeff
coeff.sort_values(ascending=False)
from sklearn.model_selection import cross_val_score
y_target = bostonDF['PRICE']
X_data = bostonDF.drop(['PRICE'],axis=1,inplace=False)
lr = LinearRegression()
# cross_val_score( )로 5 Fold 셋으로 MSE 를 구한 뒤 이를 기반으로 다시 RMSE 구함.
neg_mse_scores = cross_val_score(lr, X_data, y_target, scoring="neg_mean_squared_error", cv = 5)
rmse_scores = np.sqrt(-1 * neg_mse_scores)
avg_rmse = np.mean(rmse_scores)
# cross_val_score(scoring="neg_mean_squared_error")로 반환된 값은 모두 음수
print(' 5 folds 의 개별 Negative MSE scores: ', np.round(neg_mse_scores, 2))
print(' 5 folds 의 개별 RMSE scores : ', np.round(rmse_scores, 2))
print(' 5 folds 의 평균 RMSE : {0:.3f} '.format(avg_rmse))
Reaularization
overfitting을 방지하는 것
6가지 방법
1. 더 많은 데이터 수집
데이터가 많을수록 모델의 정확도가 높아지면서 과적합 가능성이 줄어든다.
2. 데이터 증강 및 노이즈
가지고있는 데이터를 변형해서 늘리거나 노이즈를 추가한다.
3. 모델 단순화
모델이 복잡해지면 테스팅 에러가 높아질 수 있음.
그래서 모델을 단순화 시키면 가볍고 빠른 훈련과 실행속도가 가능
4. 조기 종료
100번 순환하라고 했지만, 오버피팅이 시작되는 것을 확인 했을 때 더 커지기전에 종료시키기
5. L1, L2 정규화
L1 = 라쏘 (절대값)
L2 = 릿지 (제곱)
6. Dropout 및 Dropconnect
L2 릿지
빨간 선 : 회귀선
파란 선 : 릿지 선
빨간 점 : 트레이닝데이터
녹색 점 : 테스팅 데이터
회귀 선형 적합하기
만약 관측치가 매우 적은데 회귀식을 찾으면 ???
빨간 점을 트레이닝, 녹색 점을 테스팅이라고 생각하기
빨간점이 Overfitting 된 상태임
릿지로 테스팅 회귀선에 맞지 않는 선을 조정하면서 찾으면 더 좋은 데이터를 얻을 수 있다
람다를 높일수록 패널티가 좁아지고 계수도 작아짐
릿지라쏘 참고영상
https://www.youtube.com/watch?v=pJCcGK5omhE
'인공지능 > 머신러닝' 카테고리의 다른 글
Regularization 관련 유튜브 영상 (0) | 2021.07.11 |
---|---|
사이킷런으로 수행하는 타이타닉 생존자 예측 (0) | 2021.07.08 |
sklearn.model (0) | 2021.07.08 |
Scikit-Learn (0) | 2021.07.08 |
Sclkit - Learn을 이용 군집 (0) | 2021.07.07 |