本文翻译自kaggle learn,也就是kaggle官方最快入门kaggle竞赛的教程,强调python编程实践和数学思想(而没有涉及数学细节),笔者在不影响算法和程序理解的基础上删除了一些不必要的废话,毕竟英文有的时候比较啰嗦。

一.决策树算法基本原理

背景:假设你的哥哥是一个投资房地产的大佬,投资地产赚了很多钱,你的哥哥准备和你合作,因为你拥有机器学习的知识可以帮助他预测房价。你去问你的哥哥他是如何预测房价的,他告诉你说他完全是依靠直觉,但是你经过调查研究发现他预测房价是根据房价以往的表现来进行预测的,作为一个机器学习编程者,正好也可以以往的房价进行未来房价的预测。机器学习当中有一个决策树的算法,可以用于未来房价的预测,这个模型是这样的,如下所示:

第一行的第一框表示程序的流程图:"如果房子里超过了2个卧室"则执行yes,不是的话则执行“No”,执行yes之后,我们就对它进行预测后的房价是188000刀,执行“no”之后的预测房价则是178000刀,这就是一个简单的决策树。一个条件只有是和否两个分支,但是能不能让这个模型更加合理一点呢?因此我们拟合出了第二个模型,如下图所示:

可以从中看到,除了考虑房子里拥有的房间数量,第二个statement(条件)还考虑到了房子的总面积是多大,接着再根据房间的总面积大小进行预测。得到预测的房价也就是prediccted price,我们将其命名为:“leaf”,中文也就是树叶的意思。这就是决策树算法的基本原理了!如果你想深挖其中的数学原理的话,我们将会在后面的章节当中讲解到。

二.使用Pandas来处理你的数据

pandas是Python程序里面的一个包,常常用于数据缺失值的处理和数据的清理,也用于导入数据。我们在Python当中导入这个包的代码如下:

import pandas as pd

在pandas当中最重要的部分就是DataFrame这个数据结构,这个数据结构将你导入的数据全部变成一张表的形式,学习过R语言的同学应该很清楚这是什么,没有学过的话你就把它当成一个类似EXCEL表格的东西就可以了,我们可以用pandas像EXCEL表格一样来处理数据。你使用pandas也是主要是使用DataFrame这个数据结构。假设你想要导入墨尔本的房价CSV数据到pandas当中,这个CSV文件的路径如下所示:

../input/melbourne-housing-snapshot/melb_data.csv

我们导入数据到pandas当中的代码如下:

# save filepath to variable for easier access
melbourne_file_path = '../input/melbourne-housing-snapshot/melb_data.csv'
# read the data and store data in DataFrame titled melbourne_data
melbourne_data = pd.read_csv(melbourne_file_path)
# print a summary of the data in Melbourne data
melbourne_data.describe()

输出:

可以看到我们利用describe()函数将数据的各个属性输出得完完整整,包括数据出现的次数,平均值mean,标准差std,最小值min,最大值max,四分位数25%,75%。以及中位数50%。

三.为决策树模型选择数据

在一个数据集当中有大量的变量,如何才能够简化这些数据,让我们该选择哪些变量呢?

在这里我们暂时依靠直觉来选择变量,在我们后面的章节当中将会介绍统计学里的方法来选择这些变量。为了在pandas里面选择这些变量,我们需要选择一列一列的数据,而不是一行一行的数据,因为每一列代表一个不同的变量,比如price,rooms等,刚刚才已经使用descibe函数对这些变量进行展示了。我们来看看刚刚导入的墨尔本房产房产的数据一共有哪些变量,代码如下所示:

import pandas as pd

melbourne_file_path = '../input/melbourne-housing-snapshot/melb_data.csv'
melbourne_data = pd.read_csv(melbourne_file_path)
melbourne_data.columns

输出:

Index(['Suburb', 'Address', 'Rooms', 'Type', 'Price', 'Method', 'SellerG',
'Date', 'Distance', 'Postcode', 'Bedroom2', 'Bathroom', 'Car',
'Landsize', 'BuildingArea', 'YearBuilt', 'CouncilArea', 'Lattitude',
'Longtitude', 'Regionname', 'Propertycount'],
dtype='object')

