机器学习实战(2)之预测房价

这一篇主要是系统地对数据进行机器学习前的预处理。

# -*- coding: utf-8 -*-
"""
Created on Sun Oct 21 14:37:15 2018

@author: Administrator
"""

% reset -f
% clear

# In[*]
##########第一步  导入包
# In[*]
from sklearn.model_selection import cross_val_score
from sklearn import linear_model
from sklearn import metrics
import matplotlib.pyplot as plt
import pandas as pd
import matplotlib
import numpy as np
import seaborn as sns
import os
from scipy.stats import skew
from scipy.stats.stats import pearsonr
os.chdir("C:\\Users\\Administrator\\Desktop\\all")

# In[*]
##########第二步  导入数据
# In[*]
train = pd.read_csv('train.csv',header = 0,index_col=0)
test  = pd.read_csv('test.csv',header = 0,index_col=0)

all_data = pd.concat((train.loc[:,'MSSubClass':'SaleCondition'],
                      test.loc[:,'MSSubClass':'SaleCondition']))

前两步,导入包和数据。

数据大概80列,3000个观测值,属性包括有数字列,同时也有字符串列。

# In[*]
# 第三步,将目标变量标准化

matplotlib.rcParams['figure.figsize'] = (12.0, 6.0)
prices = pd.DataFrame({"price":train["SalePrice"],
                       "log(price + 1)":np.log1p(train["SalePrice"])})
prices.hist()

#log transform the target:
# In[*]
# 第四步,将预测变量标准化
train["SalePrice"] = np.log1p(train["SalePrice"])

#log transform skewed numeric features:
numeric_feats = all_data.dtypes[all_data.dtypes != "object"].index

skewed_feats = train[numeric_feats].apply(lambda x: skew(x.dropna())) 

skewed_feats = skewed_feats[skewed_feats > 0.75]
skewed_feats = skewed_feats.index
all_data[skewed_feats] = np.log1p(all_data[skewed_feats])

这一步主要目的是将数字类型的属性,将这些特征其中比较偏,不属于正态分布的特征做log标准化。

# In[*]
# 第五步,处理字符型变量以及将填充缺失值
# In[*]
all_data = pd.get_dummies(all_data)
all_data = all_data.fillna(all_data.mean())
# In[*]
# 第六步,划分训练集和测试集
# In[*]
#creating matrices for sklearn:
X_train = all_data[:train.shape[0]]
X_test = all_data[train.shape[0]:]
y = train.SalePrice

数据预处理要点: 1.使用log(x+1)来转换偏斜的数字特征 -,这将使我们的数据更加正常 2.为分类要素创建虚拟变量 3.将数字缺失值(NaN)替换为各自列的平均值

全部代码:

# -*- coding: utf-8 -*-
"""
Created on Sun Oct 21 14:37:15 2018

@author: Administrator
"""

% reset -f
% clear

# In[*]
##########第一步  导入包
# In[*]
from sklearn.model_selection import cross_val_score
from sklearn import linear_model
from sklearn import metrics
import matplotlib.pyplot as plt
import pandas as pd
import matplotlib
import numpy as np
import seaborn as sns
import os
from scipy.stats import skew
from scipy.stats.stats import pearsonr
os.chdir("C:\\Users\\Administrator\\Desktop\\all")

# In[*]
##########第二步  导入数据
# In[*]
train = pd.read_csv('train.csv',header = 0,index_col=0)
test  = pd.read_csv('test.csv',header = 0,index_col=0)

all_data = pd.concat((train.loc[:,'MSSubClass':'SaleCondition'],
                      test.loc[:,'MSSubClass':'SaleCondition']))
# In[*]

#Data preprocessing:

#We're not going to do anything fancy here:

#First I'll transform the skewed numeric features by taking log(feature + 1) - 
#this will make the features more normal
#Create Dummy variables for the categorical features
#Replace the numeric missing values (NaN's) with the mean of their respective columns

# In[*]
# 第三步,将目标变量标准化
# In[*]
matplotlib.rcParams['figure.figsize'] = (12.0, 6.0)
prices = pd.DataFrame({"price":train["SalePrice"],
                       "log(price + 1)":np.log1p(train["SalePrice"])})
prices.hist()

#log transform the target:
# In[*]
# 第四步,将预测变量标准化
# In[*]
train["SalePrice"] = np.log1p(train["SalePrice"])

#log transform skewed numeric features:
numeric_feats = all_data.dtypes[all_data.dtypes != "object"].index

skewed_feats = train[numeric_feats].apply(lambda x: skew(x.dropna())) 

skewed_feats = skewed_feats[skewed_feats > 0.75]


skewed_feats = skewed_feats.index
all_data[skewed_feats] = np.log1p(all_data[skewed_feats])

# In[*]
# 第五步,处理字符型变量以及将填充缺失值
# In[*]
all_data = pd.get_dummies(all_data)
all_data = all_data.fillna(all_data.mean())
# In[*]
# 第六步,划分训练集和测试集
# In[*]
#creating matrices for sklearn:
X_train = all_data[:train.shape[0]]
X_test = all_data[train.shape[0]:]
y = train.SalePrice

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏肖蕾的博客

第二章:图形绘制TextureSpriteBatch 类(相当于画笔)为什么要2的N次方?TextureRegion 可用于图片截取。Sprite类清屏

1.纹理(Texture):图片从原始格式,解码并上传到GPU的过程,被称之为纹理。 2.用途:其实就是承装获取到目的图片的容器 3.使用:Gdx.file...

912
来自专栏pydata

html5新特性

1.新的文档类型 2.脚本和链接无需type 3.语义Header和Footer 4.Hgroup 5.标记元素 6.图形元素 7.重新定义 8....

793
来自专栏深度学习之tensorflow实战篇

ggolot2 画ROC曲线

为了进一步了解ggplot2的使用,利用ROC曲线进行说明学习。 ####获取画图数据(data.frame格式)##### library(ggplot2) ...

3476
来自专栏技术博客

Win8 连连看 第二季(1)

思路如下:暂定游戏中图标有100个(10行10列),对每个小图标用用户控件进行展示(好处很多方便绑定数据,链接事件,实现动画效果等)。

812
来自专栏数据科学学习手札

(数据科学学习手札43)Plotly基础内容介绍

  Plotly是一个非常著名且强大的开源数据可视化框架,它通过构建基于浏览器显示的web形式的可交互图表来展示信息,可创建多达数十种精美的图表和地图,本文就将...

4454
来自专栏郭艺帆的专栏

庖丁解牛:GIF

GIF 是一种使用 LZW 压缩,支持多张图像的容器。支持256色,透明通道为1bit。作为互联网表情包的载体,GIF 这项80年代的技术依然生生不息。

2310
来自专栏落影的专栏

OpenGL ES学习阶段性总结

前言 最近观看下面这本书有感,结合之前的学习,对OpenGL的知识进行回顾。 ? 概念 帧缓存:接收渲染结果的缓冲区,为GPU指定存储渲染结果的区域。 ...

4178
来自专栏行者常至

008.python科学计算库seaborn(上)

版权声明:本文为博主原创文章,允许转载,请标明出处。 https://blog.csdn.net/qwdafedv/article/deta...

962
来自专栏游戏杂谈

as3中颜色矩阵滤镜ColorMatrixFilter的使用

上面的例子,也是游戏开发中比较常用的功能,与“怪物”战斗后,将其“灰”掉。这其中最重要的还是对AS3颜色矩阵滤镜(ColorMatrixFilter)的使用。

1623
来自专栏hotqin888的专栏

golang随机抽奖代码

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/hotqin888/article/det...

2722

扫码关注云+社区