这个公式可以很好的解决偏离抵消的情况,真实反映出预测值与真实值的偏差,当然MAE的值越小越好。
上述两个公式相比,我们可以发现,RMSE对异常值更加敏感,因为当出现一个较大的偏差的异常值时,会极大影响结果的数值,MAE则影响相对小。
所以,RMSE更加适合数据分布为钟形的曲线(类似正态分布)的情况,而MAE更加适合数据偏离散的情况。
三、获得数据
我的建议是要获取真实的数据进行操作。书中列出了很多的开源数据:
流行的开放数据存储库:
— UC Irvine Machine Learning Repository
— Kaggle datasets
— Amazon’s AWS datasets
源门户站点(他们会列出很多开放的数据库):
—
—
—
其他的一些许多流行的开放数据库页面:
— Wikipedia’s list of Machine Learning datasets
— Quora.com question
— Datasets subreddit
这里开放的数据许多是国外数据库,访问需要科学上网,如急切需要但不知如何科学上网,请与我联系(nfuquan AT gmail.com)
以后会更新更多的关于我们中文的数据库,尽情期待。
四、借助框架分析数据
用Anaconda组件中的Jupyter Notebook说明,编程语言为python3.5。
1、Pandas
具体它的功能就不去介绍了,可以附一个链接,自行查看。
这里集中说明几个函数的功能,方便以后自己能快速查看。
pandas.DataFrames.head()
这个函数是读取DataFrames格式数据,默认读取5个元素,当然可以在参数中传递自己想读取的函数的个数。
pandas.DataFrames.info()
这个函数是列出DataFrames格式中的索引信息、行信息、非空值信息以及内存使用信息,这个函数可以清楚地告诉我们数据的异常状态,从而让我们在数值上进行处理。
pandas.DataFrames.describe()
这个函数显示数据的各个属性摘要,同时针对数值数据进行了数据的一些计算。
pandas.DataFrames[“属性”].value_counts()
这个函数是对属性中的内容进行统计。
pandas.DataFrames.hist()
首先应该在首行加入%matplotlib inline (该式只能在jupyter notebook中使用,意思是直接编译显示结果)。
这个函数是将数据每个属性制作为一个直方图。有很多的参数,具体请查看链接
上述函数给我们一个极大的便利就是针对数据的具体情况可以进行逐个分析。例如,我们可以看到收入中位数“median_income”最大值为15,这个不符合常识,收入因该至少在五位数才对,因此需要针对该数据对数据提供方进行询问,经询问,得知该属性进行了属性的缩放。在直方图中,我们一般应该注意的方面是数据的范围以及数量、分布,为什么要关注这些呢,因为要结合实际。举个例子,比如我们发现房屋价格的中位数最大到50万美元,而且数量很多,而且根据数据的分布,感觉存在异常,如果对数据敏感的话,我们应该有这样的疑问:是否这个数据是一个限制条件,就是说将这个数据以上的数据全部都设置为50万,这会导致我们的学习算法永远不会估计出超过50万元的数值,这个结果是否可接受,需要考虑。如果要求是可以预测出50万元以上的房屋价格,我们可以针对50万以上的房屋价格重新收集数据或者除去50万元以上的数据,同时允许我们的机器学习算法预测出50万元以上的结果。直方图还表现了一个特征是有几个属性值分布不均匀,有可能会影响机器学习系统难以预测的某些模式。