1.读取文件:titanic3.csv
2.数据预处理
3.分析相关性,定义合适的特征变量
4.训练模型,得出存活率

首先引用库(没用的和有用的都在里面,需要你们自己去选择):

from sklearn.tree import DecisionTreeClassifier, export_graphviz
from sklearn.ensemble import RandomForestClassifier
from sklearn.metrics import accuracy_score, roc_auc_score, precision_score,recall_score, f1_score, roc_curve
from pydotplus import graph_from_dot_data
import graphviz
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from sklearn.model_selection import train_test_split, KFold, GridSearchCV
from sklearn.preprocessing import Imputer, LabelEncoder, OneHotEncoder,LabelBinarizer
from sklearn.feature_selection import SelectKBest, SelectPercentile,SelectFromModel, chi2
from sklearn.neighbors import KernelDensity
from sklearn.neighbors import KNeighborsClassifier
from sklearn import model_selection
from sklearn.metrics import confusion_matrix  #混淆矩阵
import operator`

读文件,并查看文件数据情况:

an=pd.read_csv('titanic3.csv')
an.info()

看到如下结果:
发现 age,cabin,fare都有缺失值(其他变量与存活率关系不大,可不考虑),接下来就是数据预处理了,先填充,然后再选特征变量。

填充如下图:

an['age']=an['age'].fillna(an['age'].median())

对于embarked我们用1,2,3来替代地点:

mapDict={'Southampton':1,'Cherbourg':2,'Queenstown':3}
an['embarked']=an['embarked'].map(mapDict)
an['embarked']=an['embarked'].fillna('1')

对于cabin,pclass也是替代,并用0填充:

an['cabin']=an['cabin'].fillna('0')
an[ 'cabin' ] = an[ 'cabin' ].map( lambda c : 1 )
an['pclass']=an['pclass'].map(lambda c:int(c[0]))

其他数据也类似:

sex_Dict={'male':1,'female':0}
an['sex']=an['sex'].map(sex_Dict)
an['fare']=an['fare'].fillna(an['fare'].mean())
an[ 'familysize' ] = an[ 'parch' ] + an[ 'sibsp' ] + 1
an['fare']=an['fare']/100

对name也进行预处理:

def getTitle(name):str1=name.split( ',' )[1] str2=str1.split( '.' )[0]str3=str2.strip()return str3
titleDf = pd.DataFrame()
titleDf['title'] = an['name'].map(getTitle)
titleDf.head()
title_mapDict = {"Capt":       "Officer","Col":        "Officer","Major":      "Officer","Jonkheer":   "Royalty","Don":        "Royalty","Sir" :       "Royalty","Dr":         "Officer","Rev":        "Officer","the Countess":"Royalty","Dona":       "Royalty","Mme":        "Mrs","Mlle":       "Miss","Ms":         "Mrs","Mr" :        "Mr","Mrs" :       "Mrs","Miss" :      "Miss","Master" :    "Master","Lady" :      "Royalty"}titleDf['title'] = titleDf['title'].map(title_mapDict)
titleDf = pd.get_dummies(titleDf['title'])
titleDf.head()
an=pd.concat([an,titleDf],axis=1)
an.drop('name',axis=1,inplace=True)

然后就可以查看相关度,选择特征变量:

corrDf = an.corr()
corrDf['survived'].sort_values(ascending =False)


然后我是选择了[‘pclass’,‘sex’,‘fare’, ‘familysize’,‘Mrs’,‘Miss’,‘Master’]作为特征变量,划分训练集和测试集:

X = np.array(an[['pclass','sex','fare', 'familysize','Mrs','Miss','Master']])
Y=np.array(an['survived'])
X_train, X_test, Y_train, Y_test = train_test_split(X, Y, test_size = 0.5, random_state = 0)

接下来就是定义KNN算法(也可以直接调用库),KNN算法原理就是计算距离,将测试集标签定义为离训练集距离最小的k个点中最多的标签类中,我们可以直接用numpy进行矩阵的距离运算,然后根据距离大小排序(升序),从前k个点中找出其中标签最多的那个标签,这个就是我们对测试集预测的标签,再与测试集本身的标签对比可以计算出预测准确率。KNN如下:

#测试集应该一行一行输入
def knn(k,testdata,traindata,labels):traindatasize=traindata.shape[0]   #训练集行数dif=np.tile(testdata,(traindatasize,1))-traindata   #矩阵相减sqdif=dif**2     #每个数都平方sumsqdif=sqdif.sum(axis=1)   #将一个矩阵的每一行向量相加,二维变一维distance=sumsqdif**0.5      #距离sortdistance=distance.argsort()  #将distance中的元素从小到大排列,提取其对应的index(索引),然后输出到sortdistancecount={}for i in range(0,k):vote=labels[sortdistance[i]]  #sortdistance[i]为原来元素的位置count[vote]=count.get(vote,0)+1    #累计次数sortcount=sorted(count.items(),key=operator.itemgetter(1),reverse=True)return sortcount[0][0]    #返回距离最近的那个标签

这样之后我们就可以用自己编写的KNN了,并画出混淆矩阵:

le=len(X_test)
a=b=c=d=0
for i in range(le):q=knn(50,X_test[i],X_train,Y_train)if Y_test[i]==1 and q==1:d+=1elif Y_test[i]==1 and q==0:c+=1elif Y_test[i]==0 and q==1:b+=1elif Y_test[i]==0 and q==0: a+=1

得出准确率和混淆矩阵:

accury=(a+d)/len(X_test)
array=np.zeros([2,2])
array[0][0]=a
array[0][1]=b
array[1][0]=c
array[1][1]=d
print(array)  #混淆矩阵
print("finish!")
print("准确率为:{}%".format(accury*100))

输出为:

准确率很低,算法还需要改善,小白作者会加油的!完整代码给你们:

#KNN算法编写
from sklearn.tree import DecisionTreeClassifier, export_graphviz
from sklearn.ensemble import RandomForestClassifier
from sklearn.metrics import accuracy_score, roc_auc_score, precision_score,recall_score, f1_score, roc_curve
from pydotplus import graph_from_dot_data
import graphviz
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from sklearn.model_selection import train_test_split, KFold, GridSearchCV
from sklearn.preprocessing import Imputer, LabelEncoder, OneHotEncoder,LabelBinarizer
from sklearn.feature_selection import SelectKBest, SelectPercentile,SelectFromModel, chi2
from sklearn.neighbors import KernelDensity
from sklearn.neighbors import KNeighborsClassifier
from sklearn import model_selection
from sklearn.metrics import confusion_matrix  #混淆矩阵
import operator
an=pd.read_csv('titanic3.csv')
an.info()an['age']=an['age'].fillna(an['age'].median())
mapDict={'Southampton':1,'Cherbourg':2,'Queenstown':3}
an['embarked']=an['embarked'].map(mapDict)
an['embarked']=an['embarked'].fillna('1')
an['cabin']=an['cabin'].fillna('0')
an[ 'cabin' ] = an[ 'cabin' ].map( lambda c : 1 )
an['pclass']=an['pclass'].map(lambda c:int(c[0]))
sex_Dict={'male':1,'female':0}
an['sex']=an['sex'].map(sex_Dict)
an['fare']=an['fare'].fillna(an['fare'].mean())
an[ 'familysize' ] = an[ 'parch' ] + an[ 'sibsp' ] + 1
an['fare']=an['fare']/100
def getTitle(name):str1=name.split( ',' )[1] str2=str1.split( '.' )[0]str3=str2.strip()return str3
titleDf = pd.DataFrame()
titleDf['title'] = an['name'].map(getTitle)
titleDf.head()
title_mapDict = {"Capt":       "Officer","Col":        "Officer","Major":      "Officer","Jonkheer":   "Royalty","Don":        "Royalty","Sir" :       "Royalty","Dr":         "Officer","Rev":        "Officer","the Countess":"Royalty","Dona":       "Royalty","Mme":        "Mrs","Mlle":       "Miss","Ms":         "Mrs","Mr" :        "Mr","Mrs" :       "Mrs","Miss" :      "Miss","Master" :    "Master","Lady" :      "Royalty"}titleDf['title'] = titleDf['title'].map(title_mapDict)
titleDf = pd.get_dummies(titleDf['title'])
titleDf.head()
an=pd.concat([an,titleDf],axis=1)
an.drop('name',axis=1,inplace=True)
an.head()corrDf = an.corr()
corrDf['survived'].sort_values(ascending =False)X = np.array(an[['pclass','sex','fare', 'familysize','Mrs','Miss','Master']])
Y=np.array(an['survived'])
X_train, X_test, Y_train, Y_test = train_test_split(X, Y, test_size = 0.5, random_state = 0)
print(len(X_test))
print(len(X_train))#测试集应该一行一行输入
def knn(k,testdata,traindata,labels):traindatasize=traindata.shape[0]   #训练集行数dif=np.tile(testdata,(traindatasize,1))-traindata   #矩阵相减sqdif=dif**2     #每个数都平方sumsqdif=sqdif.sum(axis=1)   #将一个矩阵的每一行向量相加,二维变一维distance=sumsqdif**0.5      #距离sortdistance=distance.argsort()  #将x中的元素从小到大排列,提取其对应的index(索引),然后输出到ycount={}for i in range(0,k):vote=labels[sortdistance[i]]  #sortdistance[i]为原来元素的位置count[vote]=count.get(vote,0)+1    #累计次数sortcount=sorted(count.items(),key=operator.itemgetter(1),reverse=True)return sortcount[0][0]    #返回距离最近的那个标签le=len(X_test)
a=b=c=d=0
for i in range(le):q=knn(50,X_test[i],X_train,Y_train)if Y_test[i]==1 and q==1:d+=1elif Y_test[i]==1 and q==0:c+=1elif Y_test[i]==0 and q==1:b+=1elif Y_test[i]==0 and q==0: a+=1accury=(a+d)/len(X_test)
array=np.zeros([2,2])
array[0][0]=a
array[0][1]=b
array[1][0]=c
array[1][1]=d
print(array)
print("finish!")
print("准确率为:{}%".format(accury*100))

编写KNN算法预测泰坦尼克号存活率相关推荐

  1. 机器学习 手写KNN算法预测城市空气质量

    文章目录 一.KNN算法简介 二.KNN算法实现思路 三.KNN算法预测城市空气质量 1. 获取数据 2. 生成测试集和训练集 3. 实现KNN算法 一.KNN算法简介 KNN(K-Nearest N ...

  2. python泰坦尼克号生存预测论文_【数据分析】预测泰坦尼克号存活率 -- Python决策树...

    此博客仅为我业余记录文章所用,发布到此,仅供网友阅读参考,如有侵权,请通知我,我会删掉. 前言 最近学习了 预测泰坦尼克号存活率,是一个烂大街的项目了,它是kaggle科学竞赛网站上一个入门的数据分析 ...

  3. KNN算法预测iris数据集

    KNN算法预测iris数据集 1.数据集介绍 鸢尾花灰Iris数据集中有150个样本,每个样本有4个特征,1个标签.其中,鸢尾花种类可取0.1.2,分别代表山鸢尾setosa.变色鸢尾versicol ...

  4. 不同k值对KNN算法预测准确率的影响

    不同k值对KNN算法预测准确率的影响 本文通过KNN算法对鸢尾花分类案例,通过尝试集不同的k值来查看预测准确率和误差率的情况 from __future__ import print_function ...

  5. sklearn集合算法预测泰坦尼克号幸存者

    原文: http://ihoge.cn/2018/sklearn-ensemble.html 随机森林分类预测泰坦尼尼克号幸存者 import pandas as pd import numpy as ...

  6. 机器学习实战——KNN算法预测电影类型

    预测电影类型 现有爱情片和动作片(不是爱情动作片,雾)的打斗场面和接吻场面的次数统计,然后给出一个电影打斗场面和接吻场面出现的次数,预测其类型. 那么如何预测呢?当然用KNN了. KNN算法的原理就是 ...

  7. python空气质量分析与预测_干货!如何用 Python+KNN 算法实现城市空气质量分析与预测?...

    原标题:干货!如何用 Python+KNN 算法实现城市空气质量分析与预测? 作者 | 李秋键 责编 | 伍杏玲 封图 | CSDN 付费下载自东方 IC 出品 | CSDN(ID:CSDNnews) ...

  8. 机器学习KNN算法实践:预测城市空气质量

    出品:Python数据之道 作者:叶庭云 整理:Lemon 机器学习KNN算法实践 预测城市空气质量 「Python数据之道」导读: 之前在公众号上分享过 "图解KNN算法" 的内 ...

  9. KNN算法实例(随机点分类可视化+图片数字预测)

    随机点分类可视化 KNN算法: 本蒟蒻刚开始学习机器学习,定义这种事还是交给大佬吧 这个博客写的也不错 https://www.cnblogs.com/listenfwind/p/10311496.h ...

最新文章

  1. php的反射技术,PHP 反射使用
  2. php怎么统计数量,怎样做PHP人数在线统计
  3. sh: lmstat: 没有那个文件或目录_没有天生的合适,只有磨合出来的感情
  4. VS2010 手动为控件添加事件处理函数
  5. python 自动输入_Python自动输入【新手必学】
  6. 在Tomcat配置JNDI数据源的三种方式
  7. css布局 右固定,CSS左侧固定右侧自适应的五种布局方法
  8. DasViewer加载大疆智图、CC等三维模型无空间坐标的解决方法
  9. Atitit prgrmlan 编程语言主题列表 \0 it impttech topic\prgrmlan topic编程语言专题\AOP拦截器 表达式写法.docx \0 it impttec
  10. 页面加载完就执行的设置?
  11. 数学算法对计算机编程的优化
  12. 台式计算机颜色如何矫正,台式机怎么颜色校正操作教程
  13. Linux软件更新与安装
  14. 推荐好用的两个搜索下载书籍网站
  15. 如何锻炼提高自己的逻辑思维?这里给你7个方法!
  16. CSS中有哪几种方式能隐藏页面元素(8种)
  17. 精耕“大数据” 做精准营销
  18. powershell创建新员工AD账号
  19. Android游戏: 中国象棋-局域网版
  20. Ntrip协议访问千寻位置服务

热门文章

  1. android 微信评论功能,Android仿微信朋友圈点击评论自动定位到相关行功能
  2. 打印机共享计算机密码,打印机共享需要密码,教你打印机共享需要密码怎么解决...
  3. labview制成app_我为什么选择使用Labview来做软件?
  4. uni-app学习笔记--浏览vue-cli创建uni-app模板的文件结构
  5. 关于java中的魔幻数字47你知道么
  6. MySQl安装与学习,内附SQlyog
  7. 基于CNN卷积神经网络的商品识别(毕设)
  8. 一文读懂keepalive的工作原理
  9. k8s-污点和容忍度
  10. 推荐一个练习英语听力的网站