본문 바로가기

Programming/Machine Learning

보스턴주택 값 예측

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from sklearn.datasets import load_boston  # 보스턴 주택값 데이터셋

boston = load_boston()

boston.keys()

print(boston.data)

print(boston.target)

print(boston.feature_names)

print(boston.DESCR)

 

- CRIM: 범죄 발생율
- INDUS: 비상업지역 면적 비율
- NOX: 일산화질소 농도
- RM: 주택당 방 수
- LSTAT: 인구 중 하위 계층 비율
-B: 인구 중 흑인 비율
- PTRATIO: 학생/교사 비율
- ZN: 25,000 평방피트를 초과 거주지역 비율
- CHAS: 찰스강의 경계에 위치한 경우는 1, 아니면 0
- AGE: 1940년 이전에 건축된 주택의 비율
- RAD: 고속도로까지 접근 용이도
- DIS: 5개 주요 직업센터까지의 가중거리
- TAX: 10000 달러당 재산세율

print(boston.filename) 

boston_df = pd.DataFrame(boston.data, columns=boston.feature_names) 
boston_df.head() 

house_price = boston.target

 

train, test로 분리

- 데이터를 평가하기 위해 70%의 데이만 가지고 학습하고 30%를 아껴뒀다가 마지막에 평가한다.

from sklearn.model_selection import train_test_split

X_train, X_test, y_train, y_test = train_test_split(boston_df, house_price, test_size=0.3)

boston_copy = X_train.copy()  # 상관관계를 복사본을 만들어서 파악한다.
boston_copy['PRICE'] = y_train

boston_copy.corr()

from sklearn.linear_model import LinearRegression
from sklearn.model_selection import cross_val_score

linear_model = LinearRegression()

linear_model.fit(X_train, y_train)

linear_model.score(X_test, y_test) # R square

result = cross_val_score(linear_model, X_train, y_train, cv=5)
result

result.mean()

 

특성 확장

extended_X_train = X_train.copy()

for col1 in X_train.columns:  # 13 번 반복
    for col2 in X_train.columns:  # 13 번 반복
        extended_X_train[col1+'x'+'col2'] = X_train[col1] * X_train[col2]
        
extended_X_train.head()

linear_model2= LinearRegression()
linear_model2.fit(extended_X_train, y_train)

result2 =  cross_val_score(linear_model2, extended_X_train, y_train, cv=5)
result2

extended_X_test = X_test.copy()

for col1 in X_test.columns:  # 13 번 반복
    for col2 in X_test.columns:  # 13 번 반복
        extended_X_test[col1+'x'+'col2'] = X_test[col1] * X_test[col2]
        
linear_model2.score(extended_X_test, y_test)

 

Ridge

from sklearn.linear_model import Ridge

ridge_model = Ridge()

ridge_model.fit(extended_X_train, y_train)

ridge_model.score(extended_X_test, y_test)

result3 = cross_val_score(ridge_model, extended_X_train, y_train, cv=5)
result3.mean()

 

Ridge vs Lasso

from sklearn.linear_model import Lasso

alpha_list = [0.001, 0.01, 0.1, 10, 100, 100]
# 규제 정도를 얼만큼 줄 것 인지 parameter
# 0은 규제하지 않아 linear model과 같음

ridge_coef_list =[]
lasso_coef_list = []

for a in alpha_list:
    r_model = Ridge(alpha = a)
    l_model = Lasso(alpha = a)
    r_model.fit(X_train, y_train)
    l_model.fit(X_train, y_train)
    ridge_coef_list.append(r_model.coef_)
    lasso_coef_list.append(l_model.coef_)
    
rid_df = pd.DataFrame(np.array(ridge_coef_list).T, columns = alpha_list)
# .T는 행과 열을 바꿈
# 0으로는 수렴하지 않아 전체 특성을 사용 : ridge
rid_df

lasso_df = pd.DataFrame(np.array(lasso_coef_list).T, columns = alpha_list)
# 0으로 수렴 (관계없는 컬럼을 0으로 가중치를 두게 함)
# 관계없는 특성을 제외한다. : lasso
lasso_df

'Programming > Machine Learning' 카테고리의 다른 글

Titanic데이터활용_DecisionTree_Ensemble  (0) 2020.02.17
손글씨 분류 실습  (0) 2020.02.17
Linear Model - Regression  (0) 2020.02.17
타이타닉 생존자 예측 분석  (0) 2020.02.17
버섯데이터 분류  (0) 2020.02.17