在这个墨尔本房产数据集当中,有些数据已经缺失了,我们会在后面的章节当中介绍如何处理缺失数据,也就是进行数据的清理,现在我们进行下一步:

四.选择要进行预测的目标数据

很显然我们需要预测的是房价,在pandas当中,一个单列储存在一个数据结构:“Series”当中,就类似于DataFrame只有一列一样。我们将需要预测的变量命名为y,并将数据集里面的价格赋值给它,代码如下所示:

y = melbourne_data.Price

五.选择特征进行预测价格

我们仅选取几个特征进行数据的预测,代码如下:

melbourne_features = ['Rooms', 'Bathroom', 'Landsize', 'Lattitude', 'Longtitude']

在传统情况下,通常将这些数据命名为X,因为需要预测的值才是y,这样和统计学当中的x和y正好相对应,命名为x的代码如下:

X = melbourne_data[melbourne_features]

现在让我们用之前的describe()方法快速审计一下这些数据大概长什么样:

X.describe()

输出:

用head方法来查看前6行数据,和R语言的语法一模一样:

X.head()

输出:

六.拟合决策树模型

终于,数据准备完毕,我们来到了最激动人心的一步了!拟合决策树模型,在拟合决策树模型当中,我们会用到:scikit-learn 这个Python库,在拟合模型的时候我们需要如下这几步:

1.选择需要的是哪一个算法

2.模型的拟合(fit)

3.模型的预测(predict)

4模型的评估(Evaluate)

下面是我们拟合模型时所用到的代码,首先导包准备数据并选择决策树算法:

from sklearn.tree import DecisionTreeRegressor

# Define model. Specify a number for random_state to ensure same results each run
melbourne_model = DecisionTreeRegressor(random_state=1) # Fit model
melbourne_model.fit(X, y)

输出:

DecisionTreeRegressor(criterion='mse', max_depth=None, max_features=None,
max_leaf_nodes=None, min_impurity_decrease=0.0,
min_impurity_split=None, min_samples_leaf=1,
min_samples_split=2, min_weight_fraction_leaf=0.0,
presort=False, random_state=1, splitter='best')

现在我们的模型已经拟合完毕了,数据也已经全部完成了计算,我们一般情况下会使用除开我们数据集之外的房产的数据来预测房价,但我们这里为了看看模型拟合得是否好,就直接选取X当中的前五行数据,用预测数据和实际数据进行比对,代码如下:

print("Making predictions for the following 5 houses:")
print(X.head())
print("The predictions are")
print(melbourne_model.predict(X.head()))

输出的预测结果如下:

Making predictions for the following 5 houses:
Rooms Bathroom Landsize Lattitude Longtitude
1 2 1.0 156.0 -37.8079 144.9934
2 3 2.0 134.0 -37.8093 144.9944
4 4 1.0 120.0 -37.8072 144.9941
6 3 2.0 245.0 -37.8024 144.9993
7 2 1.0 256.0 -37.8060 144.9954
The predictions are
[1035000. 1465000. 1600000. 1876000. 1636000.]

这就是我们实现的第一个决策树算法模型啦!

