由于数据集不太大,您可以使用corr()方法轻松地计算每对属性之间的标准相关系数(也称为Pearson 's r):

corr_matrix = housing.corr()

现在让我们来看看每个属性与房价中值的相关性关系:

>>> corr_matrix["median_house_value"].sort_values(ascending=False)
median_house_value 1.000000
median_income 0.687170
total_rooms 0.135231
housing_median_age 0.114220
households 0.064702
total_bedrooms 0.047865
population -0.026699
longitude -0.047279
latitude -0.142826
Name: median_house_value, dtype: float64

标准相关系数从-1到1。当它接近1时,意味着有很强的正相关;例如,当收入中值上升时,房价中值往往会上升。当系数接近-1时,意味着有很强的负相关;你可以看到在纬度和房价中值之间有一个小的负相关(即:当你往北走的时候,价格有轻微的下降趋势。最后,系数接近于零意味着没有线性相关。图2-14显示了它们的水平轴和垂直轴之间的相关系数。

图2 - 14 各种数据集的标准相关系数(来源:维基百科;公共领域的图像)

相关系数只测量线性相关系数(“如果x上升,y通常上升/下降”)。它可能完全忽略了非线性关系(例如,“如果x接近于0,那么y通常会上升”)。请注意,尽管它们的坐标轴明显不是独立的,但底部行的所有图的相关系数都为零:这些都是非线性关系的例子。第二行显示了相关系数为1或-1的例子;注意,这和斜率无关。例如,你的身高与身高属性的相关系数是1。

另一种检查属性之间相关性的方法是使用Pandas的scatter_matrix函数,该函数将绘制每个数字属性对应于其他的数字属性的相关性关系。由于现在有11个数字属性,您将得到11 * 11 = 121个图,这将不适合于一个页面,所以我们只关注一些看起来与房价中值相关的有希望的属性(图2-15):

from pandas.tools.plotting import scatter_matrix
attributes = ["median_house_value", "median_income", "total_rooms",
    "housing_median_age"]
scatter_matrix(housing[attributes], figsize=(12, 8))

图2-15 散布矩阵

主对角线(左上至右下)将布满直线,如果Pandas把每一个变量都画出来,这将不是很有用。因此,相反,Pandas会显示每个属性的直方图(其他可选参数的使用,请详情请参阅Pandas的文档)。

预测房价中值的最有希望的属性是收入中值属性,让我们来放大它们的相关性散点图(图2-16):

housing.plot(kind="scatter", x="median_income", y="median_house_value",
    alpha=0.1)

图2-16 收入中值与房价中值。

这个图揭示了一些事情。首先,他们之间的相关性确实非常强;你可以清楚地看到上升的趋势,而且这些点也不太分散。第二,我们早些时候注意到的50万美元的房价上限,在图中也清晰可见。但这个图也揭示了其他不那么明显的直线::一条是45万美元的水平线,另一条约为35万美元的水平线,还有大约是28万美元的水平线,下面还有一些。您可能想尝试删除相应的地区,以防止您的算法学习复制这些数据怪癖。

results matching ""

    No results matching ""