异常值迷你项目

项目简介

此项目有两部分。在第一部分中将运行回归,然后识别并删除具有最大残差的 10% 的点。然后,根据 Sebastian 在课程视频中所建议的,从数据集中删除那些异常值并重新拟合回归。

在第二部分中,你将熟悉安然财务数据中的一些异常值,并且了解是否/如何删除它们。

带有异常值

Sebastian 向我们描述了改善回归的一个算法,你将在此项目中实现该算法。你将在接下来的几个测试题中运用这一算法。总的来说,你将在所有训练点上拟合回归。舍弃在实际 y 值和回归预测 y 值之间有最大误差的 10% 的点。

先开始运行初始代码 (outliers/outlier_removal_regression.py) 和可视化点。一些异常值应该会跳出来。部署一个线性回归,其中的净值是目标,而用来进行预测的特征是人的年龄(记得在训练数据上进行训练!)。

数据点主体的正确斜率是 6.25(我们之所以知道,是因为我们使用该值来生成数据);你的回归的斜率是多少?
答:5.07793064

当使用回归在测试数据上进行预测时,你获得的分数是多少?
答:0.878262470366

清理异常值后

你将在 outliers/outlier_cleaner.py 中找到 outlierCleaner() 函数的骨架并向其填充清理算法。用到的三个参数是:predictions 是一个列表,包含回归的预测目标;ages 也是一个列表,包含训练集内的年龄;net_worths 是训练集内净值的实际值。每个列表中应有 90 个元素(因为训练集内有 90 个点)。你的工作是返回一个名叫cleaned_data 的列表,该列表中只有 81 个元素,也即预测值和实际值 (net_worths) 具有最小误差的 81 个训练点 (90 * 0.9 = 81)。cleaned_data 的格式应为一个元组列表,其中每个元组的形式均为 (age, net_worth, error)。

一旦此清理函数运行起来,你应该能看到回归结果发生了变化。新斜率是多少?是否更为接近 6.25 这个“正确”结果?
答:6.36859481

当使用回归在测试集上进行预测时,新的分数是多少?
答:0.983189455396

安然异常值

在本节回归课程的迷你项目中,你使用回归来预测安然雇员的奖金。如你所见,单一的异常值都可以对回归结果造成很大的差异。但是,我们之前没有跟你说过的是,你在项目中使用的数据集已经被清理过明显的异常值了。第一次看到数据集时,识别并清除异常值是你一直应该思考的问题,而你现在已经通过安然数据有了一定的实践经验。

你可以在 outliers/enron_outliers.py 中找到初始代码,该代码读入数据(以字典形式)并将之转换为适合 sklearn 的 numpy 数组。由于从字典中提取出了两个特征(“工资”和“奖金”),得出的 numpy 数组维度将是 N x 2,其中 N 是数据点数,2是特征数。对散点图而言,这是非常完美的输入;我们将使用 matplotlib.pyplot 模块来绘制图形。(在本课程中,我们对所有可视化均使用 pyplot。)将这些行添加至脚本底部,用以绘制散点图:

1
2
3
4
5
6
7
8
for point in data:
salary = point[0]
bonus = point[1]
matplotlib.pyplot.scatter( salary, bonus )

matplotlib.pyplot.xlabel("salary")
matplotlib.pyplot.ylabel("bonus")
matplotlib.pyplot.show()

如你所见,可视化是查找异常值最强大的工具之一!

识别最大的安然异常值

有一个异常值应该会立即跳出来。现在的问题是识别来源。我们发现原始数据源对于识别工作非常有帮助;你可以在 final_project/enron61702insiderpay.pdf 中找到该 PDF。

该数据点的字典键名称是什么?(例如:如果是 Ken Lay,那么答案就是“LAY KENNETH L”)。
最大 Enron 异常值的字典 key 值是什么?

移除安然异常值

在此数据集上运行机器学习时,该异常值是否像我们应该包含的数据点?是否应该删除它?
答:应该移除

从字典中快速删除键值对的一种方法如以下行所示:

1
dictionary.pop( key, 0 )

写下这样的一行代码(你必须修改字典和键名)并在调用 featureFormat() 之前删除异常值。然后重新运行代码,你的散点图就不会再有这个异常值了。

所有异常值都没了吗?

我们认为还有 4 个异常值需要调查;让我们举例来看。两人获得了至少 5 百万美元的奖金,以及超过 1 百万美元的工资;换句话说,他们就像是强盗。

和这些点相关的名字是什么?

你是否会猜到这些就是我们应该删除的错误或者奇怪的电子表格行,你是否知道这些点之所以不同的重要原因?(换句话说,在我们试图构建 POI 识别符之前,是否应该删除它们?)
答:否

源码分享

https://github.com/voidking/ud120-projects

书签

机器学习入门
https://cn.udacity.com/course/intro-to-machine-learning--ud120

0%