决策树算法介绍

决策树(decision tree)是一个树结构(可以是二叉树或非二叉树)。
其每个非叶节点表示一个特征属性上的测试,每个分支代表这个特征属性在某个值域上的输出,而每个叶节点存放一个类别。

使用决策树进行决策的过程就是从根节点开始,测试待分类项中相应的特征属性,并按照其值选择输出分支,直到到达叶子节点,将叶子节点存放的类别作为决策结果。

总结来说:

决策树模型核心是下面几部分:

  • 结点和有向边组成
  • 结点有内部结点和叶结点俩种类型
  • 内部结点表示一个特征,叶节点表示一个类

加载数据集

import numpy as np
import pandas as pd
file = "NBA2014.csv"
data = pd.read_csv(file)
data.iloc[:5]

数据预处理

# Don't read the first row,as it is blank. Parse the date column as a date
data = pd.read_csv(file,parse_dates=[0])
data.columns = ["Date","Start","Visitor Team","VisitorPts","Home Team","HomePts","Score Type","OT?","Attend","Notes"]
data.iloc[:5]
data["Home Win"] = data["VisitorPts"] < data["HomePts"]
y_true = data["Home Win"].values
data.iloc[:5]
print("Home Team Win Percentage: {0:.1f}%".format(np.mean(y_true)*100))
data["HomeLastWin"] = False
data["VisitorLastWin"] = False
data.iloc[:5]
# create a dict to store the team last result
from collections import defaultdict
won_last = defaultdict(int)
for index,row in data.iterrows():home_team = row["Home Team"]visitor_team = row["Visitor Team"]row["HomeLastWin"] = won_last[home_team]row["VisitorLastWin"] = won_last[visitor_team]data.iloc[index] = row# set the current winwon_last[home_team] = row["Home Win"]won_last[visitor_team] = not row["Home Win"]
data.iloc[20:25]

模型建立

from sklearn.tree import DecisionTreeClassifier
from sklearn.cross_validation import cross_val_score
clf = DecisionTreeClassifier(random_state = 14)
# create the dataset
X_win = data[["HomeLastWin","VisitorLastWin"]].values
scores = cross_val_score(clf,X_win,y_true,scoring="accuracy")
print("Accuracy: {0:.1f}%".format(np.mean(scores)*100))

引入新的特征:赛季排名

import chardet
file = "NBA2013_expanded-standings.csv"
with open(file, 'rb') as f:print(f)result = chardet.detect(f.read())  # or readline if the file is large standings = pd.read_csv(file,skiprows=[0],encoding=result['encoding'])
# create a new feature:HomeTeamRankHigher
data["HomeTeamRankHigher"] = 0
for index,row in data.iterrows():home_team = row["Home Team"]visitor_team = row["Visitor Team"]if home_team == "New Orleans Pelicans":home_team = "New Orleans Hornets"elif visitor_team == "New Orleans Pelicans":visitor_team = "New Orleans Hornets"home_rank = standings[standings["Team"] == home_team]['Rk'].values[0]visitor_rank = standings[standings["Team"] == visitor_team]["Rk"].values[0]row["HomeTeamRankHigher"] = int(home_rank > visitor_rank)data.iloc[index] = row
data.iloc[:5]# create the train set
X_homehigher = data[["HomeLastWin","VisitorLastWin","HomeTeamRankHigher"]].values
clf = DecisionTreeClassifier(random_state=14)
scores = cross_val_score(clf,X_homehigher,y_true,scoring = "accuracy")
print("Accuracy: {0:.1f}%".format(np.mean(scores)*100))
# who won the last match
last_match_winer = defaultdict(int)
data["HomeTeamWonLast"] = 0for index,row in data.iterrows():home_team = row["Home Team"]visitor_team = row["Visitor Team"]#sort the team namesteams = tuple(sorted([home_team,visitor_team]))# who won the last gamerow["HomeTeamWonLast"] = 1 if last_match_winer == row["Home Team"] else 0data.iloc[index] = rowwinner = row["Home Team"] if row["Home Win"] else row["Visitor Team"]last_match_winer = winner
data.iloc[:5]# create the dataset
X_lastwinner = data[["HomeTeamRankHigher","HomeTeamWonLast"]].values
clf = DecisionTreeClassifier(random_state=14)
scores = cross_val_score(clf,X_lastwinner,y_true,scoring="accuracy")
print("Accuracy: {0:.1f}%".format(np.mean(scores)*100))
# convert the string names to into integers
from sklearn.preprocessing import LabelEncoder
encoding = LabelEncoder()
encoding.fit(data["Home Team"].values)home_teams = encoding.transform(data["Home Team"].values)
visitor_teams = encoding.transform(data["Visitor Team"].values)
X_teams = np.vstack([home_teams,visitor_teams]).T
# encode these integers into a number if binary features
from sklearn.preprocessing import OneHotEncoder
onehot = OneHotEncoder()
X_teams_expanded = onehot.fit_transform(X_teams).todense()clf = DecisionTreeClassifier(random_state=14)
scores = cross_val_score(clf,X_teams_expanded,y_true,scoring="accuracy")
print("Accuracy: {0:.1f}%".format(np.mean(scores)*100))

