Python机器学习:泰坦尼克号获救预测一

数据集下载地址:

https://github.com/fayduan/Kaggle_Titanic/blob/master/train.csv

视频地址:

http://study.163.com/course/courseLearn.htm?courseId=1003551009#/learn/video?lessonId=1004052093&courseId=1003551009

一、项目概要

1、应用

  模式识别、数据挖掘(核心)、统计学习、计算机视觉、语言识别、自然语言处理

2、模式、流程

  训练样本 --> 特征提取 --> 学习函数 --> 预测

二、Python实践

1、应用的模块

  Numpy:科学计算库

  pandas:数据分析处理库

  Matplotlib:数据可视化库

  Scikit-learn:机器学习库

2、数据源处理

① 导入数据:

  

1 #coding: utf-8
2 import pandas
3 titanic = pandas.read_csv(‘train.csv‘)

② 对缺失数据的列进行填充:

1 #对于缺失的数据进行补充 median 填充中位数
2 titanic[‘Age‘] = titanic[‘Age‘].fillna(titanic[‘Age‘].median())

③ 属性转换,把某些列的字符串值转为数字项:

1 print titanic[‘Sex‘].unique()
2 titanic.loc[titanic[‘Sex‘] == ‘male‘,‘Sex‘] = 0
3 titanic.loc[titanic[‘Sex‘] == ‘female‘,‘Sex‘] = 1
4
5 print titanic[‘Embarked‘].unique()
6 titanic[‘Embarked‘] = titanic[‘Embarked‘].fillna(‘S‘)
7 titanic.loc[titanic[‘Embarked‘] == ‘S‘,‘Embarked‘] = 0
8 titanic.loc[titanic[‘Embarked‘] == ‘C‘,‘Embarked‘] = 1
9 titanic.loc[titanic[‘Embarked‘] == ‘Q‘,‘Embarked‘] = 2

3、建立模型

① 引入机器学习库,核心

1 from sklearn.linear_model import LinearRegression  #分类算法 线性回归
2 from sklearn.cross_validation import KFold   #交叉验证库,将测试集进行切分验证取平均值

② 实例化模型

1 predictors = [‘Pclass‘,‘Sex‘,‘Age‘,‘SibSp‘,‘Parch‘,‘Fare‘,‘Embarked‘]   #用到的特征
2 alg = LinearRegression() #线性回归模型实例化对象
3 kf = KFold(titanic.shape[0],n_folds=3,random_state=1) #将m个平均分成3份进行交叉验证

③ 把数据传入模型 预测结果

 1 predictions = []
 2 #for循环: 训练集、测试集、交叉验证
 3 for train, test in kf:
 4     #print train
 5     #print test
 6     train_predictors = (titanic[predictors].iloc[train,:]) #将predictors作为测试特征
 7     #print train_predictors
 8     train_target = titanic[‘Survived‘].iloc[train]
 9     #print train_target
10     alg.fit(train_predictors,train_target)  #构建线性模型 样本的x(训练数据) 样本的y(标签值)
11     test_prediction = alg.predict(titanic[predictors].iloc[test,:]) #预测结果值
12     predictions.append(test_prediction)

4、算法概率计算

1 import numpy as np
2 #使用线性回归得到的结果是在区间【0,1】上的某个值,需要将该值转换成0或1
3 predictions = np.concatenate(predictions, axis=0)
4 predictions[predictions >.5] = 1
5 predictions[predictions <=.5] = 0
6 accury = sum(predictions[predictions == titanic[‘Survived‘]]) / len(predictions) #测试准确率 进行模型评估
7 print accury #精度值

5、集成算法 构造多个分类树

① 构造多个分类器

1 from sklearn.linear_model import LogisticRegression #逻辑回归
2 from sklearn import cross_validation
3 alg = LogisticRegression(random_state=1)
4 scores = cross_validation.cross_val_score(alg, titanic[predictors],titanic[‘Survived‘],cv=3)
5 print scores.mean()

