import pandas #ipython notebook
titanic = pandas.read_csv("titanic_train.csv")
titanic.head(5)

titanic["Age"] = titanic["Age"].fillna(titanic["Age"].median())  #age将空值填充为平均值  (处理age)
titanic.describe()#描述

titanic["Sex"].unique()#独特的
titanic.loc[titanic["Sex"] == "male", "Sex"] = 0
titanic.loc[titanic["Sex"] == "female", "Sex"] = 1titanic["Embarked"].unique()
titanic["Embarked"] = titanic["Embarked"].fillna('S')#登船的位置
titanic.loc[titanic["Embarked"] == "S", "Embarked"] = 0
titanic.loc[titanic["Embarked"] == "C", "Embarked"] = 1
titanic.loc[titanic["Embarked"] == "Q", "Embarked"] = 2
from sklearn.linear_model import LinearRegression  #线性回归模型
from sklearn.model_selection import KFoldpredictors = ["Pclass", "Sex", "Age", "SibSp", "Parch", "Fare", "Embarked"]
alg = LinearRegression()
kf = KFold(n_splits=3)
predictions = []for train, test in kf.split(titanic):train_predictors = (titanic[predictors].iloc[train,:])#对应位置的survived值train_target = titanic["Survived"].iloc[train]#训练alg.fit(train_predictors, train_target)#预测test_predictions = alg.predict(titanic[predictors].iloc[test,:])#添加到结果集predictions.append(test_predictions)
import numpy as np
#连接
predictions = np.concatenate(predictions, axis=0)
#判断存活 并全部化为0、1表示
predictions[predictions > .5] = 1
predictions[predictions <=.5] = 0
#准确率
accuracy = sum(predictions == titanic["Survived"]) / len(predictions)
print (accuracy)

这次预测的准确率为0.7833894500561167

用测试集;测试

titanic_test = pandas.read_csv("test.csv")
titanic_test["Age"] = titanic_test["Age"].fillna(titanic["Age"].median())
titanic_test["Fare"] = titanic_test["Fare"].fillna(titanic_test["Fare"].median())
titanic_test.loc[titanic_test["Sex"] == "male", "Sex"] = 0
titanic_test.loc[titanic_test["Sex"] == "female", "Sex"] = 1titanic_test["Embarked"] = titanic_test["Embarked"].fillna("S")
titanic_test.loc[titanic_test["Embarked"] == "S", "Embarked"] = 0
titanic_test.loc[titanic_test["Embarked"] == "C", "Embarked"] = 1
titanic_test.loc[titanic_test["Embarked"] == "Q", "Embarked"] = 2predictors = ["Pclass", "Sex", "Age", "SibSp", "Parch", "Fare", "Embarked"]
prediction =alg.predict(titanic_test[predictors])prediction[prediction > .5] = 1
prediction[prediction <=.5] = 0

逻辑回归

#from sklearn import cross_validation cross_validation不能用了,用model_delection替代
from sklearn import model_selection
from sklearn.linear_model import LogisticRegression
# 初始化算法
alg = LogisticRegression()
#用自带的函数直接计算所有交叉验证的准确度得分
scores = model_selection.cross_val_score(alg, titanic[predictors], titanic["Survived"], cv=3)
#取平均值
print(scores.mean())

随机森林

from sklearn import model_selection
from sklearn.ensemble import RandomForestClassifier#首推使用随机森林predictors = ["Pclass", "Sex", "Age", "SibSp", "Parch", "Fare", "Embarked"]
#10:树的个数   2:当样本数是2的时候不切   1:叶子节点个数最少1个
alg = RandomForestClassifier(n_estimators=10, min_samples_split=2, min_samples_leaf=1)
#用自带的函数直接计算所有交叉验证的准确度得分
kf = model_selection.KFold(n_splits=3)
scores = model_selection.cross_val_score(alg, titanic[predictors], titanic["Survived"], cv=kf)
#取平均值
print(scores.mean())

调整随机森林的参数

#调整参数 扩大树的数量 减少过拟合情况
#需要不断调整以找到最优参数
alg = RandomForestClassifier(random_state=1, n_estimators=50, min_samples_split=4, min_samples_leaf=2)
kf = model_selection.KFold(n_splits=3)
scores = model_selection.cross_val_score(alg, titanic[predictors], titanic["Survived"], cv=kf)
print(scores.mean())

