构建基础baseline
任务名称:构建baseline
任务简介:完成一个基本的baseline提交到kaggle上然后有成绩
详细说明:
本节将会向大家介绍利用python数据清洗和数据预处理以及模型的构建,拟合数据,进行对test数据集进行预测,提交到成绩有排名。会先从理论讲起,再到实际的的一个操作。
数据清洗和数据处理是比赛以及任何一种机器学习模型的必须要经过的过程,而且极为重要,这里只是给大家介绍一下数据清洗的几种常见的知识,包括可以利用pandas和sklearn库来进行,对数据的空值的填充,以及数据归一化,独热编码,标签编码等数据处理方面的问题,以及模型的构建问题,如何进行训练以及这个预测提交的问题。在这个过程中可能有很多同学对于很多知识不是很熟悉,那么就需要自己多多面向谷歌或者组队讨论,出现问题的时候多思考以及多查阅资料。
作业详解:
针对于不同的数据运用pandas和sklearn处理的方式区别是什么?说明模型只能拟合什么样子的数据,为什么数据归一化和不归一化的结果会有差距?提交成绩的截图。
这次从最简单的数据导入到数据清洗、数据处理,再到模型建立,最后提交自己的submission得到名次。可惜自己的模型挂了,提交了老师的模型。
一、导入相应的包
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
import pandas_profiling as ppf
import warnings##忽略警告
warnings.filterwarnings('ignore')
%matplotlib inline
plt.style.use('ggplot')
# 这里需要导入一些包,用来做特征工程的
from sklearn.base import BaseEstimator, TransformerMixin, RegressorMixin, clone
from sklearn.preprocessing import LabelEncoder#标签编码
from sklearn.preprocessing import RobustScaler, StandardScaler#去除异常值与数据标准化
from sklearn.pipeline import Pipeline, make_pipeline#构建管道
from scipy.stats import skew#偏度
from sklearn.preprocessing import Imputer
二、检测源数据
train = pd.read_csv("./data/train.csv")
test = pd.read_csv("./data/test.csv")
train.head()#默认显示前五行
test.head()
三、数据探索性分析 pandas_profiling
ppf.ProfileReport(train)
plt.figure(figsize=(10,8))
sns.boxplot(train.YearBuilt, train.SalePrice)##箱型图是看异常值的,离群点
plt.figure(figsize=(12,6)) # 绘制散点图
plt.scatter(x=train.GrLivArea, y=train.SalePrice)##可以用来观察存在线型的关系
plt.xlabel("GrLivArea", fontsize=13)
plt.ylabel("SalePrice", fontsize=13)
plt.ylim(0,800000)
train.drop(train[(train["GrLivArea"]>4000)&(train["SalePrice"]<300000)].index,inplace=True)#pandas 里面的条件索引
full = pd.concat([train,test],ignore_index=True)
full.drop("Id",axis=1,inplace=True)
full.head()
四、数据清洗–空值填充、空值的删除,不处理
miss = full.isnull().sum()#统计出空值的个数
miss[miss>0].sort_values(ascending=True)#由低到高排好序
full.info()
# 对字符类型的进行填充
cols1 = ["PoolQC" , "MiscFeature", "Alley", "Fence", "FireplaceQu", "GarageQual", "GarageCond", "GarageFinish", "GarageYrBlt", "GarageType", "BsmtExposure", "BsmtCond", "BsmtQual", "BsmtFinType2", "BsmtFinType1", "MasVnrType"]
for col in cols1:
full[col].fillna("None",inplace=True)
# 对数值类型的进行填充
cols=["MasVnrArea", "BsmtUnfSF", "TotalBsmtSF", "GarageCars", "BsmtFinSF2", "BsmtFinSF1", "GarageArea"]
for col in cols:
full[col].fillna(