新模型:随机森林

# use random_forest
from sklearn.ensemble import RandomForestClassifier
clf = RandomForestClassifier(random_state=14)
scores = cross_val_score(clf,X_teams_expanded,y_true,scoring='accuracy')
print("Accuracy: {0:.1f}%".format(np.mean(scores)*100))
X_all = np.hstack([X_lastwinner,X_teams_expanded])
print("X_all shape: {0}".format(X_all.shape))
clf = RandomForestClassifier(random_state=14)
scores = cross_val_score(clf,X_all,y_true,scoring='accuracy')
print("Accuracy: {0:.1f}%".format(np.mean(scores)*100))
from sklearn.grid_search import GridSearchCV
#n_estimators=10, criterion='gini', max_depth=None,
#min_samples_split=2, min_samples_leaf=1,
#max_features='auto',
#max_leaf_nodes=None, bootstrap=True,
#oob_score=False, n_jobs=1,
#random_state=None, verbose=0, min_density=None, compute_importances=None
parameter_space = {"max_features": [2,10,'auto'],"n_estimators": [100,],"criterion": ["gini","entropy"],"min_samples_leaf": [2,4,6],
}
clf = RandomForestClassifier(random_state=14)
grid = GridSearchCV(clf,parameter_space)
grid.fit(X_all,y_true)
print("Accuracy: {0:.1f}%".format(grid.best_score_ *100))

