01 데이터 불러오기 및 탐색
#데이터 불러오기 : read_csv()
import pandas as pd
data = pd.read_csv('house_raw.csv')
#데이터 살펴보기
data.head()
data.describe()
data.hist(bins=50, figsize=(20,15))
02 선형회귀 적용
① 데이터를 학습용 데이터, 테스트용 데이터로 나누기
#특성데이터셋(X)과 레이블 데이터셋(y)으로 나누기
X = data[data.columns[0:5]]
y = data[['house_value']]
#학습용 데이터(train)과 테스트 데이터(test) 구분을 위한 라이브러리
#sklearn의 model_selection에서 train_test_split
from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test=train_test_split(X, y, random_state=42)
가장 먼저 데이터를 특성데이터셋(X)과 레이블 데이터셋(y)으로 나눴다.
X,y를 각각 7:3정도의 비율로 나누어 학습용(train), 테스트용(test)에 할당해 줄거다.
☞학습용(7의 비율) 데이터 X_train, X_test, 테스트(3의 비율) 데이터 y_train, y_test 변수로 나눠주는 작업이다.
이 작업은 skleartn의 model_selection에서 train_test_split 라이브러리로 해줌
train_test_split에서 random_state 역할
random_state = None으로 설정시, 코드를 실행할 때마다 랜덤으로 설정되는 값이 달라진다.
반대로 random_state = 아무 정수 로 작성하면, 코드를 실행할 때마다 랜덤으로 뽑히는 값이 고정된다.
정수값은 0이든 42든 뭐가 들어가도 상관이 없고, 오로지 None을 넣냐, 정수값을 넣냐에 따라 달라진다고 한다.
교재에서 많고 많은 정수 중 왜 42를 넣었는지 궁금하다면, (링크)에서 확인 가능
②훈련데이터, 테스트 데이터의 단위를 통일(정규화)
예를 들면 'rooms' 변수 범위는 0~5,
'house_value' 변수의 범위는 15,000~500,000이라고 할때
두 변수의 단위가 다르기 때문에 수치도 크게 차이가 난다.
이걸 0~1사이의 범위로 바꿔서 동일한 범위를 갖게 하는 작업을 하는 것이다.
내용 추가 : DATA 전처리는 목적변수인 레이블(y)은 건드리지 않고, 특성치(X)는 전처리 중 정규화를 반드시 진행해야 한다고 한다. 위에 내가 든 예시에서 'house_value'는 레이블(y)로 쓰기 때문에 적절한 예시는 아니다..!
from sklearn.preprocessing import MinMaxScaler
scaler_minmax = MinMaxScaler() #MinMaxScaler 클래스의 인스턴스 생성
scaler_minmax.fit(X_train) #X_train에 피팅하는 과정
X_scale_minmax_train = scaler_minmax.transform(X_train)
X_scale_minmax_test = scaler_minmax.transform(X_test)
③머신러닝의 선형모델(LinearRegression) 적용
from sklearn.linear_model import LinearRegression
model = LinearRegression()
model.fit(X_scaled_minmax_train, y_train)
#train 데이터 결과 0.546(55%)
pred_train=model.predict(X_scaled_minmax_train)
model.score(X_scaled_minmax_train, y_train)
#test 데이터 결과 -2.822(폭망)
pred_test=model.predict(X_scaled_minmax_test)
model.score(X_scaled_minmax_test, y_test)
sklearn의 linear_model에서 LinearRegression을 적용시켜보았다.
train 데이터의 R-square는 0.546으로 준수한 편이지만
test 데이터의 R-square는 -2.8로 절대 나올 수 없는 수치가 나왔다. (R-square의 범위는 0~1)
RAW 데이터에서 이상치 제거하지 않고 선형모델을 적용시켰기 때문에 분석이 잘못된 것이다!
교재에서는 대충 descripe(), hist()로 확인해서 이상치 데이터 제외한 데이터셋 생성하여 다시 분석했음
'자기계발 > Python' 카테고리의 다른 글
[빅데이터분석기사] 06 회귀문제 (0) | 2022.06.16 |
---|---|
[빅데이터분석기사] 05 분류문제 (0) | 2022.06.16 |
[빅데이터분석기사] 03 결측치 처리(제거, 대체) (0) | 2022.06.14 |
[빅데이터분석기사] 02 이상치 처리(log변환, 제곱근변환) (0) | 2022.06.13 |
[빅데이터분석기사] 01 단변량 데이터, 이변량 데이터 탐색 (0) | 2022.06.12 |