kaggle数据挖掘——以Titanic为例介绍处理数据大致步骤

Titanic是kaggle上的一道just for fun的题,没有奖金,但是数据整洁,拿来练手最好不过。

本文以 Titanic 的数据,使用较为简单的决策树,介绍处理数据大致过程、步骤

注意,本文的目的,在于帮助你入门数据挖掘,熟悉处理数据步骤、流程

决策树模型是一种简单易用的非参数分类器。它不需要对数据有任何的先验假设,计算速度较快,结果容易解释,而且稳健性强,对噪声数据和缺失数据不敏感。下面示范用kaggle竞赛titanic中的数据集为做决策树分类,目标变量为survive

读取数据

import numpy as np
import pandas as pd

df = pd.read_csv(‘train.csv‘, header=0)

数据整理

  • 只取出三个自变量
  • 将Age(年龄)缺失的数据补全
  • 将Pclass变量转变为三个 Summy 变量
  • 将sex转为0-1变量
subdf = df[[‘Pclass‘,‘Sex‘,‘Age‘]]
y = df.Survived
# sklearn中的Imputer也可以
age = subdf[‘Age‘].fillna(value=subdf.Age.mean())
# sklearn OneHotEncoder也可以
pclass = pd.get_dummies(subdf[‘Pclass‘],prefix=‘Pclass‘)
sex = (subdf[‘Sex‘]==‘male‘).astype(‘int‘)
X = pd.concat([pclass,age,sex],axis=1)
X.head()

输出下图结果

建立模型

  • 将数据切分为 train 和 test
from sklearn.cross_validation import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.25, random_state=33)
  • 在测试集(test)上观察决策树表现
from sklearn import tree
clf = tree.DecisionTreeClassifier(criterion=‘entropy‘, max_depth=3,min_samples_leaf=5)
clf = clf.fit(X_train,y_train)
print("准确率为:{:.2f}".format(clf.score(X_test,y_test)))

输出结果如下

准确率为:0.83
  • 观察各变量的重要性
clf.feature_importances_

输出如下

array([ 0.08398076,  0.        ,  0.23320717,  0.10534824,  0.57746383])
  • 生成特征图
import matplotlib.pyplot as plt
feature_importance = clf.feature_importances_
important_features = X_train.columns.values[0::]
feature_importance = 100.0 * (feature_importance / feature_importance.max())
sorted_idx = np.argsort(feature_importance)[::-1]
pos = np.arange(sorted_idx.shape[0]) + .5

plt.title(‘Feature Importance‘)
plt.barh(pos, feature_importance[sorted_idx[::-1]], color=‘r‘,align=‘center‘)
plt.yticks(pos, important_features)
plt.xlabel(‘Relative Importance‘)
plt.draw()
plt.show()

对于随机森林如何得到变量的重要性,可以看scikit-learn官方文档

当然在得到重要的特征后,我们就可以把不重要的特征去掉了,以提高模型的训练速度

最后是

  • 使用交叉验证来评估模型
from sklearn import cross_validation
scores1 = cross_validation.cross_val_score(clf, X, y, cv=10)
scores1

输出结果如下:

array([ 0.82222222,  0.82222222,  0.7752809 ,  0.87640449,  0.82022472,
    0.76404494,  0.7752809 ,  0.76404494,  0.83146067,  0.78409091])
  • 使用更多指标来评估模型
from sklearn import metrics
def measure_performance(X,y,clf, show_accuracy=True,
                        show_classification_report=True,
                        show_confusion_matrix=True):
    y_pred=clf.predict(X)
    if show_accuracy:
        print("Accuracy:{0:.3f}".format(metrics.accuracy_score(y,y_pred)),"\n")

    if show_classification_report:
        print("Classification report")
        print(metrics.classification_report(y,y_pred),"\n")

    if show_confusion_matrix:
        print("Confusion matrix")
        print(metrics.confusion_matrix(y,y_pred),"\n")

measure_performance(X_test,y_test,clf, show_classification_report=True, show_confusion_matrix=True)

输出结果如下,可以看到 precision(精确度)recall(召回率)等更多特征

Accuracy:0.834 

Classification report
             precision    recall  f1-score   support

          0       0.85      0.88      0.86       134
          1       0.81      0.76      0.79        89

avg / total       0.83      0.83      0.83       223

Confusion matrix
[[118  16]
 [ 21  68]]

与随机森林进行比较

from sklearn.ensemble import RandomForestClassifier
clf2 = RandomForestClassifier(n_estimators=1000,random_state=33)
clf2 = clf2.fit(X_train,y_train)
scores2 = cross_validation.cross_val_score(clf2,X, y, cv=10)
clf2.feature_importances_
scores2.mean(), scores1.mean()

准确率输出(这里用的是10折交叉验证后的平均值)

(0.81262938372488946, 0.80352769265690616)

可以看到随机森林的准确要比决策树高0.1左右

 总结

经过上面介绍分析,我们走过了一个数据科学家在拿到数据到得出结论的所有步骤

  1. 读入数据
  2. 数据清理
  3. 特征工程
  4. 构建模型
  5. 模型评估
  6. 参数调整
  7. 模型比较

这篇文章重要的不是结果,而是帮助你了解处理数据大致过程、步骤

剩下的细节,就是你发挥自己的想象力,进行改进、创新了

