无意间在网易云课堂上找了一个Kaggle案例,泰坦尼克获救船员预测,在此之前我是从没接触过kaggle,毕竟是刚入门的小白,看着视频,算是真正实战了一次,主要是在这个过程中学到了很多东西。
下面视频地址
http://study.163.com/course/courseLearn.htm?courseId=1003551009#/learn/video?lessonId=1004052093&courseId=1003551009
还有数据集,是在GitHub里面找的
https://github.com/fayduan/Kaggle_Titanic
里面有大佬的ipython 源码,不过我也没仔细去看。还是按照视频上的一步一步下来。
首先是整体的流程我大概总结了一下。
- 拿到数据集分析数据
- 找出数据集中每个特征中是否含有缺失值或者异常值,填充缺失值
- 将特征中为字符的特征值转换为数值型,比如将性别男女用0和1表示
- 分析数据集适合采用什么算法进行预测,比如适合用分类算法还是适合用回归算法
- 建立特征工程(这算是整个过程下来最重要的)
- K阶交叉验证,划分数据集(k-1份训练,1份验证,每次换一个。重复k次,用来调优),
- 将交叉验证后的数据集扔进算法中进行训练及测试准确率。
接下来代码实现(按照视频教程实现)。
1导入数据,进行分析
import pandas as pd
import numpy as np
titanic = pd.read_csv("数据集/titannike/train.csv")
#将数据集中所有的样本特征属性打印出来,每一列的相关数据信息
titanic
2数据预处理
#数据预处理, 填充缺失值以及将特征中含有字符的转换为数值型
#将年龄这一列的数据缺失值进行填充
titanic["Age"] = titanic["Age"].fillna(titanic["Age"].median())
#titanic
print(titanic.describe())
#打印这一列特征中的特征值都有哪些
print(titanic["Sex"].unique())
#将性别中的男女设置为0 1 值 把机器学习不能处理的自字符值转换成能处理的数值
#loc定位到哪一行,将titanic['Sex'] == 'male'的样本Sex值改为0
titanic.loc[titanic["Sex"] == "male","Sex"] = 0
titanic.loc[titanic["Sex"] == "female","Sex"] = 1
#print(titanic["Sex"].unique)
#print(titanic["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
print(titanic["Embarked"].unique())
3通过线性回归进行预测(拿回归做分类确实有点鸡肋)
import numpy as np
#将sklearn中的线性回归的类导入进去,采用二分类进行分类预测
from sklearn.linear_model import LinearRegression
#交叉验证库,将训练集进行切分交叉验证取平均
from sklearn.model_selec