kaggle比赛-House Prices:baseline-v1

学完机器学习的基本算法之后,想找一个实践的机会。于是就瞄准了kaggle比赛,先从最基本的房价预测开始,这是一个比较简单的比赛。

一、赛题分析

训练集数据是1460x81的数据,其中1460是数据条数,80列是有关房价的特征,1列是房价。

测试集数据是1459x80的数据,其中1459是数据条数,80列是有关房价的特征,没有房价的标签

从数据集的分布来看,标签是一个连续值,这是一个回归的问题。针对回归问题,常见算法有线性回归,Lasso回归,树算法(Xgboost),SVR等等。

二、常见的查看数据集的函数

首先我们来加载数据集

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns


# 导入数据集
train = pd.read_csv('data/train.csv')
test = pd.read_csv('data/test.csv')

首先,利用 train.head()来查看数据

利用,get_dtype_counts()方法查看各个特征的数据类型,可以看到数字类型的特征一共是38个,object类型的特征为43个。不同类型的特征处理的方式是不一样的。数字类型的特征处理缺失值的时候,要用均值,众数或者其他函数关系来填充空值。obejct类型一般用None填充。

接下来用info(),可以看到各个特征的类型,数目等信息,由于数目太大没有放全,用describe()函数查看数值类型的均值和方差等信息。

   

用mean()函数查看均值,median()查看中位数等等。

三、清洗数据

由于机器学习的任务是不断迭代的,所以这里先实现一个最基本的模型。对于缺失值直接暴力填充。

# 将测试集和训练集连接
full = pd.concat([train,test],ignore_index=True)

# 查看缺失值,并将缺失值的特征由大到小排列。
tmp = full.isnull().sum()
tmp[tmp>0].sort_values(ascending=False)

首先填充数字类型的特征,直接按照均值填充

# 对数值类型的填充
full.fillna(full.mean(),inplace=True)

# 查看剩余的缺失值
tmp = train.isnull().sum()
tmp[tmp>0].sort_values(ascending=False)

接下来填充非数值类的值,直接用None填充。

# 对字符类型进行填充 
full.fillna('None',inplace=True)

tmp = full.isnull().sum()
tmp[tmp>0].sort_values(ascending=False)

到目前为止,我们已经暴力的填充完所有的数据了,下面需要对数据集进行一些处理,然后跑模型。

# 去掉Id,SalePrice列
full = full.drop(['Id','SalePrice'],axis=1)

# 变成one-hot编码
full=pd.get_dummies(full).reset_index(drop=True)

四、训练模型

from sklearn.linear_model import LinearRegression
from sklearn.preprocessing import RobustScaler,StandardScaler

# 标准化处理
std = StandardScaler()
full = std.fit_transform(full)

# 引入LinearRegression()模型
model = LinearRegression()


# 将训练集和测试集分开,
n_train = train.shape[0]#行数

#划分数据集
X = full[:n_train]##相当于取出X
y = train.SalePrice#取出训练集的标签
test_x = full[n_train:]#1461行取到最后

# 训练模型
model.fit(X,y)

# 预测
saleprice = model.predict(test_x)

# 产生要提交的csv文件
result=pd.DataFrame({'Id':test.Id, 'SalePrice':saleprice})
result.to_csv("submission1.csv",index=False)

五、结果

果然,第一个模型表现的很弱鸡,最暴力的填充,最简单的模型,最差的分数。没关系,我们慢慢改进,

接下来我尝试了xgboost,一直听说他很屌,究竟有多屌呢。在上面的特征工程不变的情况下,直接调用xgboost函数,排名飞一样的上升。

import xgboost as xgb

xg_reg=xgb.XGBRegressor(objective='reg:linear',colsample_bytree=0.4,learning_rate=0.01,max_depth=8,alpha=10,n_estimators=600,subsample=0.7)

xg_reg.fit(X,y)

pred=xg_reg.predict(test_x)

result=pd.DataFrame({'Id':test.Id, 'SalePrice':pred})
result.to_csv("submission1.csv",index=False)

在暴力填充特征的情况下,就上面的几行代码,请看结果,上升了2294排名。下一篇博客,我们会对特征值进行优化,看看结果如何。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值