参考链接

python的决策树和随机森林

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-10-05 04:19:32

kaggle数据挖掘——以Titanic为例介绍处理数据大致步骤的相关文章

kaggle初探之titanic

环境部署 环境部署需要安装python,这里已经配置好,略过 首先登陆kaggle 下载titanic数据 https://www.kaggle.com/c/titanic/data 点击Download ALL 查看数据 gender test.csv train.csv 开始建模 import pandas as pd import os from sklearn.feature_extraction import DictVectorizer #导入随机森林 from sklearn.en

CK2255-以慕课网日志分析为例 进入大数据 Spark SQL 的世界

新年伊始,学习要趁早,点滴记录,学习就是进步! 随笔背景:在很多时候,很多入门不久的朋友都会问我:我是从其他语言转到程序开发的,有没有一些基础性的资料给我们学习学习呢,你的框架感觉一下太大了,希望有个循序渐进的教程或者视频来学习就好了.对于学习有困难不知道如何提升自己可以加扣:1225462853  获取资料. 下载地址:https://pan.baidu.com/s/1hsU5EIS 以慕课网日志分析为例 进入大数据 Spark SQL 的世界 本课程以"慕课网日志分析"这一大数据应

为数据挖掘小组写的一个用于造数据的小程序

最近有个数据挖掘的项目,要求在文本里面写入随机字母并且要1000W个 于是就写了个程序用来造数据并记录一下 程序写的时候遇到的问题 1 未考虑内存溢出的情况,大批量的把数据写入导致内存溢出 以后需要谨慎对待 目前完整版 package test; import java.io.File; import java.io.FileWriter; import java.io.IOException; import org.apache.commons.io.FileUtils; import org

以麦当劳,肯德基优惠券接口数据为例进行的数据解析方法,简单易懂

以麦当劳,肯德基优惠券接口数据为例进行的数据解析方法,简单易懂,这是我个人觉得是一种比较简单易懂的json数据解析方法: 看下其中一个类的代码 package com.example.text_json_deno_model; import java.util.ArrayList; import java.util.List; import org.json.JSONArray; import org.json.JSONException; import org.json.JSONObject;

以慕课网日志分析为例 进入大数据 Spark SQL 的世界

详情请交流  QQ  709639943 01.以慕课网日志分析为例 进入大数据 Spark SQL 的世界 02.漫谈spring cloud分布式服务架构 03.Spring Cloud微服务实战视频课程 04.漫谈spring cloud 与 spring boot 基础架构 05.Java秒杀系统方案优化 高性能高并发实战 06.Java深入微服务原理改造房产销售平台 07.快速上手Linux 玩转典型应用 08.快速上手Ionic3 多平台开发企业级问答社区 09.Java Sprin

MySQL之IDE工具介绍及数据备份(数据库导入,导出)

MySQL之IDE工具介绍及数据备份 一.IDE工具介绍 生产环境还是推荐使用mysql命令行,但为了方便我们测试,可以使用IDE工具 下载链接:https://pan.baidu.com/s/1bpo5mqj 二.MySQL数据备份 #1. 物理备份: 直接复制数据库文件,适用于大型数据库环境( 如数据文件.控制文件.归档日志文件等).但不能恢复到异构系统中如Windows. #2. 逻辑备份: 备份的是建表.建库.插入等操作所执行SQL语句,适用于中小型数据库,效率相对较低.#3. 导出表:

kaggle数据挖掘竞赛初步--Titanic<原始数据分析>

Titanic是kaggle上的一道just for fun的题,没有奖金,但是数据整洁,拿来练手最好不过啦. 这道题给的数据是泰坦尼克号上的乘客的信息,预测乘客是否幸存.这是个二元分类的机器学习问题,但是由于数据样本相对较少,在当时慌乱的情况下幸存者有一定的随机性,还是有一定挑战的. 首先,我们要先看一看数据,分析数据的一些较为直观的特征.代码使用numpy pandas和scikit-learn. 1 import numpy as np 2 import pandas as pd 3 #r

kaggle数据挖掘竞赛初步--Titanic<数据变换>

缺失值填充之后,就要对其他格式有问题的属性进行处理了.比如Sex Embarked这些属性的值都是字符串类型的,而scikit learn中的模型都只能处理数值型的数据,需要将这些原始的字符串类型的数据转为数值型数据.所有数据通常可以分成两种类型:定量与定性.定量的属性(数值属性)通常蕴涵着可排序性,比如在泰坦尼克号数据集中,年龄就是一个定量属性.定性属性(标称 序数 二元属性)的值是一些符号或事务的名称,每个值代表某种类别编码或状态,不是可测量量,是不具有排序意义的,比如Embarked(登船

Kaggle 数据挖掘比赛经验分享

1.Kaggle 基本介绍 Kaggle 于 2010 年创立,专注数据科学,机器学习竞赛的举办,是全球最大的数据科学社区和数据竞赛平台.在 Kaggle 上,企业或者研究机构发布商业和科研难题,悬赏吸引全球的数据科学家,通过众包的方式解决建模问题.而参赛者可以接触到丰富的真实数据,解决实际问题,角逐名次,赢取奖金.诸如 Google,Facebook,Microsoft 等知名科技公司均在 Kaggle 上面举办过数据挖掘比赛.2017年3月,Kaggle 被 Google CloudNext