编写KNN算法预测泰坦尼克号存活率
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算法预测泰坦尼克号存活率相关推荐
- 机器学习 手写KNN算法预测城市空气质量
文章目录 一.KNN算法简介 二.KNN算法实现思路 三.KNN算法预测城市空气质量 1. 获取数据 2. 生成测试集和训练集 3. 实现KNN算法 一.KNN算法简介 KNN(K-Nearest N ...
- python泰坦尼克号生存预测论文_【数据分析】预测泰坦尼克号存活率 -- Python决策树...
此博客仅为我业余记录文章所用,发布到此,仅供网友阅读参考,如有侵权,请通知我,我会删掉. 前言 最近学习了 预测泰坦尼克号存活率,是一个烂大街的项目了,它是kaggle科学竞赛网站上一个入门的数据分析 ...
- KNN算法预测iris数据集
KNN算法预测iris数据集 1.数据集介绍 鸢尾花灰Iris数据集中有150个样本,每个样本有4个特征,1个标签.其中,鸢尾花种类可取0.1.2,分别代表山鸢尾setosa.变色鸢尾versicol ...
- 不同k值对KNN算法预测准确率的影响
不同k值对KNN算法预测准确率的影响 本文通过KNN算法对鸢尾花分类案例,通过尝试集不同的k值来查看预测准确率和误差率的情况 from __future__ import print_function ...
- sklearn集合算法预测泰坦尼克号幸存者
原文: http://ihoge.cn/2018/sklearn-ensemble.html 随机森林分类预测泰坦尼尼克号幸存者 import pandas as pd import numpy as ...
- 机器学习实战——KNN算法预测电影类型
预测电影类型 现有爱情片和动作片(不是爱情动作片,雾)的打斗场面和接吻场面的次数统计,然后给出一个电影打斗场面和接吻场面出现的次数,预测其类型. 那么如何预测呢?当然用KNN了. KNN算法的原理就是 ...
- python空气质量分析与预测_干货!如何用 Python+KNN 算法实现城市空气质量分析与预测?...
原标题:干货!如何用 Python+KNN 算法实现城市空气质量分析与预测? 作者 | 李秋键 责编 | 伍杏玲 封图 | CSDN 付费下载自东方 IC 出品 | CSDN(ID:CSDNnews) ...
- 机器学习KNN算法实践:预测城市空气质量
出品:Python数据之道 作者:叶庭云 整理:Lemon 机器学习KNN算法实践 预测城市空气质量 「Python数据之道」导读: 之前在公众号上分享过 "图解KNN算法" 的内 ...
- KNN算法实例(随机点分类可视化+图片数字预测)
随机点分类可视化 KNN算法: 本蒟蒻刚开始学习机器学习,定义这种事还是交给大佬吧 这个博客写的也不错 https://www.cnblogs.com/listenfwind/p/10311496.h ...
最新文章
- php的反射技术,PHP 反射使用
- php怎么统计数量,怎样做PHP人数在线统计
- sh: lmstat: 没有那个文件或目录_没有天生的合适,只有磨合出来的感情
- VS2010 手动为控件添加事件处理函数
- python 自动输入_Python自动输入【新手必学】
- 在Tomcat配置JNDI数据源的三种方式
- css布局 右固定,CSS左侧固定右侧自适应的五种布局方法
- DasViewer加载大疆智图、CC等三维模型无空间坐标的解决方法
- Atitit prgrmlan 编程语言主题列表 \0 it impttech topic\prgrmlan topic编程语言专题\AOP拦截器 表达式写法.docx \0 it impttec
- 页面加载完就执行的设置?
- 数学算法对计算机编程的优化
- 台式计算机颜色如何矫正,台式机怎么颜色校正操作教程
- Linux软件更新与安装
- 推荐好用的两个搜索下载书籍网站
- 如何锻炼提高自己的逻辑思维?这里给你7个方法!
- CSS中有哪几种方式能隐藏页面元素(8种)
- 精耕“大数据” 做精准营销
- powershell创建新员工AD账号
- Android游戏: 中国象棋-局域网版
- Ntrip协议访问千寻位置服务
热门文章
- android 微信评论功能,Android仿微信朋友圈点击评论自动定位到相关行功能
- 打印机共享计算机密码,打印机共享需要密码,教你打印机共享需要密码怎么解决...
- labview制成app_我为什么选择使用Labview来做软件?
- uni-app学习笔记--浏览vue-cli创建uni-app模板的文件结构
- 关于java中的魔幻数字47你知道么
- MySQl安装与学习,内附SQlyog
- 基于CNN卷积神经网络的商品识别(毕设)
- 一文读懂keepalive的工作原理
- k8s-污点和容忍度
- 推荐一个练习英语听力的网站