【机器学习学习】SKlearn + XGBoost 预测 Titanic 乘客幸存
Titanic 数据集是从 kaggle下载的,下载地址:https://www.kaggle.com/c/titanic/data
数据一共又3个文件,分别是:train.csv,test.csv,gender_submission.csv
先把需要视同的库导入:
import os
import datetime
import operator
import numpy as np
import pandas as pd
import xgboost as xgb
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import Imputer, scale
import matplotlib.pyplot as plt
不管是做机器学习,还是深度学习,还是其他的先确定是 分类问题还是回归问题,当然这两个可以互相转换的,然后拿到数据第一步肯定是先观察数据,数据是否又缺失,乱码等。
这个看一下就知道是否存活,存活是1,否则 0 ,那么就是分类 !
1,观察下数据
先观察一下数据,使用pandas读取数据:
DataFrame.
head
(n=5):head 方法默认取5行数据,你可以自己随便传参数,我只去10行观察下看下
pd_train = pd.read_csv('./data/titanic/train.csv')
pd_test = pd.read_csv('./data/titanic/test.csv')
pd_gender = pd.read_csv('./data/titanic/gender_submission.csv')
print(pd_train.shape, pd_test.shape)
print(pd_train.head(10))
根据观察可以看到,数据有数值类型,也有字符类型,数值类型我们称作连续变量,字符类型我们称作分类变量,连续变量是不用转换的,而分类变量是需要转成连续变量的,否则,无法运算。
还可以看到有些数据是缺失的,这部分缺失值我们也需要处理,填充或者删除
2,特征工程
根据第一步观察到的结果,我们对数据做处理。
1)将性别 Sex 列,做数值转换处理,代码如下:
# 性别 将性别字段Sex中的值 female用0,male用1代替,类型 int
pd_train['Sex'] = pd_train['Sex'].map({'female': 0, 'male': 1}).astype(int)
pd_test['Sex'] = pd_test['Sex'].map({'female': 0, 'male': 1}).astype(int)
2) 将分类变量转换位连续变量。我们使用 sklearn 库下面的 LabelEncoder() 来处理
# 将类型变量转换位连续变量
for f in pd_train.columns:
if pd_train[f].dtype == 'object':
label = LabelEncoder()
label.fit(list(pd_train[f].values))
pd_train[f] = label.transform(list(pd_train[f].values)) for f in pd_test.columns:
if pd_test[f].dtype == 'object':
label = LabelEncoder()
label.fit(list(pd_test[f].values))
pd_test[f] = label.transform(list(pd_test[f].values))
3)统计缺失的列那些,观察缺失值有多少,再决定是删除,还是填充,如果某列值的缺失严重,那就没必要填充了,直接删除。
我们采用填充的方式,使用 Imputer
类来处理缺失值,
这个类
提供了估算缺失值的基本策略,使用缺失值所在的行/列中的平均值、中位数或者众数来填充。这个类也支持不同的缺失值编码。
# 统计缺失的列
na_train = pd_train.isnull().sum().sort_values(ascending=False)
print(na_train) # 使用均值填充缺失值
train_data= pd_train.values
imput = Imputer(missing_values="NaN", strategy="mean", axis=0)
imput = imput.fit(train_data)
train_data = imput.fit_transform(train_data) # 使用均值填充缺失值
test_data= pd_test.values
imput = Imputer(missing_values="NaN", strategy="mean", axis=0)
imput = imput.fit(test_data)
test_data = imput.fit_transform(test_data)
3,训练
经过对特征的处理,我们可以训练模型可,我使用了三个模型分别是,LogisticRegression,RandomForest,XGBClassifier
监督学习的模型都一样,必须拟合(fit)两个矩阵(数组), 训练样本的矩阵 X,大小为 [n_samples, n_features]
,和 训练样本目标值(标签)的数组 Y,大小为 [n_samples]
:
1)LogisticRegression :逻辑回归,虽然名字叫回归,但是个分类模型
def train_logreistic():
"""
逻辑回归
"""
X_train, X_test, y_train, y_test = load_data() model = LogisticRegression(penalty='l2')
model.fit(X_train, y_train)
y_pred = model.predict(X_test)
rfc_rate, rmse = calc_accuracy(y_pred, y_test)
total = total_survival(y_pred) print("LogisticRegression acc_rate:{0:.4f},RMS:{1:.4f},存活:{2}".format( rfc_rate, rmse, total))
return rfc_rate, rmse, total
2)RandomForest:随机森林,基于树的模型,通过在分类器构造过程中引入随机性来创建一组不同的分类器。
def train_randomForster(): X_train, X_test, y_train, y_test = load_data()
model = RandomForestClassifier(n_estimators=300,max_depth=12,random_state=7)
model.fit(X_train,y_train)
y_pred = model.predict(X_test)
rfc_rate, rmse = calc_accuracy(y_pred, y_test)
total = total_survival(y_pred)
print("RandomForestClassifier acc_rate:{0:.4f},RMS:{1:.4f},存活:{2}".format(rfc_rate, rmse, total))
return rfc_rate, rmse, total
3)XGBClassifier :大规模并行boosted tree的工具,它是目前最快最好的开源boosted tree工具包,比常见的工具包快10倍以上,kaggle 比赛的神器
def train_XGBoost(): X_train, X_test, y_train, y_test = load_data()
model = xgb.XGBClassifier(max_delta_step=6, learning_rate=0.1, n_estimators=100, objective="binary:logistic",silent=True)
eval_data = [(X_test, y_test)]
model.fit(X_train, y_train, eval_set=eval_data, early_stopping_rounds=30)
y_pred = model.predict(X_test)
rfc_rate, rmse = calc_accuracy(y_pred, y_test)
total = total_survival(y_pred) print("XGBClassifier acc_rate:{0:.4f},RMS:{1:.4f},存活:{2}".format(rfc_rate, rmse, total))
return rfc_rate, rmse, total
4,预测
model.predict(X_test) 都在里面写了,我就不说了。
三个模型最后的结果:
def train(): lg_rate, lg_rmse, lg_total = train_logreistic()
rf_rate, rf_rmse, rf_total = train_randomForster()
xg_rate, xg_rmse, xg_total = train_XGBoost() print("LogisticRegression acc_rate:{0:.4f},RMS:{1:.4f},存活:{2}".format( lg_rate, lg_rmse, lg_total))
print("RandomForestClassifier acc_rate:{0:.4f},RMS:{1:.4f},存活:{2}".format(rf_rate, rf_rmse, rf_total))
print("XGBClassifier acc_rate:{0:.4f},RMS:{1:.4f},存活:{2}".format(xg_rate, xg_rmse, xg_total))
XGBClassifier acc_rate:80.4469,RMS:0.4422,存活:56
LogisticRegression acc_rate:74.8603,RMS:0.5014,存活:60
RandomForestClassifier acc_rate:82.6816,RMS:0.4162,存活:54
XGBClassifier acc_rate:80.4469,RMS:0.4422,存活:56
好了,至于怎么调参,网格搜索我就不写了,简单的分析就完成了。。
参考:
1) http://xgboost.readthedocs.io/en/latest/
2) http://scikit-learn.org/stable/
3) https://www.kaggle.com/
源码地址:https://github.com/jarvisqi/machine_learning/blob/master/ml_xgboost/titanic.py
【机器学习学习】SKlearn + XGBoost 预测 Titanic 乘客幸存的更多相关文章
- 【机器学习】SKlearn + XGBoost 预测 Titanic 乘客幸存
Titanic 数据集是从 kaggle下载的,下载地址:https://www.kaggle.com/c/titanic/data 数据一共又3个文件,分别是:train.csv,test.csv, ...
- 机器学习总结-sklearn参数解释
本文转自:lytforgood 机器学习总结-sklearn参数解释 实验数据集选取: 1分类数据选取 load_iris 鸢尾花数据集 from sklearn.datasets import lo ...
- R语言与机器学习学习笔记
人工神经网络(ANN),简称神经网络,是一种模仿生物神经网络的结构和功能的数学模型或计算模型.神经网络由大量的人工神经元联结进行计算.大多数情况下人工神经网络能在外界信息的基础上改变内部结构,是一种自 ...
- [ML学习笔记] XGBoost算法
[ML学习笔记] XGBoost算法 回归树 决策树可用于分类和回归,分类的结果是离散值(类别),回归的结果是连续值(数值),但本质都是特征(feature)到结果/标签(label)之间的映射. 这 ...
- 使用pmml跨平台部署机器学习模型Demo——房价预测
基于房价数据,在python中训练得到一个线性回归的模型,在JavaWeb中加载模型完成房价预测的功能. 一. 训练.保存模型 工具:PyCharm-2017.Python-39.sklearn2 ...
- Python机器学习库sklearn的安装
Python机器学习库sklearn的安装 scikit-learn是Python的一个开源机器学习模块,它建立在NumPy,SciPy和matplotlib模块之上能够为用户提供各种机器学习算法接口 ...
- 机器学习-学习笔记(二) --> 模型评估与选择
目录 一.经验误差与过拟合 二.评估方法 模型评估方法 1. 留出法(hold-out) 2. 交叉验证法(cross validation) 3. 自助法(bootstrapping) 调参(par ...
- 机器学习之路: python 决策树分类DecisionTreeClassifier 预测泰坦尼克号乘客是否幸存
使用python3 学习了决策树分类器的api 涉及到 特征的提取,数据类型保留,分类类型抽取出来新的类型 需要网上下载数据集,我把他们下载到了本地, 可以到我的git下载代码和数据集: https: ...
- 【机器学习】集成学习之xgboost的sklearn版XGBClassifier使用教程
XGBClassifier是xgboost的sklearn版本.代码完整的展示了使用xgboost建立模型的过程,并比较xgboost和randomForest的性能. # -*- coding: u ...
随机推荐
- 初探Azure的保留实例(Reserved Instance)
最近的Ignite 2017宣布了Azure将在年底推出保留实例(Reserved Instance).虽然在没有RI的这些年,Azure的EA Monetary Commitment同样也提供了和R ...
- iOS 去掉小数点后边多余的0
-(NSString*)removeFloatAllZero:(NSString*)string { NSString * testNumber = string; NSString * outNum ...
- 【Zookeeper】源码分析之服务器(一)
一.前言 前面已经介绍了Zookeeper中Leader选举的具体流程,接着来学习Zookeeper中的各种服务器. 二.总体框架图 对于服务器,其框架图如下图所示 说明: ZooKeeperServ ...
- C++ 头文件系列(list)
简介 list实现的实际上是双向链表,所以叫它doubly-linked list也许更好. 因为实现的是双向链表,所以它有两个非常重要的性质: 双向 链表 双向 双向意味着----给定一个元素,我们 ...
- wincc flexable变量组态
1.变量分类 2.变量组态练习 3.变量组态之前新建一个设备连接取名connect 3.tag1组态bool类型,双击变量弹出下面窗口,具体如下图所示connect表示外部变量 4.组态tag2 5. ...
- /sbin/nologin 和 /bin/false 的区别
/bin/false是最严格的禁止login选项,一切服务都不能用,而/sbin/nologin只是不允许系统login,可以使用其他ftp等服务 如果想要用false在禁止login的同时允许ftp ...
- 如何去除本地文件与svn服务器的关联
1.每个目录逐个去删除.svn文件夹 .svn属于隐藏文件夹,可通过操纵Windows文件资源管理器使隐藏文件可视,删除该文件,即可. 2.首先建立一个新文件,文件命名为remove-svn-fold ...
- JAVA本地环境启动OOM问题排查
1.问题描述 每次启动信息报错如下: 2.排查过程 2.1起初怀疑是堆内存不够: 将本地队内存调整由-Xms512M,-Xmx1024M,改成与测试环境相同1536M,还是失败 如上图报错中有noti ...
- Java的演化-Java8实战笔记
一个语言要想一直有活力,它也需要跟随着时代的变化去进步,Java作为一个古老的语言,它其实有太多的历史包袱,在改变的过程中需要考虑很多,但是它也在慢慢的演变,巩固自己的城墙,不让自己被遗忘在历史中(不 ...
- CSS开发规范
虽然很久之前整理过一份简单的CSS规范,但是当时写的也不是很全面,有些细节也没有照顾到.记录一份较详细的版本,以备不时之需. 命名规范 [强制] class一律使用小写字母+下划线格式命名 例: cl ...