본문 바로가기

카테고리 없음

[패스트캠퍼스 수강 후기] 데이터분석 인강 100% 환급 챌린지 43회차 미션

[패스트캠퍼스 수강 후기] 데이터분석 인강 100% 환급 챌린지 43회차 미션

04. ch 01. EDA & 회귀 분석 - 03. 지도 학습과 회귀 분석 - 05. ch 01. EDA & 회귀 분석 - 04. Linear Regression을 이용한 수치

04. ch 01. EDA & 회귀 분석 - 03. 지도 학습과 회귀 분석

회귀 분석
설명 변수와 종속 변수간의 인과관계를 찾아내는 것

함수를 데이터에 맞추는 과정 (모델 학습 과정)
OLS (Ordinary Least Square)
vs MLE

모델 학습 과정 OLS (Ordinary Least Square)
제곱(Square)을 가장 작은(Least) 상태로 추정하는 것.
=
오차들의 제곱을 최소화 하는 것

그래디언트 디센트(Grandient Descent) (고급모델)
학습을 반복할때마다 줄어드는 오차를 반영하여 m과 b를 조금씩 근사시키는 방법

모델 평가 방법
결정계수(R-squared) - 데이터의 점들을 얼마나 잘 설명하고 있는가
F통계량

T-test 두 집단간의 차이.
유의도 얼마나 믿을 수 있느냐.

w가 0인지 아닌지에 대한 검정

F 통계량

0.001보다 현저하게 낮다. 유의미

다중 공선성
변수간의 강한 상관관계가 발생한 경우

회귀분석은 변수들간의 독립성이 보장되어야 함.


05. ch 01. EDA & 회귀 분석 - 04. Linear Regression을 이용한 수치

3-1) 데이터 전처리

피처 표준화
피쳐간 단위를 맞춰줘야함.


from sklearn.preprocessing import StandardScaler

scaler = StandardScaler()
scale_columns = ['CRIM', 'ZN', 'INDUS', 'CHAS', 'NOX', 'RM', 'AGE', 'DIS', 'RAD', 'TAX', 'PTRATIO', 'B', 'LSTAT']
df[scale_columns] = scaler.fit_transform(df[scale_columns])

df.head()

데이터셋 분리

from sklearn.model_selection import train_test_split
x = df[scale_columns]
y = df['CMEDV']
x_train, x_test, y_train, y_test = train_test_split(x, y, test_size=0.2, random_state=33)

x_train 학습 문제집 학습만.
x_test 테스트 수능, 모의고사 추론만을 위한 것. 평가만

random_state 시드 번호를 주는 것. 결과 같게 나오기 위해



x_train.shape


3-2) 회귀 분석 모델 학습

from sklearn import linear_model
from sklearn.metrics import mean_squared_error
from math import sqrt


lr = linear_model.LinearRegression()
model = lr.fit(x_train, y_train) 문제집, 정답 넣어준 것.

print(lr.coef_) w, b가 궁금할 때 확인


plt.rcParams['figure.figsize'] = [12, 16]

coefs = lr.coef_.tolist()
coefs_series = pd.Series(coefs)


x_labels=scale_columns
ax = coefs_series.plot.barh()
ax.set_title('feature coef graph')
ax.set_xlabel('coef')
ax.set_ylabel('x_features')
ax.set_yticklabels(x_labels)
plt.show()

그래프

3-3) 학습 결과 해석

R2 score, RMSE score 계산

print(model.score(x_train, y_train))
75점 정도가 나왔다.


print(model.score(x_test, y_test))
실제 수능은 70점

피처 유의성 검정

y_predictions = lr.predict(x_train)
print(sqrt(mean_squared_error(y_train, y_predictions)))

루트. 문제집을 풀었을 때 학생이 낸 결과와 실제 결과

y_predictions = lr.predict(x_test)
print(sqrt(mean_squared_error(y_test, y_predictions)))


피처 유의성 검정


import statsmodels.api as sm
x_train = sm.add_constant(x_train)
model = sm.OLS(y_train, x_train).fit()
model.summary()



다중 공선성


from statsmodels.stats.outliers_influence import variance_inflation_factor

vif = pd.DataFrame()
vif["VIF Factor"] = [variance_inflation_factor(x_train.values, 1) for i in range(x_train.shape[1])]

vif.head()


vif["feature"] = x_train.columns
vif.round(1)



패스트캠퍼스 데이터분석 강의 링크
bit.ly/3imy2uN