决策树算法预测NBA赛事结果相关推荐

  1. 【实用算法教学】——教你使用决策树算法预测NBA获胜球队

    本文介绍一种分类算法--决策树,用它预测NBA篮球赛的获胜球队.比起其他算法,决 策树有很多优点,其中最主要的一个优点是决策过程是机器和人都能看懂的,我们使用机器学习 到的模型就能完成预测任务.正如我 ...

  2. Python中应用决策树算法预测客户等级

    ​机器学习越来越多地在企业应用,本文跟大家分享一个采用python,应用决策树算法对跨国食品超市顾客等级进行预测的具体案例.如果想先行了解决策树算法原理,可以阅读文章决策树-ID3算法和C4.5算法. ...

  3. 使用决策树算法预测西瓜的好坏

    文章目录 1.决策树简介 2.西瓜数据集的ID3算法实现 2.1.ID3算法简介 2.2.建立决策树 2.2.1.步骤 2.2.2.代码实现 3.西瓜数据集的C4.5算法实现 3.1.C4.5算法简介 ...

  4. 5-2 决策树算法预测销量高低代码

    #-*- coding: utf-8 -*- import pandas as pdinputfile = '../data/sales_data.xls' data = pd.read_excel( ...

  5. scikit-learn决策树算法(鸢尾花数据集、餐饮饭店销量)

    文章目录 实验三.scikit-learn决策树算法 一.实验目的 1. 熟悉掌握决策树的原理 2. 使用scikit-learn库中的对应函数实现决策树分类. 二.能力图谱 三.实验工具 1. An ...

  6. 浅谈决策树算法以及matlab实现ID3算法

    决策树方法在分类.预测.规则提取等领域有着广泛的应用.在20世纪70年代后期和80年代初期,机器学习研究者J.Ross Quinilan提出了ID3算法以后,决策树在机器学习.数据挖掘领域得到极大的发 ...

  7. 【机器学习入门】(5) 决策树算法实战:sklearn实现决策树,实例应用(沉船幸存者预测)附python完整代码及数据集

    各位同学好,今天和大家分享一下python机器学习中的决策树算法,在上一节中我介绍了决策树算法的基本原理,这一节,我将通过实例应用带大家进一步认识这个算法.文末有完整代码和数据集,需要的自取.那我们开 ...

  8. ML之DT:基于DT决策树算法(交叉验证FS+for遍历最佳FS)对Titanic(泰坦尼克号)数据集进行二分类预测

    ML之DT:基于DT决策树算法(交叉验证FS+for遍历最佳FS)对Titanic(泰坦尼克号)数据集进行二分类预测 目录 输出结果 设计思路 核心代码 输出结果 设计思路 核心代码 fs = fea ...

  9. ML之DT:基于DT决策树算法(对比是否经特征筛选FS处理)对Titanic(泰坦尼克号)数据集进行二分类预测

    ML之DT:基于DT决策树算法(对比是否经特征筛选FS处理)对Titanic(泰坦尼克号)数据集进行二分类预测 目录 输出结果 设计思路 核心代码 输出结果 初步处理后的 X_train: (984, ...

最新文章

  1. Python入门难吗?30年前的编程语言,为什么现在这么火?
  2. htmlparser设置表单属性值
  3. 程序员如何让自己的工作更上一个台阶
  4. 【译】深入理解LSTM网络
  5. keras冻结_[开发技巧]·keras如何冻结网络层
  6. 设计模式——单例模式(懒汉模式,饿汉模式)
  7. Direct2D (19) : 图层之 TD2D1LayerParameters.geometricMask (使用几何图形剪裁图层)
  8. 开源 java CMS - FreeCMS2.6 Web页面信息采集
  9. php cdi_集成CDI和WebSockets
  10. Apache Spark中实现的MapReduce设计模式
  11. centos7装单机hadoop2.7.3
  12. 【今日CS 视觉论文速览】Wed, 12 Dec 2018
  13. 完成课件中的动手动脑的或需要验证的相关内容。
  14. Mac上将Lightroom目录导入Capture One的详细步骤
  15. 牛客练习赛10 B栈和排序【思维】
  16. 当图片被压缩时,图片变得模糊
  17. 精品课 - Python 基础
  18. 算法题_位运算_9_出现一次的数字和出现k次的数字
  19. 输出以个小于1万亿的正整数的拼音读法
  20. 数据库的设计规范:第一范式、第二范式、第三范式、巴斯范式

热门文章

  1. 绝地求生国际服请求超时服务器未响应,绝地求生connection timeout 3.6.7解决方法/游戏连接超时怎么办...
  2. 如何借助psacct或acct工具监视用户活动
  3. Android 开发文档doc下载 ,怎么找到它
  4. Windows 12 网页版HTML源码
  5. JavaScript—基础Day2
  6. java内嵌chrome浏览器,JS和JAVA如何进行交互
  7. 详细介绍JAVA中日期 yyyy-MM-dd HH:mm:ss
  8. 绝地求生linux版本,别吃鸡游戏下载-别吃鸡官方版v1.0-Linux公社
  9. 惯性测量单元(IMU)传感器--MEMS微纳制造系列简报
  10. linux如何查看分区对应的什么设备,linux LVM分区查看dm设备方式介绍