#!/usr/bin/env python3
polynomial analysis with boston house price
1. 실제 데이터로 polynomial 분석
### load library
from sklearn.datasets import load_boston
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import MinMaxScaler, OneHotEncoder, PolynomialFeatures
from sklearn.linear_model import Ridge
from sklearn.ensemble import RandomForestRegressor
### data load
boston = load_boston()
# print(boston.keys())
x_train, x_test, y_train, y_test = \
train_test_split(boston.data, boston.target,
test_size=0.3, random_state=0)
### scale 조정
scaler_mms = MinMaxScaler().fit(x_train) # scaler 호출
x_train_scaled = scaler_mms.transform(x_train) # scaler를 x_train에 적용
x_test_scaled = scaler_mms.transform(x_test) # scaler를 x_test를 적용
### model
randfor = RandomForestRegressor(n_estimators=100, random_state=0, n_jobs=-1) # n_jobs = 코어의 수(-1 : all)
ridge = Ridge()
models = [randfor, ridge]
### model 적용 및 성능 테스트
for degree in range(1, 6):
poly = PolynomialFeatures(degree=degree, include_bias=False).fit(x_train_scaled)# include_bias = True: x_train_scaled 맨 왼쪽에 상수항 추가.
x_train_poly = poly.transform(x_train_scaled)
x_test_poly = poly.transform(x_test_scaled)
print('degree={}'.format(degree))
print('x_train.shape={}'.format(x_train.shape))
print('x_train_poly.shape={}\n'.format(x_train_poly.shape))
print('원래 특성과 polynomial 한 특성의 수 \n==> origin:{}, poly:{}\n'.format(
boston.data.shape[1], len(poly.get_feature_names())))
for model in models:
conf = model.fit(x_train_scaled, y_train)
print('교차항이 없을 때 {} 점수: {:.3f}'.format(
model.__class__.__name__, model.score(x_test_scaled, y_test))) # __class__.__name__ : class이름 호출
conf = model.fit(x_train_poly, y_train)
print('degree={}, 교차항이 있을 때 {} 점수{:.3f}\n'.format(
degree, model.__class__.__name__, model.score(x_test_poly, y_test)))
ptrint('----------------------------------------------')
모델 성능 테스트 평가의 일부분
교차항이 있을 때 Ridge모델은 성능이 상승하지만
복잡한 모델인 RandomForestRegressor경우에는 정확도가 큰차이가 나지 않음
degree=3의 경우
중복조합을 이용
원래 특성 13개 + x0 ~ x12 중 중복을 허락하여 2개를 조합(91개) + x0 ~ x12 중 중복을 허락하여 3개를 조합(455개)를 다합친 559개가 특성으로 사용됨
'데이터 표현과 특성 > interaction과 polynomial' 카테고리의 다른 글
interaction과 polynomial (0) | 2018.03.28 |
---|