入门机器学习实用指南Hands-On Machine Learning with Scikit-Learn & TensorFlow (第二章)

我对本书中的代码做了详尽的注释,放到了我的github,star我哦(✪ω✪)

Q:端到端(end to end)

end-to-end(端对端)的方法,一端输入我的原始数据,一端输出我想得到的结果。只关心输入和输出,中间的步骤全部都不管。转自TopCoderの陳澤澤

Q:对收入中位数进行缩放,分类

你或许会这么想,书中为什么要将收入中位数进行分类呢?
书中把所有的数据除以1.5,并将大于5的归于5,其实是在将收入中位数进行分类,然后根据每一类来进行分层抽样,保证每一类别在验证集中都占有同样的比例。那么为什么不直接进行分类,而是要除以1.5呢?我分先画个图看看收入的分布:

图中我们可以看到,数据是不是大多集中2-6,如果我们要分类的话得分类别(2,3,4,5,6),因为要保证每一个类别都需要有足够多的实例,实例少的就归到其他类。作者希望训练的分类从1开始,因此作者把数据都除以1.5,这样也就可以分类为(1,2,3,4,5)了。所有这些对数据的操作只是为了切分训练集与验证集,切分完了之后会将这些分类数据删掉,并不会同原始数据一起训练,所以对训练的结果不会产生影响。

Q:绘制点图

housing.plot(kind="scatter", x="longitude", y="latitude", alpha=0.4,
    s=housing["population"]/100, label="population", figsize=(10,7),
    c="median_house_value", cmap=plt.get_cmap("jet"), colorbar=True,
    sharex=False)

DataFrame.plot()讲解:pandas.DataFrame.plot其实是集成了matplotlib的多个绘图函数。本例中kind="scatter"就相当与是matlotlib的scatter函数。传入的参数也就是scatter函数的参数。
x,y:x坐标和y坐标
alpha:透明度
s:Size首字母。s可以设置点图中每一个点的大小,s是每个点的大小的一个集合。x,y决定点的顺序,对应着s集合中的顺序。也就是说第i个(x,y)坐标对应的点的大小就是s[i]。当点数超过s集合的大小时,又重新从s[0]开始。在本例中,s取的是人口的数量,每个坐标点的大小刚好对应该点人口数,直接取原始数据画出的点太大,通过除以100来限制点的大小。weixin_39462002这篇博客值得一看。
c:Color首字母。同s类似,c是点的颜色的序列(x,y)[i]也与c[i]对应。可以自定义颜色序列如[‘b’,‘r’],b:blue,r:red。在本例中没有使用自定义的颜色序列这种方法,而是使用了另一种方法,即c为一个数字序列,然后使用matplotlib自带的colormap来对这个数字序列根据数字大小对应颜色,见下一参数。
cmap:Colormap。如上方所说,可以使用matplotlib的colormap来作为绘图的颜色序列。这里使用的是‘jet’,所有的colormap见这里。
如图所示是名为‘jet’的colormap,本例中c=“median_house_value”,即选取房价中位数作为数字序列,数字越大的颜色越红,即画出的图表中,越红的点房价越高。colorbar:是否显示颜色条,即上图右方颜色条,即jet。
sharex=False:这句用来修复一个图表显示的bug(x轴的值和图例显示不出来)

你可能感兴趣的:(入门机器学习实用指南Hands-On Machine Learning with Scikit-Learn & TensorFlow (第二章))