在机器学习领域,数据预处理对于我们之后的数据训练起着非常关键的作用,Feature Selections 作为数据预处理中非常重要的一个步骤,可以说他起着决定性的作用,那么今天我们就来探究一下几种数据预处理的方法(我们选取Python语言以及他的Sklearn机器机器学习库,以及Penrose_Hourly AggregateData_Jan2016Dec2020(这个数据是2020年空气PM2.5含量的数据,我们能够对PM2.5的含量进行回归预测根据其他的属性和指标),作为我们的测试数据,我们来进行演示)。
首先我们能够使用Pandas为我们封装好的corr方法进行数据相关性的排序,然后对数据进行选择,pandas的corr提供三种方法计算数据相关性,分别是:
pearson, kendall,spearman
Pearson:公式自行百度,我这里主要介绍怎么用以及计算出来的结果是什么。
import pandas as pd
import numpy as np
path = '../data/Penrose_Hourly AggregateData_Jan2016Dec2020 (1).csv'
air_data = pd.read_csv(path)
#handler na
air_datas = air_data.dropna()
#features selection use spearman or pearson
corr = air_datas.corr()
使用以上的代码,我们就能够从pandas中读取数据,调用corr方法,计算相关度,当我们默认什么也不传的时候直接调用的就是Pearson相关性方法对数据进行相关性计算,计算出来的结果如下:
如上图所示就是计算出来的记过,其中我们会发现,我画红线的地方,每行每列对应一个数据,他是一个二位矩阵,每一个数字代表的意思就是这列和这行的相关性,比如(Air Temp,Air Temp)就是代表的Air Temp和Air Temp的相关性,因为air temp和自己的相关性是1 所以计算的没有毛病。比如说第二个(Air Temp,Relative Humidity)就代表Air Temp和Relative Humidity的相关性,同时我们还可以发现他是一个对称的矩阵,我们也可以只用一个上三角矩阵来表示它,或者只用一个下三角矩阵去表示它。
air_data = pd.read_csv(path)
#handler na
air_datas = air_data.dropna()
#features selection use spearman or pearson
corr = air_datas.corr('spearman')
同时我们还能用,spearman方法计算相关性,只需要后面填入spearman就可以了。他的结果和Pearson的结果一样,都是一个对称矩阵。
以上就是两个Pandas为我们提供的计算方法,同时Sklearn里面也封装这两个方法,我们只需要调用相关的函数和pandas的结果差不多,都是一个对称矩阵。
下面介绍Sklearn的SelectKBest这个类也为我们封装了很多的计算相关性的方法,这些方法也能用于Feature Selection,以下代码:
from sklearn.feature_selection import SelectKBest
from sklearn.feature_selection import chi2,f_regression
# columns = [i for i in air_datas]
#带预测的值 是PM2.5 所以我们把PM2.5作为y放入
y = air_datas["PM2.5"]
#提取"PM2.5","Timestamp (UTC+12:00)" 一个是带预测的值,一个是时间没有相关性。
X = air_datas.drop(["PM2.5","Timestamp (UTC+12:00)"],axis=1)
# apply SelectKBest class to extract top 10 best features
bestfeatures = SelectKBest(score_func=f_regression, k=5)
fit = bestfeatures.fit(X,y)
dfscores = pd.DataFrame(fit.scores_)
dfcolumns = pd.DataFrame(X.columns)
featureScores = pd.concat([dfcolumns,dfscores],axis=1)
featureScores.columns = ['Specs','Score']
# print(featureScores.nlargest(5,'Score'))
dict_feature_selected = featureScores.nlargest(5,'Score').to_dict()
specs_names_dict = dict_feature_selected["Specs"]
specs_names = [specs_names_dict[i] for i in specs_names_dict]
这个代码借助Sklearn的SelectKBest去进行Feature Selection,同时他的第一个参数就是我们设置的评估函数,我们能够设置:chi2,f_regression,chi2,f_oneway这几个函数作为我们的评估函数,对数据进行评估。