作为零基础非科班的学生,我从去年保研结束敲定下家后,决心系统地学习一下开始接触机器学习的知识,因此报名了uda家的网课。uda家的课最大的特点是设计精良和贵……值得一提的是某些公司的面试题就是uda家的项目原题……
设计精良主要有以下几点:
1。为了提高用户交互体验,刻意设计成了4,5分钟一个短片知识点或者一个小quiz,提醒用户这是在上课。
2。独特的part代码审阅+review机制
现在主要来谈谈每个章节的故事,首先我们P0拿到的是泰坦尼克生存预测项目,这在kaggle上是一个入门项目,在uda里主要使用python来完成。在这个项目中要求我们利用乘客数据预测乘客的生存率,数据格式如下:Survived:是否存活(0代表否,1代表是)
Pclass:社会阶级(1代表上层阶级,2代表中层阶级,3代表底层阶级)
Name:船上乘客的名字
Sex:船上乘客的性别
Age:船上乘客的年龄(可能存在 NaN)
SibSp:乘客在船上的兄弟姐妹和配偶的数量
Parch:乘客在船上的父母以及小孩的数量
Ticket:乘客船票的编号
Fare:乘客为船票支付的费用
Cabin:乘客所在船舱的编号(可能存在 NaN)
Embarked:乘客上船的港口(C 代表从 Cherbourg 登船,Q 代表从 Queenstown 登船,S 代表从 Southampton 登船)
当作为一个数据小白时,我们第一时间应该先观察数据,比如使用
# 加载数据集
in_file = 'titanic_data.csv'
full_data = pd.read_csv(in_file)
# 显示数据列表中的前几项乘客数据
display(full_data.head())
可以得到:
通过观察数据特征我们可以知道,这个表格记录的乘客信息是比较全面的,和我们常见的机票一样,同时也可以使用最简单的预测练练手:
最简单的预测
如果我们要预测泰坦尼克号上的乘客是否存活,但是我们又对他们一无所知,那么最好的预测就是船上的人无一幸免。
def predictions_0(data):
""" 不考虑任何特征,预测所有人都无法生还 """
predictions = []
for _, passenger in data.iterrows():
# 预测 'passenger' 的生还率
predictions.append(0)
# 返回预测结果
return pd.Series(predictions)
# 进行预测
predictions = predictions_0(data)
结果只有:61.62%,不是很高。然后项目又要求根据某一个特征进行预测,比如考虑性别的情况,先要求绘制了一个关于性别和最终遇难与否的图:
我们就可以发现男性大多数都遇难了,女性里大多数都存活了,因此我们假如做一个推断,男性全部都遇难,女性全部存活,那么正确率将可以达到:78.68%
然后项目又要求考虑两个特征进行预测:我们在这里加入年龄考虑,先绘制不同年龄的男性生存遇难情况:
survival_stats(data, outcomes, 'Age', ["Sex == 'male'"])
我们就可以发现小于10岁的男孩基本都存活了,因此我们可以额外增加一条逻辑,如果男性小于10岁,肯定是存活的。此时正确率已经攀升到79.35%.
最后项目要求自己额外选择特征,适用条件逻辑语句,让正确率达到80%以上:
你自己的预测模型
添加年龄(Age)特征与性别(Sex)的结合比单独使用性别(Sex)也提高了不少准确度。现在该你来做预测了:找到一系列的特征和条件来对数据进行划分,使得预测结果提高到80%以上。这可能需要多个特性和多个层次的条件语句才会成功。你可以在不同的条件下多次使用相同的特征。Pclass,Sex,Age,SibSp 和 Parch 是建议尝试使用的特征。
使用 survival_stats 函数来观测泰坦尼克号上乘客存活的数据统计。
最后在mentor的建议下,我达到了81.82%,思路与前文一样,大致来讲是这样的:
1.观察每个特征与存活的关系,发现年龄、性别,客舱等级,有无兄弟姐妹,有无父母子女的区分性较好 2.发现两两特征中,年龄,性别与有无兄弟姐妹和有无父母子女关联性较大,比较准确率后,选择有无兄弟姐妹 3.对每个客舱等级分析后,针对不同客舱等级比较讨论 4.选择不同的年龄区段和性别,找出特征值明显的区域
其中还挑了大于10岁的头等舱的男性作为可视化展示:
survival_stats(data, outcomes, 'Age',["Sex == 'male'","Pclass == 1","Age > 10"])
通篇来讲,这个项目给“0coding”基础的人来说,是很好的练习项目,项目本身从简单到复杂,主要锻炼了制作一些基本数据图和基本语句的能力,尤其是几个可视化图画得非常好。后续我来继续讲讲后面的项目实现