一. 数据观察
又是一道Kaggle的经典题目。首先观察一下数据:
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
from sklearn import ensemble, tree, linear_model
from sklearn.ensemble import RandomForestRegressor
%matplotlib inline
train_data = pd.read_csv('train.csv')
test_data = pd.read_csv('test.csv')
train_data.shape,test_data.shape
训练集中共有1460个样本以及81个特征,而测试集中有1459个样本80个特征(因为SalePrices是需要预测的)。
首先我们将测试集中的房价单独提取出来,作为一会儿模型训练中的因变量:
train_y = train_data.pop('SalePrice')
y_plot = sns.distplot(train_y)
顺便看一看y的分布曲线:
很明显,数据是右斜的,为了使数据的呈现方式接近我们所希望的前提假设,从而更好的进行统计推断,将数据log化,得到:
train_y = np.log(train_y)
y_plot = sns.distplot(train_y)
此时因变量基本呈正态分布。
由于特征实在太多,我们选用其中几个对房价进行观察
1.YearBuilt和SalePrice的关系
var = 'YearBuilt'
data = pd.concat([train_y_skewed, train_data[var]], axis=1)
f, ax = plt.subplots(figsize=(16, 8))
fig = sns.boxplot(x=var, y="SalePrice", data=data)
fig.axis(ymin=0, ymax=800000);plt.xticks(rotation=90);
可以