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 |