② 随机森林

 1 from sklearn.ensemble import RandomForestClassifier
 2 from sklearn import cross_validation
 3 predictions = [‘Pclass‘,‘Sex‘,‘Age‘,‘SibSp‘,‘Parch‘,‘Fare‘,‘Embarked‘]
 4 # Initialize our algorithm with the default paramters
 5 # random_state = 1 表示此处代码多运行几次得到的随机值都是一样的,如果不设置,两次执行的随机值是不一样的
 6 # n_estimators  指定有多少颗决策树,树的分裂的条件是:
 7 # min_samples_split 代表样本不停的分裂,某一个节点上的样本如果只有2个了 ,就不再继续分裂了
 8 # min_samples_leaf 是控制叶子节点的最小个数
 9 alg = RandomForestClassifier(random_state=1,n_estimators=100,min_samples_split=4,min_samples_leaf=2)
10 #进行交叉验证
11 kf = cross_validation.KFold(titanic.shape[0],n_folds=3,random_state=1)
12 scores = cross_validation.cross_val_score(alg,titanic[predictors],titanic[‘Survived‘],cv=kf)
13 print scores.mean()

6、特征提取

 1 # ## 关于特征提取问题 (非常关键)
 2 # - 尽可能多的提取特征
 3 # - 看不同特征的效果
 4 # - 特征提取是数据挖掘里很- 要的一部分
 5 # - 以上使用的特征都是数据里已经有的了,在真实的数据挖掘里我们常常没有合适的特征,需要我们自己取提取
 6 ① 把多个特征组合成一个特征
 7 titanic[‘Familysize‘] = titanic[‘SibSp‘] + titanic[‘Parch‘] #家庭总共多少人
 8 titanic[‘NameLength‘] = titanic[‘Name‘].apply(lambda x: len(x)) #名字的长度
 9 import re
10
11 def get_title(name):
12     title_reserch = re.search(‘([A-Za-z]+)\.‘,name)
13     if title_reserch:
14         return title_reserch.group(1)
15     return ""
16 titles = titanic[‘Name‘].apply(get_title)
17 #print pandas.value_counts(titles)
18
19 #将称号转换成数值表示
20 title_mapping = {"Mr":1,"Miss":2,"Mrs":3,"Master":4,"Dr":5,"Rev":6,"Col":7,"Major":8,"Mlle":9,"Countess":10,"Ms":11,"Lady":12,"Jonkheer":13,"Don":14,"Mme":15,"Capt":16,"Sir":17}
21 for k,v in title_mapping.items():
22     titles[titles==k] = v
23     #print (pandas.value_counts(titles))
24 titanic["titles"] = titles #添加title特征

② 进行特征选择

 1 # 进行特征选择
 2 # 特征重要性分析
 3 # 分析 不同特征对 最终结果的影响
 4 # 例如 衡量age列的重要程度时,什么也不干,得到一个错误率error1,
 5 # 加入一些噪音数据,替换原来的值(注意,此时其他列的数据不变),又得到一个一个错误率error2
 6 # 两个错误率的差值 可以体现这一个特征的重要性
 7 import numpy as np
 8 from sklearn.feature_selection import SelectKBest,f_classif#引入feature_selection看每一个特征的重要程度
 9 import matplotlib.pyplot as plt
10
11 predictors = [‘Pclass‘,‘Sex‘,‘Age‘,‘SibSp‘,‘Parch‘,‘Fare‘,‘Embarked‘,‘Familysize‘,‘NameLength‘,‘titles‘]
12 selector = SelectKBest(f_classif,k=5)
13 selector.fit(titanic[predictors],titanic[‘Survived‘])
14 scores = -np.log10(selector.pvalues_)

③用视图的方式展示

1 plt.bar(range(len(predictors)),scores)
2 plt.xticks(range(len(predictors)),predictors,rotation=‘vertical‘)
3 plt.show()

