1.简介
上次我们简单说了seaborn.heatmap函数,这一次我们将介绍在机器学习中的显示不同特征之间相关性的热力图和Pyheatmap.heatmap用法。在机器学习中我们在筛选有用特征的时候,常常计算一下不同特征的相关性,便于我们去掉相关性强的特征,我们此次用的数据集为sklearn中的breast_cancer数据集。
2.特征之间相关性的热力图
(1)首先我们导入数据和作图的包

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt # 导入作图包
import seaborn as sns    # 导入作图包
from sklearn.datasets import load_breast_cancer # 从sklearn导入数据

(2)查看数据

cancer = load_breast_cancer() 
print(cancer.data)  #输出数据的内容
print(cancer.target) #输出数据的标签

(3)查看数据的列名

col_names = list(cancer.feature_names)  #查看数据的列名
print(col_names)
col_names.append('target')
df = pd.DataFrame(np.c_[cancer.data, cancer.target], columns=col_names) #合并数据和标签并存储成DataFrame在df中
df.head() #展示数据的前五条

特征筛选 pearson python_sklearn


(4)查看数据的基本统计学信息

df.describe()

特征筛选 pearson python_机器学习_02


(5)查看数据每列信息

df.info()

特征筛选 pearson python_python_03


(6)生成不同特征之间的相关热力图,可以根据颜色筛选出相关性小的特征组合

plt.figure(figsize=(20,10)) 
sns.heatmap(df.corr(), annot=True) #根据特征相关性绘制热力图
plt.show()

特征筛选 pearson python_python_04


其中看一下df.corr()方法:

DataFrame.corr(method='pearson', min_periods=1)

参数说明:
method:可选值为{‘pearson’, ‘kendall’, ‘spearman’}

df.corr()  # 默认是pearson相关系数
df.corr('kendall') # Kendall Tau相关系数
df.corr('spearman') # spearman秩相关

关于相关系数的数学计算公式这里就不展开写了,以后会慢慢补上。

3. Pyheatmap.heatmap

官方给了两种说明,一是点击图(使用鼠标点点点,然后生成相应的点击图),二是热力图,根据给定x,y数据生成热力图,生成效果如下:

(点击图)

特征筛选 pearson python_特征筛选 pearson python_05


(热力图)

特征筛选 pearson python_数据_06


使用方法如下:

(1)安装-这里通过Pip

pip install pyheatmap

(2) 官方代码例子

import urllib
from pyheatmap.heatmap import HeatMap

def main():

    # download test data
    url = "https://raw.github.com/oldj/pyheatmap/master/examples/test_data.txt"
    sdata = urllib.urlopen(url).read().split("\n")
    data = []
    for ln in sdata:
        a = ln.split(",")
        if len(a) != 2:
            continue
        a = [int(i) for i in a]
        data.append(a)

    # start painting
    hm = HeatMap(data)
    hm.clickmap(save_as="hit.png")
    hm.heatmap(save_as="heat.png")

if __name__ == "__main__":
    main()

(3)其他例子

from pyheatmap.heatmap import HeatMap
import numpy as np
x = [10,20,30,50,40,30,70,80,50,30,45,50]
y = [30,40,50,30,40,80,50,34,45,95,26,33]
data = []
for i in range(0,11):
    tmp = [int(x[i]), int(y[i]),1]
    data.append(tmp)
heat = HeatMap(data)
heat.clickmap(save_as="1.png") #点击图
heat.heatmap(save_as="2.png") #热图

4.总结
这次我们介绍了在机器学习中的显示不同特征之间相关性的热力图和Pyheatmap.heatmap用法,下次我将介绍场景热力图的使用。
5.参考


https://www.kaggle.com/prashant111/lightgbm-classifier-in-python https://github.com/oldj/pyheatmap