在机器学习的数据分析阶段,找到那些和待预测量有较强关联的特征对解决问题有非常大的帮助,为解决这个问题,我们可以分别使用pandas提供的两个函数corr()和scatter_matrix()
使用corr()函数计算每对属性之间的标准相关系数
函数原型
DataFrame.
corr
(self, method='pearson', min_periods=1)
函数功能
计算数值列的两两相关,不包括NA或者null值,注意,也不包括非数值特征列,例如分类特征。相关系数的变化范围是从-1到1,越接近1,表示有越强的正相关;系数越接近-1表示有越强的负相关;系数越接近0表示两属性之间没有线性相关性,注意,没有线性相关性不代表没有其他非线性相关性。
函数返回的是一个相关性矩阵,正对角线的数值均为1,且为对称矩阵。
参数说明
method,表示计算相关性的方法, 可以取值{' pearson ', ' kendall ', ' spearman '},也可以是一个自定义的可调用函数名 | pearson:标准相关系数; kendall :Kendall Tau 相关系数; spearman :斯皮尔曼等级相关 自定义函数名:自定义的函数的参数应当是两个一维的ndarray |
min_periods,int类型, 可选参数 | 每对列得到有效结果所需的最小观察数。当前只对皮尔森和斯皮尔曼相关系数起作用。 |
函数例子
def histogram_intersection(a, b):
v = np.minimum(a, b).sum().round(decimals=1)
return v
df = pd.DataFrame([(.2, .3), (.0, .6), (.6, .0), (.2, .1)],
columns=['dogs', 'cats'])
df.corr(method=histogram_intersection)
dogs cats
dogs 1.0 0.3
cats 0.3 1.0
使用scatter_matrix()绘制散点图矩阵
通过corr()可以得到线性相关性的数值关系,不够形象,通常可以在使用corr之后再使用scatter_matrix绘制出图像,通过散点图更加直观的看见属性之间的联系
函数原型
pandas.plotting.
scatter_matrix
(frame, alpha=0.5, figsize=None, ax=None, grid=False, diagonal='hist', marker='.', density_kwds=None, hist_kwds=None, range_padding=0.05, **kwargs)
参数说明
函数举例
df = pd.DataFrame(np.random.randn(1000, 4), columns=['A','B','C','D'])
scatter_matrix(df, alpha=0.2)
两个函数的使用
假如现在要预测某地区的房价,现在受若干因素影响,第一步,我们应该首先找出有明显线性相关的因素,便于后面的训练,可以使用corr()函数计算相关系数。
假定housing中包含了训练集数据
corr_matrix = housing.corr()
# 此时corr_matrix为一个对称的相关性矩阵,我们可以只看某一列的结果,也就是某因素受其他因素的影响
# 这里我们关心的是房价中位数
corr_matrix["median_house_value"].sort_values(ascending=False)
我们现在了解到,影响房价的关键因素有:收入的中位数,纬度等,然后可借助scatter_matrix函数绘制图像,更加直观的看到结果
from pandas.plotting import scatter_matrix
attributes = ["median_house_value", "median_income", "total_rooms",
"housing_median_age"]
scatter_matrix(housing[attributes], figsize=(12, 8))
save_fig("scatter_matrix_plot")