开发者学堂课程【人工智能必备基础:概率论与数理统计:案例:特征相关性】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/545/detail/7440
案例:特征相关性
一、 特征相关性
代码讲解:对原始数据 .corr 一下,就得到如下表。data.corr 得到相关系数。下表是对称的。横坐标,纵坐标都表示所有特征,表中的值是相关系数的多少。对角线值是 1,非对角线表示横坐标与纵坐标的关系。代码如下:
In[45]:cormatrix=data.corr()
cormatrix
Out[45]:
代码讲解:现想将相关性排列,发现数据里是对称的,所以只用取一半,np 里有个函数,帮助返回当前函数的上三角矩阵。这里只返回返回一个上三角矩阵,并且将中间的对角线值变成 0。如果要去统计大小情况,看见 1 是最大的,将 1 拿出是不合适的,因为 1 是自己和自己,所以将对角线值设成最小,就不取对角线的情况。其他就只取上三角矩阵,因为上三角中是多少值,就依次拿多少,这就是现在所做的处理。对角线上不是 1,是 0,非对角线上就只保留上三角矩阵。原来是对称的,现在只保留一半。右上角是有数据的,左上角是没有数据的。代码如下:
In [46]:
cormatrix *= np. tri (*cormatrix. values. shape, k=-1).
T
#返回函数的上三角矩阵,把对角线上的置 0,让他们不是最高的。统计大小情况时,把对角线置 0。Out[46] :
代码讲解:再将数据整合,整合的意思是,cormatrix.stack 会返回当前的指标,反应出当前某一指标和其他指标的情况。代码如下:
In[47]:cormatrix=cormatrix.stack()
cormatrix
Out[47]:symbolling
symbolling
0.000000
normalized- losses
0.593658
wheel-base
-0. 536516
length
-0. 363194
width
-0.247741
height
-0.517803
curb-weight
-0.231086
engine-size
-0.068327
bore
-0. 144785
stroke
0.010884
width
0.034178
(省略)
代码讲解:接着进行排序,这里的意思是把当前的数据按指定好的格式进行重新排序。指定 level_0、level_1,意思是按照从大到小排列,就得到下面的表。代码如下:In[4S]: cormatrix = cormatrix. reindex (cormatrix. abs(). sort. values (ascending=False). index). reset_index()
(表示把当前的数据按自己指定的格式进行重新排列)cormatrix
代码讲解:level_0、level_1 表示变量、0 表示变量之间的相关系数。相关系数太大就二者选其一,可去掉一个。如果都加进来,会导致多重空间性。观察发现,长度,宽度,进行配对的关系。所以在进行变量的筛选时,一方面要剔除掉比较高的值,另一方面有些值是存在一些逻辑关系的。比如说,拿到一个数据,数据中有长宽高,它们之间是按比例的关系,它们之间的相关性也比较强。假如用 3 个进行表示,都是这样的比例,所以可以用一个指标把之前三个给替代的,这样可以解决多重空间性的问题。代码如下:
Out(48]:
In [49]: cormatrix. columns = ["FirstVariable", "SecondVariable “, "Correlation” ]
cormatrix. head(10)
表出来后,重新指定名字,以及它们之间的相关系数。
Out[49] :
city_ mpg 和 highway -mpg 两个差不多是一个意思了.对于这 个
长宽高,他们应该存在某种配对关系,给他们合体!所以去掉一些指标,一方面有些相关性太高,就选择一个;有的可以整合,三个间存在关系,乘在一起,用体积表示,这样更合理,就不用三个,会导致问题。所以这里用新指标体积,长宽高乘在一起是新的特征,加进新特征后之前的特征就不要,并且将相关性比较大的指标去掉,这就是当前变量的筛选,根据相关性把变量进行筛选。
heatmap 一下可将热度图画出。如果对画图不太了解,上官网查找教程。把常用的函数讲解非常详细。
In [52]: # Compute the correlation matrix
corr_all = data. corr ()
Generate a mask for the upper triangle
mask = np. zeros_ like (corr_all, dtype = np. bool)
mask[np. triu_indices_from(mask)] = True
# Set up the matplotlib figure
f, ax = plt . subplots (figsize(11, 9))
# Draw the heatmap with the mask and correct aspect ratio
sns. heatmap(corr_all, mask = mask, square F True, linewidths=.5, ax = ax, cmap =" BuPu “)
plt. show()
Set up 可到官网上查找。
右边表示调色板,颜色越深,值越大;颜色跃浅,值越小或越正。
比如:price 有几个颜色深的,对它进行排列。
看起来 price 跟这几个的相关程度比较大 wheel-base,enginine-size, bore,horsepower.
代码讲解:拿到数据后往细去看,看每一数据的统计指标, pairplot 画图方便且简单。 Sns 库相当于将 pairplot 进行封装,在 pairplot 基础上提供了很多模板,画图时直接调用模板会更方便。将 data 值传入,表示把当前指标传入。In [53]: sns. pairplot (data, hue = ‘fuel-type’,palette =plasma
Out[53] :<seaborn. axisgrid. PairGrid at 0x218b038c080>
……
让我们仔细看看价格和马力变量之间的关系
对角线上是分布图,其他是散点图。
Hue 可指定颜色。按照燃烧汽油的种类将颜色指定进去。紫色点和黄色点又分别表示是烧油的,一个是烧气。看两种分布的情况,这就是最基本的 pairplot ,如果不想按烧油烧气去指定,就按着不同几类点去指定,比如指定 3 类点就是 3 种颜色,pairplot 就是专门长什么样的颜色,可指定调色板,可自己指定。这就是pairplot ,一方面可以看散点图,并且在散点图中可以看不同的变量的指标,把颜色点进行区分,对角线上就是实际的分布,这就是非常简单,非常便捷。
想深入到某两个指标之间,1mplot 就是专门做指标分析的,先看参数,
In [54]: sns. 1mplot (‘price’ , ‘horsepower’, data
,(此处用于回归分析。指定出参数,指定出横纵轴)hue = ‘fuel-type’, col = ‘fuel-type’,row = ‘num-of-doors’
,(可自行指定紫图,指定行指定行列来进行区分)
palette =’plasma’
fit_reg . True);
所以在画图时,会根据指定的行和列,帮把指定的指标画出,还会将回归线画出。阴影是执行区间,也会画出。通过图可看出:第一、二个图都表示马力与当前价格的关系。
当要深入了解时就将图画出。
可看出基本是一条线,点都在左右两边,还是比较均匀分布的,偏离程度没有太大,可认为两个变量间是存在关系的,并且关系比较强。当我们想深入了解两个变量之间的关系时,可将图画出,并且在某些条件下,自己指定,指定完后,就可深入不同变量之间,就可以知道不同变量之间的关系。
事实上,对于燃料的类型和数门变量,我们看到,在一辆汽车马力的增加与价格成比例的增加相关的各个层面