机器学习分析步骤:提出问题
2. 理解数据导入数据
采集数据
查看数据集信息
3. 数据清洗数据预处理
特征工程
4. 构建模型
5. 模型评估
6. 方案实施提交结果
报告撰写
一、提出问题
什么样的人可以在泰坦尼克号事故中生存下来
二、理解数据
① 导入数据(pd.read_csv)
先导入处理数据包Numpy和Pandas导入文件的时候注意应该用左划线(“/”),而在文件中复制路径时是右划线D:\BaiduYunDownload
路径可以用双引号,也可以用单引号,结果是一样的
这里将泰坦尼克号数据中的train训练数据和test测试数据导入,测试数据集比训练数据集少1列,缺少的这些数据由接下来的机器学习进行计算。
② 数据合并(append)
因为train数据和test数据是分开进行导入的,为了方便进行数据清洗,先将两种数据进行合并
#数据1. append(#数据2,ignore_index=True)ignore_index默认为False,默认情况下会把添加的数据的索引行号保留下来,若ignore_index=Ture则会对所有的行重新自动建立索引。
③ 查看数据集信息(head()、describe()、info())
Age:年龄; Cabin:客舱号; Embarked:上船的港口号;
Fare:船票费用; Name:姓名;
Parch:船上的不同代直系亲属数(父母子女);
SibSp:船上的同代直系亲属数(兄弟姐妹或配偶);
PassengerId:乘客编号; Pclass:客舱等级(1为1等舱,3为3等舱);
Sex:性别; Survived:是否存活(1代表存活,0代表死亡); Ticket:船票编号
有的数据随便是数值,但是是字符串类型的,不能进行运算,在实际计算中应该确认好各数据的类型
显示Age、Cabin、Fare、Embarked、Survived列是有缺失值的,其中Age列数据缺失约20%,Cabin列数据缺失约80%。确认数据缺失情况有注意
三、数据清洗
① 数据预处理选择子集
以上所有数据列均有用,无需选择子集列名重命名
无需重命名,我都能看懂缺失数据处理
根据情况对有缺失值的数据列进行填充
其中Age、Fare列是数值型数据,可以填充该列数据的平均值,尽可能少影响总体数值
Cabin和Embarked列是字符串数据,可以填充出现次数最多的数据进行填充,若需要填充的数据太多,可填充一种新的数据,方便以后计算
其中Embarked数据列缺失数据少,填充使用频率最高的‘S’;Cabin因缺失数据太多,填充一个新的字幕‘U’
处理完的数据信息如下:数据类型转换
数据排序
异常值处理
② 特征工程
特征工程即最大限度地从原始数据中提取特征X以供机器学习算法和模型使用
特征工程分为特征提取与特征选择和特征降维特征提取数值类型:直接使用
时间序列(在一段时间内定期收集的数据):转成单独年、月、日
分类数据(字符串数据也属于其中):用数值代替类别One-Hot编码
直接分类:Sex数据列(性别)
将‘Sex’数据列的数据映射为数值
本来应该是male或者female的数据列,换成了1或者0
直接分类:Embarked数据列(pd.get_dummies)
将‘Embarked’数据列的数据拆分为三个不同的列,空值使用0填充,列名使用Embarked作为前缀
将其插入至suoyou数据集,并删除原有的‘Embarked’数据列
concat为连接函数,默认为axis=0,
若axis=0时,类似于onion函数,索引值沿用原来的
若axis=1,重新建立索引值
inplace参数的理解:
修改一个对象时:
inplace=True:不创建新的对象,直接对原始对象进行修改;
inplace=False:对数据进行修改,创建并返回新的对象承载其修改结果。
直接分类:Pclass数据列(客舱等级)(pd.get_dummies)
字符串类型:Name数据列
显示Name数据列,会发现名字都是由 “名,头衔. 姓”组成的字符串格式,头衔可以提取出来进行分析
首先建立分离函数,并使用map方法将整列的头衔全部提取出来
分离函数中使用split方法进行分离,使用strip方法去除字符串的空格
再将头衔进行归类,建立Series并使用map方法使其一一对应,将其添加进数据表,并删除原有'Name'数据列
字符串类型:Cabin数据列(lambda函数)
Cabin的数据中有的只有一个字母,有的有多个字母,为了方便,取所有数据中的首字母进行分析
取首字母的函数可使用lambda进行建立
lambda 变量:表达式
如:lambda c:c[0]
字符串类型:SibSp数据列和Parch数据列
SibSp数据列和Parch数据列的特征是可以提取与合并的
SibSp数值与Parch数值的和再加一,即乘客的家庭人员数量,通过家庭人员数量,可以划分出家庭规模的范围,使用lambda方法进行函数设定
函数也可以是关系表达式
将familyDf添加进数据集中
suoyou=pd.concat([suoyou,familyDf],axis=1)
③ 特征选择
相关系数法:计算各个特征的相关系数
特征选择
根据相关性系数的大小,选择头衔、客舱等级、家庭大小、船票价格、船舱号、登船渡口、性别数据列进行分析
④ 构建模型
建立训练数据集和测试数据集
使用训练数据和某个机器学习算法得到机器学习模型,再用测试数据评估模型
首先将suoyou数据集拆分回train数据和test数据
因为行号是从0开始的,所以选择行号等于sourceRow时,应该选择0到sourceRow-1
shape表示多少行和列,shape[0]为多少行,shape[1]为多少列
再将train数据进一步拆分为训练与测试数据
前80%为训练数据,后20%为测试数据
选择并训练机器学习算法(此处选择逻辑回归算法)
选择与训练机器学习算法步骤:导入算法(import)
创建模型(model)
训练模型(model.fit)
评估模型(model.score)
score语句得到的是模型的正确率,可以看出正确率还是较高的
预测结果,并将数据列的类型转换为Kaggle可识别的整数型,并使用series将乘客ID与survive情况一一对应
将预测结果导出至csv文件
predDf.to_csv( 'titanic_pred.csv' , index = False )