特征工程:自定义新特征

#提取新的特征
# 生成一个familysize栏
titanic["FamilySize"] = titanic["SibSp"] + titanic["Parch"]
#把名字长度也作为一个特征
titanic["NameLength"] = titanic["Name"].apply(lambda x: len(x))

获取头衔特征

#从名称中获取头衔的函数
def get_title(name):#使用正则表达式搜索头衔,头衔总是由大写字母和小写字母组成,并以'.'结尾title_search = re.search(' ([A-Za-z]+)\.', name)#如果头衔存在,提取并返回if title_search:return title_search.group(1)return ""#获取所有头衔并打印每个头衔出现的频率
titles = titanic["Name"].apply(get_title)
print(pandas.value_counts(titles))
#将每个头衔映射到一个整数
title_mapping = {"Mr": 1, "Miss": 2, "Mrs": 3, "Master": 4, "Dr": 5, "Rev": 6, "Major": 7, "Col": 7, "Mlle": 8, "Mme": 8, "Don": 9, "Lady": 10, "Countess": 10, "Jonkheer": 10, "Sir": 9, "Capt": 7, "Ms": 2}
for k,v in title_mapping.items():titles[titles == k] = v
#验证我们是否转换了所有内容
print(pandas.value_counts(titles))
#增加一个头衔栏
titanic["Title"] = titles
import numpy as np
from sklearn.feature_selection import SelectKBest, f_classif
import matplotlib.pyplot as plt
predictors = ["Pclass", "Sex", "Age", "SibSp", "Parch", "Fare", "Embarked", "FamilySize", "Title", "NameLength"]#进行特征选择
selector = SelectKBest(f_classif, k=5)
selector.fit(titanic[predictors], titanic["Survived"])#获取每个特征的原始p值,并将p值转换为分数
scores = -np.log10(selector.pvalues_)#对预测贡献#画图
plt.bar(range(len(predictors)), scores)
plt.xticks(range(len(predictors)), predictors, rotation='vertical')
plt.show()#只选择四个最好的特征
predictors = ["Pclass", "Sex", "Fare", "Title"]alg = RandomForestClassifier(random_state=1, n_estimators=50, min_samples_split=8, min_samples_leaf=4)

集成的分类器

from sklearn.ensemble import GradientBoostingClassifier
import numpy as np#将要集成的算法
#在逻辑回归中加了一些参数
algorithms = [[GradientBoostingClassifier(n_estimators=25, max_depth=3), ["Pclass", "Sex", "Age", "Fare", "Embarked", "FamilySize", "Title",]],[LogisticRegression(), ["Pclass", "Sex", "Fare", "FamilySize", "Title", "Age", "Embarked"]]
]#初始化交叉验证
kf = KFold(n_splits=3)predictions = []
for train, test in kf.split(titanic):train_target = titanic["Survived"].iloc[train]full_test_predictions = []for alg, predictors in algorithms:#训练alg.fit(titanic[predictors].iloc[train,:], train_target)#选择并预测#.astype(float)将dataframe转换为float并避免sklearn报错test_predictions = alg.predict_proba(titanic[predictors].iloc[test,:].astype(float))[:,1]full_test_predictions.append(test_predictions)# 使用一个简单的组合方案——用预测值的平均值得到最终的分类test_predictions = (full_test_predictions[0] + full_test_predictions[1]) / 2test_predictions[test_predictions <= .5] = 0test_predictions[test_predictions > .5] = 1predictions.append(test_predictions)#把所有的预测放在一个数组中
predictions = np.concatenate(predictions, axis=0)
#准确率
accuracy = sum(predictions == titanic["Survived"]) / len(predictions)
print(accuracy)

原始参考链接

