Linear 모델을 활용하여 집값을 예측해보자!
Linear 모델을 활용하여 집값을 예측해보자!
# 데이터 불러오기
data = pd.read_csv('./data/melb_data(price).csv')
data.head()
결측치 확인
data.isnull().sum().sort_values(ascending=True)
data['Car'].isnull().sum()
상관관계 확인
data.corr(numeric_only=True)['Car'].abs().sort_values(ascending=True)
결측치 채우기
# 1. 피못테이블 만들기
pt = data.pivot_table(values = 'Car',
aggfunc = 'mean',
index = ['Rooms','Type'])
# 2. 채우기
def getCar(data):
if pd.isnull(data['Car']):
return pt.loc[(data['Rooms'], data['Type']), 'Car']
else:
return data['Car']
data['Car'] = data.apply(getCar, axis=1)
# 정답 데이터에 영향을 많이 미치는 컬럼 선택
feature_name =['Rooms', 'Type', 'Distance', 'Bedroom2', 'Bathroom', 'Car', 'Lattitude', 'Longtitude']
X = data[feature_name]
y = data['Price']
X_onehot = pd.get_dummies(X)
# train / test 분리
from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X_onehot, y, train_size=0.7, random_state=42) # 회귀라서 stratify X
from sklearn.linear_model import LinearRegression
lr_model = LinearRegression()
lr_model.fit(X_train, y_train)
from sklearn.linear_model import SGDRegressor
sgd_model = SGDRegressor()
sgd_model.fit(X_train, y_train)
# 선형 모델의 파라미터(W,b) 확인
# y = wx + b
# y = w1x1 + w2x2 + ... + w10x10 + b <- 입력 특성의 개수만큼 나옴!
w = lr_model.coef_
b = lr_model.intercept_
print(w,b)
# mse
mse_sgd = mean_squared_error(y_test, pred)
# rmse
rmse_sgd = root_mean_squared_error(y_test, pred)
# mae
mae_sgd = mean_absolute_error(y_test, pred)
# r2score
r2score_sgd = sgd_model.score(X_test, y_test)
X_train.columns
float_cols = ['Rooms', 'Distance', 'Bedroom2', 'Bathroom', 'Car', 'Lattitude', 'Longtitude']
X_train[float_cols] = sc.fit_transform(X_train[float_cols])
X_test[float_cols] = sc.transform(X_test[float_cols])sgd_model_scaling = SGDRegressor(eta0=0.001, max_iter=5000)
sgd_model_scaling.fit(X_train, y_train)