7、集成分类器

 1 # 在竞赛中常用的耍赖的办法:集成多种算法,取最后每种算法的平均值,来减少过拟合
 2 from sklearn.ensemble import GradientBoostingClassifier
 3 import numpy as np
 4 # GradientBoostingClassifier也是一种随机森林的算法,可以集成多个弱分类器,然后变成强分类器
 5 algorithas = [
 6         [GradientBoostingClassifier(random_state=1,n_estimators=25,max_depth=3),[‘Pclass‘,‘Sex‘,‘Age‘,‘SibSp‘,‘Parch‘,‘Fare‘,‘Embarked‘,‘Familysize‘,‘NameLength‘,‘titles‘]],
 7         [LogisticRegression(random_state=1),[‘Pclass‘,‘Sex‘,‘Age‘,‘SibSp‘,‘Parch‘,‘Fare‘,‘Embarked‘,‘Familysize‘,‘NameLength‘,‘titles‘]]
 8         ]
 9 kf = KFold(titanic.shape[0],n_folds=3,random_state=1)
10 predictions = []
11 for train, test in kf:
12    train_target = titanic[‘Survived‘].iloc[train]
13    full_test_predictions = []
14    for alg,predictors in algorithas:
15        alg.fit(titanic[predictors].iloc[train,:],train_target)
16        test_prediction = alg.predict_proba(titanic[predictors].iloc[test,:].astype(float))[:,1]
17        full_test_predictions.append(test_prediction)
18    test_predictions = (full_test_predictions[0] + full_test_predictions[1]) / 2
19    test_predictions[test_predictions >.5] = 1
20    test_predictions[test_predictions <=.5] = 0
21    predictions.append(test_predictions)
22 predictions = np.concatenate(predictions,axis=0)
23 accury = sum(predictions[predictions == titanic[‘Survived‘]]) / len(predictions)#测试准确率
24 print accury

原文地址:https://www.cnblogs.com/cxfly/p/8505851.html

时间: 2024-08-30 16:40:35

Python机器学习:泰坦尼克号获救预测一的相关文章

python机器学习之KNN预测QSAR生物浓缩类别

KNN预测QSAR生物浓缩类别 数据来源:http://archive.ics.uci.edu/ml/datasets/QSAR+Bioconcentration+classes+dataset import numpy import pandas #导入Excel文件 from sklearn.neighbors import KNeighborsClassifier #机器学习算法库,没有深度学习算法 shen=pandas.read_csv(r"D:\Python\代码\Machine-L

泰坦尼克号生存预测(python)

1 数据探索 对数据进行一个整体的理解 1.1 查看数据都有一些什么特征 import pandas as pd import seaborn as sns %matplotlib inline titanic = pd.read_csv('G:\\titanic\\train.csv')titanic.sample(10) 获取数据的10行记录进行观察,初步了解数据的组成,可以看到Age.Cabin里面是存在缺失值的,在进一步理解数据的统计量后再进行数据处理,观察各特征的最大最小值等,可以发现

分享《Python机器学习—预测分析核心算法》高清中文版PDF+高清英文版PDF+源代码

下载:https://pan.baidu.com/s/1sfaOZmuRj14FWNumGQ5ahw 更多资料分享:http://blog.51cto.com/3215120 <Python机器学习-预测分析核心算法>高清中文版PDF+高清英文版PDF+源代码高清中文版,338页,带目录和书签,文字能够复制粘贴.高清英文版,361页,带目录和书签,文字能够复制粘贴.中英文两版对比学习.配套源代码.经典书籍,讲解详细. 其中,高清中文版如图所示: 原文地址:http://blog.51cto.c

《Python机器学习—预测分析核心算法》高清中文版PDF+高清英文版PDF+源代码