Python 机器学习 唐宇迪泰坦尼克号【最新代码】相关推荐

  1. 唐宇迪博士实战代码教学视频课程全集,带你一起数据分析、深度学习

    唐宇迪,同济大学计算机博士,专注于机器学习与计算机视觉领域,人工智能与数据科学领域培训专家,上海人工智能协会核心主干.参与多个国家级计算机视觉与数据挖掘项目,主要研究面部识别与特征构造,异常识别等领域 ...

  2. 23神经网络 :唐宇迪《python数据分析与机器学习实战》学习笔记

    唐宇迪<python数据分析与机器学习实战>学习笔记 23神经网络 1.初识神经网络 百度深度学习研究院的图,当数据规模较小时差异较小,但当数据规模较大时深度学习算法的效率明显增加,目前大 ...

  3. 唐宇迪机器学习课程数据集_最受欢迎的数据科学和机器学习课程-2020年8月

    唐宇迪机器学习课程数据集 There are a lot of great online resources and websites on data science and machine lear ...

  4. Python数据分析(统计分析)视频教程-唐宇迪-专题视频课程

    Python数据分析(统计分析)视频教程-708人已学习 课程介绍         Python数据分析(统计分析)视频培训课程概述:Python统计分析系列课程以Python为核心工具,结合其工具包 ...

  5. 唐宇迪机器学习实战课程笔记(全)

    1. 线性回归 1.1线性回归理论 1.2线性回归实战 2.训练调参基本功(线性回归.岭回归.Lasso回归) 2.1 线性回归模型实现 2.2不同GD策略对比 2.3多项式曲线回归 2.4过拟合和欠 ...

  6. 唐宇迪资源-机器学习与深度学习

    本人看了很多教学视频,觉得唐宇迪老师的机器学习课程,能够使用通俗易懂的原理讲解与实例代码结合带大家快速熟练掌握机器学习的经典算法.对于有基础和没基础的同学,都能让你轻易入门,但是得一边看一遍敲,实践才 ...

  7. 唐宇迪机器学习课程笔记:逻辑回归之信用卡检测任务

    信用卡欺诈检测 基于信用卡交易记录数据建立分类模型来预测哪些交易记录是异常的哪些是正常的. 任务流程: 加载数据,观察问题 针对问题给出解决方案 数据集切分 评估方法对比 逻辑回归模型 建模结果分析 ...

  8. 唐宇迪机器学习之离职预测

    最近在看唐宇迪机器学习视频,这个视频我觉得很不错,可是我资源有限,有的视频没有配套的资料.数据集或者是代码,但还是可以看视频了解其中的一些知识点. 项目介绍 该项目是通过员工对公司的满意程度.公司对员 ...

  9. 免费技术直播:唐宇迪带你一节课了解机器学习经典算法

    常常有小伙伴在后台反馈:机器学习经典算法有哪些? 自学难度大又没有效果,该怎么办? CSDN为了解决这个难题,联合唐宇迪老师为大家带来了一场精彩的直播[一节课掌握机器学习经典算法-线性回归模型].本次 ...

最新文章

  1. 2021-01-07 matlab数值分析  矩阵特征值与特征向量的计算 改进乘幂法 反幂法
  2. python画图网格线设置_Matplotlib可视化入门,看这一篇就够了
  3. ava method org.apache.struts2.components.Form.getValidators(String) threw an exception when invoke
  4. 李幸原:看好实时音视频在教育与医疗的前景
  5. agc015F - Kenus the Ancient Greek(结论题)
  6. 【算法竞赛学习】金融风控之贷款违约预测-模型融合
  7. 网站前端设计,从960框架开始
  8. 《机器学习实战》学习总结(四)逻辑回归原理
  9. 有关使用seajs和template模板的总结
  10. python flask将读取的图片返回给web前端
  11. python实时语音转写_语音识别 - 实时语音转写 - 《科大讯飞REST_API开发指南》 - 书栈网 · BookStack...
  12. 实现Excel下拉自动填补对应内容到后面单元格
  13. idea 无法加载识别本地类
  14. Python爬取王者荣耀官网图片
  15. [读书]《自驱型成长》
  16. 多设备同步课程表,适用于iOS与Android
  17. 局域网不能访问的问题
  18. docker images 命令详解
  19. 【阿里云】第一次如何用MobaXterm/xshell等软件登录阿里云服务器
  20. 医学图像NIFTI(.nii)转换为mhd、raw文件格式

热门文章

  1. 什么是世界协调时间UTC
  2. read函数和write函数的使用
  3. MySQL 数据库删除操作中的 delete、drop、 truncate 区别在哪?
  4. Python Dataframe之excel、csv、pickle、feather、parquet、jay、hdf5 文件存储格式==》存读效率对比
  5. html dashed 属性,css虚线样式dotted和dashed
  6. 根据身高体重计算BMI指数
  7. JavaScript 时间、时区转换
  8. excel 统计数据
  9. 浅谈SEO(搜索引擎优化)
  10. android 改变输入法enter键文字 为搜索 下一个 以及前往