# kaggle Titanic
# 导入需要的库
import pandas as pd
import numpy as np
import sys
import sklearn
import random
import time from sklearn import ensemble
from sklearn.preprocessing import LabelEncoder from sklearn import feature_selection
from sklearn import model_selection
from sklearn import metrics
import matplotlib as mpl
import matplotlib.pyplot as plt
import seaborn as sns # 开始数据分析
data_train = pd.read_csv('data/train.csv')
data_test = pd.read_csv('data/test.csv') data_all = [data_train, data_test] # 测试一下
# print(data_all) # 将数据集列名都换成小写字母
for data in data_all:
data.columns = data.columns.str.lower() # 测试一下
# print(data_all) # 进行数据清洗
# print(data_all[0].isnull().sum()) # 看出age有177空缺 cabin有687空缺 embarked有2空缺
# print(data_all[1].isnull().sum()) # 针对空缺进行补足或删除属性
for data in data_all:
data['age'].fillna(data['age'].median(), inplace=True)
data['fare'].fillna(data['fare'].median(), inplace=True)
data['embarked'].fillna(data['embarked'].mode()[0], inplace=True) # mode按出现频率顺序返回取值 drop_columns = ['cabin', 'passengerid', 'ticket']
for data in data_all:
data.drop(drop_columns, axis=1, inplace=True) # 测一下试
# print(data_train.isnull().sum()) for data in data_all:
data['family_size'] = data['sibsp'] + data['parch'] + 1
data['single'] = 1
data['single'].loc[data['family_size'] > 1] = 0
data['title'] = data['name'].apply(lambda x: x.split(', ')[1]).apply(lambda x:
x.split('.')[0])
data['fare_bin'] = pd.cut(data['fare'], 4)
data['age_bin'] = pd.cut(data['age'], 5) # 测试一下
# data_train.to_csv('data/my_train.csv')
# data_test.to_csv('data/my_test.csv') data_train['title'] = data_train['title'].apply(lambda x: 'other' if data_train['title'].value_counts()[x] < 10 else x)
data_test['title'] = data_test['title'].apply(lambda x: 'other' if data_test['title'].value_counts()[x] < 10 else x)
# 测试一下
# print(data_train['title'].value_counts()) label = LabelEncoder()
for data in data_all:
data['sex_code'] = label.fit_transform(data['sex'])
data['embarked_code'] = label.fit_transform(data['embarked'])
data['title_code'] = label.fit_transform(data['title'])
data['age_bin_code'] = label.fit_transform(data['age_bin'])
data['fare_bin_code'] = label.fit_transform(data['fare_bin']) target = ['survived']
features = ['pclass', 'family_size', 'single', 'sex_code', 'embarked_code',
'title_code', 'age_bin_code', 'fare_bin_code'] features_all = target + features
data_dummy = pd.get_dummies(data_train[features])
# data_dummy.to_csv('data/dummy.csv')
# print(data_dummy) # 获取训练集合测试集 x_train, x_test, y_train, y_test = model_selection.train_test_split(data_dummy[features],
data_train[target],
random_state=0)
from sklearn.model_selection import GridSearchCV from sklearn.ensemble import RandomForestClassifier rf = RandomForestClassifier(max_features='auto',
random_state=1,
n_jobs=-1) # 最大特征数:自动适应; 结果对照组 1; 是否多线程训练 -1 是 param_gird = {
'criterion': ['gini', 'entropy'], # 基尼系数 信息熵,自动对比两个参数的效果挑选最好的
'min_samples_leaf': [1, 5, 10], # 最小的叶子节点保留数
'min_samples_split': [2, 4, 10, 16], # 最小分几类
'n_estimators': [50, 100, 400, 700, 1000] } # 网格搜索,自动搜索参数中的各种可能挑选效果最好的
# 创建一个网格搜索对象
gs = GridSearchCV(estimator=rf, # 传入随机森林对象
param_grid=param_gird, # 各种参数
scoring='accuracy', # 评判标准:准确度
cv=3, # 交叉验证
n_jobs=-1 # 线程数
)
gs = gs.fit(x_train, np.ravel(y_train)) print(gs.best_score_)
print(gs.best_params_) rf2 = RandomForestClassifier(criterion='entropy',
min_samples_leaf=5,
min_samples_split=16,
n_estimators=50,
n_jobs=-1,
random_state=1)
rf2.fit(x_train, np.ravel(y_train)) pred = rf2.predict(x_test)
pred_df = pd.DataFrame(pred, columns=['survived']) pred_df.to_csv('data/pred_df.csv')