Kaggle竞赛入门:决策树算法的Python实现的更多相关文章

  1. Kaggle竞赛入门(二):如何验证机器学习模型

    本文翻译自kaggle learn,也就是kaggle官方最快入门kaggle竞赛的教程,强调python编程实践和数学思想(而没有涉及数学细节),笔者在不影响算法和程序理解的基础上删除了一些不必要的 ...

  2. 决策树算法的Python实现—基于金融场景实操

    决策树是最经常使用的数据挖掘算法,本次分享jacky带你深入浅出,走进决策树的世界 基本概念 决策树(Decision Tree) 它通过对训练样本的学习,并建立分类规则,然后依据分类规则,对新样本数 ...

  3. kaggle竞赛入门整理

    1.Bike Sharing Demand kaggle: https://www.kaggle.com/c/bike-sharing-demand 目的:根据日期.时间.天气.温度等特征,预测自行车 ...

  4. 《Python机器学习及实践:从零开始通往Kaggle竞赛之路》

    <Python 机器学习及实践–从零开始通往kaggle竞赛之路>很基础 主要介绍了Scikit-learn,顺带介绍了pandas.numpy.matplotlib.scipy. 本书代 ...

  5. 如何使用Python在Kaggle竞赛中成为Top15

    如何使用Python在Kaggle竞赛中成为Top15 Kaggle比赛是一个学习数据科学和投资时间的非常的方式,我自己通过Kaggle学习到了很多数据科学的概念和思想,在我学习编程之后的几个月就开始 ...

  6. python机器学习笔记 ID3决策树算法实战

    前面学习了决策树的算法原理,这里继续对代码进行深入学习,并掌握ID3的算法实践过程. ID3算法是一种贪心算法,用来构造决策树,ID3算法起源于概念学习系统(CLS),以信息熵的下降速度为选取测试属性 ...

  7. day-8 python自带库实现ID3决策树算法

    前一天,我们基于sklearn科学库实现了ID3的决策树程序,本文将基于python自带库实现ID3决策树算法. 一.代码涉及基本知识 1. 为了绘图方便,引入了一个第三方treePlotter模块进 ...

  8. 吴裕雄--天生自然python机器学习:决策树算法

    我们经常使用决策树处理分类问题’近来的调查表明决策树也是最经常使用的数据挖掘算法. 它之所以如此流行,一个很重要的原因就是使用者基本上不用了解机器学习算法,也不用深究它 是如何工作的. K-近邻算法可 ...

  9. 《PYTHON机器学习及实践-从零开始通往KAGGLE竞赛之路》 分享下载

    转: <PYTHON机器学习及实践-从零开始通往KAGGLE竞赛之路> 分享下载 书籍信息 书名: PYTHON机器学习及实践-从零开始通往KAGGLE竞赛之路 标签: PYTHON机器学 ...

随机推荐

  1. 随手撸一个简单的带检查的printf

    #include <stdio.h> #include <iostream> #include <vector> #include <string> # ...

  2. css自定义 range radio select的样式滑轮,按钮,选择框

    写在前面: 之前踩坑css的时候,遇到滑轮,按钮,选择框这类型的东西,为了页面效果,总是需要自定义他们的样式,而不使用他们的默认样式.当时写的时候,我也是蛮头疼的,弄了个demo,链接在下面.对此做个 ...

  3. 前端每日实战:132# 视频演示如何用纯 CSS 创作一只思考的手

    效果预览 按下右侧的"点击预览"按钮可以在当前页面预览,点击链接可以全屏预览. https://codepen.io/comehope/pen/WgdVyx/ 可交互视频 此视频是 ...

  4. VueX状态管理器 的应用

    VueX状态管理器 cnpm i vuex axios -S 1 创建Vuex 仓库 import Vue from 'vue' import Vuex from 'vuex' vue.use(Vue ...

  5. Bootstrap4 正式发布

    历经三年开发,前端框架Bootstrap 4正式发布了.然而今天的Web世界已经和当初Mark Otto发布Bootstrap时的情况大为不同,一些开发者由此质疑它的更新是否还有意义 1.V4版本的主 ...

  6. Python——工厂模式

    目录 前言 一.简单工厂 二.工厂方法 抽象工厂 结论 参考 前言 工厂模式,顾名思义就是我们可以通过一个指定的"工厂"获得需要的"产品". 在设计模式中主要用 ...

  7. springmvc 的@ResponseBody 如何使用JSONP?

    JSONP解释 在解释JSONP之前,我们需要了解下”同源策略“这个概念,这对理解跨域有帮助.基于安全的原因,浏览器是存在同源策略机制的,同源策略阻止从一个源加载的文档或脚本获取或设置另一个源加载额文 ...

  8. 使用ZXingObjC扫描二维码横竖屏对应

    /** 根据屏幕的方向设置扫描的方向 * @author maguang * @param parameter * @return result */ - (void)showaCapture { C ...

  9. 基于Ubuntu+Python+Tensorflow+Jupyter notebook搭建深度学习环境

    基于Ubuntu+Python+Tensorflow+Jupyter notebook搭建深度学习环境 前言一.环境准备环境介绍软件下载VMware下安装UbuntuUbuntu下Anaconda的安 ...

  10. C语言程序设计(二) C数据类型

    第二章 C数据类型 八进制整数由数字0开头,后跟0~7的数字序列组成. 十六进制整数由数字0加字母x(或X)开头,后跟0~9,a~f(或A~F)的数字序列组成. 整型常量: 默认的int型定义为有符号 ...