- 题目描述:依据一个房子的全方位信息,包括面积,地段,环境,等等预测出房子的价格
题目详情 - 题目解答:
首先进行数据的预处理;
#数据的读取
import numpy as np
import pandas as pd
#一般来说源数据的index那一栏没什么用,我们可以用来作为我们pandas dataframe的index。这样之后要是检索起来也省事儿。
train_df = pd.read_csv('../input/train.csv', index_col=0)
test_df = pd.read_csv('../input/test.csv', index_col=0)
train_df.head()
结合数据描述以及以上输出结果可以大致得出哪些数据需要人为处理一下,题目分别给出了训练集和测试集,这里我们为了方便统一处理,先将二者数据合并,等所有的需要的预处理进行完之后,我们再把他们分隔开。需注意的是SalePrice作为我们的训练目标,只会出现在训练集中,不会在测试集中(要不然你测试什么?)。所以,我们先把SalePrice这一列给拿出来,不让它碍事儿。
prices = pd.DataFrame({
"price":train_df["SalePrice"], "log(price + 1)":np.log1p(train_df["SalePrice"])})
prices.hist()
可见,price本身并不平滑。为了我们分类器的学习更加准确,我们会首先把price给“平滑化”(正态化)这里我们使用log1p, 也就是 log(x+1),避免了复值的问题。
如果我们这里把数据都给平滑化了,那么最后算结果的时候,要记得把预测到的平滑数据给变回去。
#将训练目标单独拿出
#y_train则是SalePrice那一列
y_train = np.log1p(train_df.pop('SalePrice'))
#把剩下的部分合并起来
all_df = pd.concat((train_df, test_df), axis=0)
all_df.shape
y_train.head()
下面进行变量转化,把不方便处理或不一致的数据给统一了,首先,我们注意到,MSSubClass 的值其实应该是一个分类型的,但是Pandas是不会懂这些事儿的。使用时,这类数字符号会被默认记成数字。我们需要把它变回成string
all_df['MSSubClass'].dtypes
all_df[