kaggle入门 随机森林求解Titanic的更多相关文章

  1. 机器学习入门-随机森林预测温度-不同参数对结果的影响调参 1.RandomedSearchCV(随机参数组的选择) 2.GridSearchCV(网格参数搜索) 3.pprint(顺序打印) 4.rf.get_params(获得当前的输入参数)

    使用了RamdomedSearchCV迭代100次,从参数组里面选择出当前最佳的参数组合 在RamdomedSearchCV的基础上,使用GridSearchCV在上面最佳参数的周围选择一些合适的参数 ...

  2. 机器学习入门-随机森林温度预测-增加样本数据 1.sns.pairplot(画出两个关系的散点图) 2.MAE(平均绝对误差) 3.MAPE(准确率指标)

    在上一个博客中,我们构建了随机森林温度预测的基础模型,并且研究了特征重要性. 在这个博客中,我们将从两方面来研究数据对预测结果的影响 第一方面:特征不变,只增加样本的数据 第二方面:增加特征数,增加样 ...

  3. 机器学习入门-随机森林温度预测的案例 1.datetime.datetime.datetime(将字符串转为为日期格式) 2.pd.get_dummies(将文本标签转换为one-hot编码) 3.rf.feature_importances_(研究样本特征的重要性) 4.fig.autofmt_xdate(rotation=60) 对标签进行翻转

    在这个案例中: 1. datetime.datetime.strptime(data, '%Y-%m-%d') # 由字符串格式转换为日期格式 2. pd.get_dummies(features)  ...

  4. kaggle数据挖掘竞赛初步--Titanic<随机森林&特征重要性>

    完整代码: https://github.com/cindycindyhi/kaggle-Titanic 特征工程系列: Titanic系列之原始数据分析和数据处理 Titanic系列之数据变换 Ti ...

  5. kaggle入门项目:Titanic存亡预测(四)模型拟合

    原kaggle比赛地址:https://www.kaggle.com/c/titanic 原kernel地址:A Data Science Framework: To Achieve 99% Accu ...

  6. kaggle入门项目:Titanic存亡预测 (一)比赛简介

    自从入了数据挖掘的坑,就在不停的看视频刷书,但是总觉得实在太过抽象,在结束了coursera上Andrew Ng 教授的机器学习课程还有刷完一整本集体智慧编程后更加迷茫了,所以需要一个实践项目来扎实之 ...

  7. kaggle 欺诈信用卡预测——不平衡训练样本的处理方法 综合结论就是:随机森林+过采样(直接复制或者smote后,黑白比例1:3 or 1:1)效果比较好!记得在smote前一定要先做标准化!!!其实随机森林对特征是否标准化无感,但是svm和LR就非常非常关键了

    先看数据: 特征如下: Time Number of seconds elapsed between each transaction (over two days) numeric V1 No de ...

  8. web安全之机器学习入门——3.2 决策树与随机森林

    目录 简介 决策树简单用法 决策树检测P0P3爆破 决策树检测FTP爆破 随机森林检测FTP爆破 简介 决策树和随机森林算法是最常见的分类算法: 决策树,判断的逻辑很多时候和人的思维非常接近. 随机森 ...

  9. kaggle入门——泰坦尼克之灾

    目录 引言 数据认识 总结 特征处理 建模预测 logistic分类模型 随机森林 SVM xgboost 模型验证 交叉验证 学习曲线 高偏差: 高方差 模型融合 总结 后记 引言 一直久闻kagg ...

  10. kaggle入门2——改进特征

    1:改进我们的特征 在上一个任务中,我们完成了我们在Kaggle上一个机器学习比赛的第一个比赛提交泰坦尼克号:灾难中的机器学习. 可是我们提交的分数并不是非常高.有三种主要的方法可以让我们能够提高他: ...

随机推荐

  1. 广州大学第十八届ACM大学生程序设计竞赛(同步赛)——题解

    这套题我答的很失败.没有按照题目的难度去答题,前期浪费了不少时间. 题目: A-字符画 题解:思维.模拟.这道题我的通过率为62.5,没有过的原因是因为对细节的处理和把控不到位,对一些点忽视,我也记录 ...

  2. 简单认识APP项目

    manifests:里面只有一个xml,是app运行配置文件 清单文件 <?xml version="1.0" encoding="utf-8"?> ...

  3. nats 简介和使用

    nats 简介和使用 nats 有 3 个产品 core-nats: 不做持久化的及时信息传输系统 nats-streaming: 基于 nats 的持久化消息队列(已弃用) nats-jetstre ...

  4. golang轻量级的代码复制粘贴检查器 cpd

    golang轻量级的代码复制粘贴检查器 cpd 项目地址: https://github.com/dengjiawen8955/copy-paste-detector 快速开始 clone git c ...

  5. windows上传ipa到开发者中心(app store)的方法

    假如你已经使用过苹果开发者中心上架app,你肯定知道在苹果开发者中心的web界面,无法直接提交ipa文件,而是需要使用第三方工具,将ipa文件上传到构建版本,开发者中心才能在构建版本里选择构建版本上架 ...

  6. 【RabbitMQ】04 路由模式

    在订阅模式的基础上制定一些特定发送规则 创建路由模式的生产者: 注意这些变化,跟之前的订阅模式并不一样 package cn.dzz.routineQueueInProducer; import co ...

  7. 【RabbitMQ】03 订阅模式

    Pub / Sub 订阅模式 特点是 一条消息可以给多个消费者接收了 首先创建订阅模式生产者发生一些代码变动: package cn.dzz.pubSub; import com.rabbitmq.c ...

  8. 【RabbitMQ】01 简单模式

    参考自腾讯云的实验课堂,减少部署时间的折腾 1.创建Erlang.Repo库 curl -s https://packagecloud.io/install/repositories/rabbitmq ...

  9. 【Spring-Security】Re09 CSFR处理

    一.CSRF: CSRF 全称 Cross Site Request Forgery 跨站请求伪造 又称为OneClick Attack & SessionRiding 是非法请求访问,通过伪 ...

  10. 【Layui】08 时间线 Timeline

    文档地址: https://www.layui.com/demo/timeline.html 常规时间线: <ul class="layui-timeline"> &l ...