资源链接:https://pan.baidu.com/s/1J61jH-fqwGceoId6F8mr5Q<Python机器学习-预测分析核心算法>高清中文版PDF+高清英文版PDF+源代码高清中文版,338页,带目录和书签,文字能够复制粘贴.高清英文版,361页,带目录和书签,文字能够复制粘贴.中英文两版对比学习.配套源代码.经典书籍,讲解详细.其中,高清中文版如图所示: 原文地址:http://blog.51cto.com/14063572/2317037

分享《Python机器学习—预测分析核心算法》+PDF+源码+Michael Bowles+沙嬴

下载:https://pan.baidu.com/s/1JnyeiZwh74MIWo1LB4pIqA 更多资料分享:http://blog.51cto.com/14087171 <Python机器学习-预测分析核心算法>高清中文版PDF+高清英文版PDF+源代码高清中文版,338页,带目录和书签,文字能够复制粘贴.高清英文版,361页,带目录和书签,文字能够复制粘贴.中英文两版对比学习.配套源代码.经典书籍,讲解详细. 其中,高清中文版如图所示: 原文地址:http://blog.51cto.

学习《Python机器学习—预测分析核心算法》高清中文版PDF+高清英文版PDF+源代码

在学习和研究机器学习的时候,面临令人眼花缭乱的算法,机器学习新手往往会不知所措.从算法和Python 语言实现的角度,认识机器学习.专注于两类核心的"算法族",即惩罚线性回归和集成方法,并通过代码实例来展示所讨论的算法的使用原则.详细讨论预测模型的两类核心算法.预测模型的构建.惩罚线性回归和集成方法的具体应用和实现. 参考: <Python机器学习-预测分析核心算法>高清中文版PDF+高清英文版PDF+源代码 高清中文版,338页,带目录和书签,文字能够复制粘贴. 高清英文

python好书推荐:【A028】[异步图书].Python机器学习:预测分析核心算法

Python机器学习:预测分析核心算法pdf获取方式:点这里 请注意,本并没有直接告诉薇姬,他认为她是一个具有奉献精神和坚定信念的人.然而,对于薇姬来说,她不难承认自己具备这些特征,也很容易将其应用于自己的工作中.即使薇姬认为自己并不具备奉献精神和坚定信念,也无损这种新关系.Python机器学习:预测分析核心算法. 不管薇姬的自我评价如何,本说的都是实话,所以他的观点在最坏的情况下则会被忽视,在最好的情况下则会促使薇姬对自己(和本)感觉良好.基于人的本性,即便薇姬在现实中并不具有奉献精神和坚定信

泰坦尼克号生存预测分析

此文发表在简书,复制过来,在下方放上链接. https://www.jianshu.com/p/a09b4dc904c9 泰坦尼克号生存预测 1.背景与挖掘目标 “泰坦尼克号”的沉没是历史上最臭名昭著的海难之一.1912年4月15日,泰坦尼克号在处女航中与冰山相撞后沉没,2224名乘客和机组人员中有1502人死亡.这场耸人听闻的悲剧震惊了国际社会,并导致了更好的船舶安全条例. 造成沉船事故的原因之一是没有足够的救生艇供乘客和机组人员使用.虽然在沉没中幸存了一些运气,但一些人比其他人更容易生存,如

python机器学习《回归 一》

唠嗑唠嗑 依旧是每一次随便讲两句生活小事.表示最近有点懒,可能是快要考试的原因,外加这两天都有笔试和各种面试,让心情变得没那么安静的敲代码,没那么安静的学习算法.搞得第一次和技术总监聊天的时候都不太懂装饰器这个东东,甚至不知道函数式编程是啥:昨天跟另外一个经理聊天的时候也是没能把自己学习的算法很好的表达出来,真是饱暖思**啊.额,好像用词不当,反正就是人的脑袋除了想着吃肉还要多运动运动,幸好的是每天晚上的瑜伽能够让自己足够沉下心来冷静冷静.回想起当初的各种面试,现在的自己毫无疑问能够很好的表达那