目录
特征预处理
通过一个转换函数将特征数据转换成更适合算法模型的特征数据过程
为什么要进行归一化和标准化?
特征的单位或大小相差较大,或者某特征的方差相比其他的特征要大出几个数量级,容易影响(支配)目标结果,使得一些算法无法学习到其它的特征。我们需要使用一些方法进行无量纲化,使不同规格的数据转换到同一规格。
例如:在评价一个汽车的好坏时,有这三个方面,这三个方面对于汽车的好坏评价的重要程度同等重要,但是由于消耗时间比这个特征的数值都比较小,里程数的数值都比较大,所以在计算的时候,消耗时间比对结果的影响占比较小,里程数对结果的影响占比较大。这个时候就需要进行归一化
特征预处理API
包含内容
- 数值型数据的无量纲化:
- 归一化
- 标准化
归一化
什么是归一化?较大通过对原始数据进行变换把数据映射到(默认为[0,1])之间
处理前:
处理后:
def minmax_demo():
#1.获取数据
data=pd.read_csv("dating.txt")
data=data.iloc[:,:3]
#2.实例化
transfer=MinMaxScaler(feature_range=[2,3]) #默认是0到1
#3.调用fir_transform
data_new=transfer.fit_transform(data)
#输出归一化的结果
print("将dating.txt文件中的前三列特征值进行归一化处理后得到的矩阵为:",data_new)
标准化
什么是标准化?就是通过对原始的数据进行变幻把数据变换到均值为0,标准差为1范围内
def stand_demo():
# 1.获取数据
data = pd.read_csv("dating.txt")
data = data.iloc[:, :3]
# 2.实例化
transfer = StandardScaler()
# 3.调用fir_transform
data_new = transfer.fit_transform(data)
# 输出标准化的结果
print("将dating.txt文件中的前三列特征值进行归一化处理后得到的矩阵为:", data_new)
return None
降维
如果在一组数据中,有两个特征的相关性很强(比如一只鸟的爪子大小和一只鸟是否有爪子),或者特征本身存在问题,那么对于算法学习预测的影响会比较大。
相关的特征太多,那么就会造成数据的冗余,处理起来会很不方便,这时候降维就会派上用场,对于保留相关特征中的一个即可。对于本身存在问题的特征可以舍去。
Filter过滤式
-
方差选择法——低方差过滤特征
特征的方差小,那么某个特征大多样本的值比较相近,这时候这组数据显得没太大的参考意义。
def variance_demo():
#1.获取数据
data=pd.read_csv("factor_returns.csv")
data=data.iloc[:,1:-2]
#2.实例化一个转换器类
transfer=VarianceThreshold(threshold=10)#训练集差异低于10的特征将被删除。
#3.调用fit_transfrom
data_new=transfer.fit_transform(data)
return None
-
相关系数法——特征与特征之间的相关程度
相关系数在[-1,1]区间内。当r<0时,表示两变量负相关,r>0时表示两变量正相关。|r|越接近于1,两变量间线性关系越密切,|r|越接近于0,两变量之间的线性相关越弱。
from scipy.stats import pearsonr
print(pearsonr(data["pe_ratio"], data["pb_ratio"]))
Embeded嵌入式
决策树
正则树
深度学习
主成分分析
定义:高维数据转化为低维数据的过程,在此过程中可能会舍弃原有数据、创造新的变量
作用:是数据维数压缩,尽可能降低原数据的维数(复杂度),损失少量信息。
应用:回归分析或者聚类分析当中
from sklearn.decomposition import PCA
def pca_demo():
data=[[2,8,4,5],[6,3,0,8],[5,4,9,1]]
#1.实例化一个转换器类
transfer=PCA(n_components=0.9)
#2.调用fit_transform
data_new=transfer.fit_transform(data)
print("data_new:\n",data_new)
return None
保留90%的信息
减少到3个特征