一、数据降维:
(一)、特征选择:
特征选择是去除一些与预测结果没有关系或者两个特征有高度关联的特征作为机器学习接下来训练集。这里举个例子:预测狗的品种,这里有毛的颜色,有没有牙齿,眼睛颜色。显然有没有牙齿这一特征与预测结果没有关系,这里则需要将这一特征手动删除。
(1)、特征选择的方式:
1、过滤式(filter):方差阈值(variance threshold)
2、嵌入式(embedded):正则化、决策树等
3、包裹式(wrapper):略
(2)、过滤式特征选择:
如果某一特征数值来说所有样本基本相同或者波动不大,这里我们就可以考虑这这一特征删除了。因为所有样本的这一特征基本相同,在预测过程中参考性不大。代码如下:
from sklearn.feature_selection import VarianceThreshold
def vt():
"""
采用过滤式特征选择方式,将低于所设定方差的特征进行去除
:return:
"""
data = [[1, 2, 3],
[1, 2, 5],
[1, 3, 7]]
# 将低于设定值的方差去除掉
vt = VarianceThreshold(threshold=0)
result = vt.fit_transform(data)
print(result)
运行结果如下:
[[2 3]
[2 5]
[3 7]]
这样我们就可以将方差为零的特征删除了,具体设定值的大小要看数据的情况以及结果来说,并没有最好的数值。
(二)、主成分分析(PCA):
当数据特征达到上百个时,我们需要考虑是否要应用PCA,PCA不仅会降低样本的特征数量,也会将样本的数据进行变换。这种方法主要是为了在应用回归或聚类算法时尽可能的削减样本的特征数量。这种方法虽然会损失少量的信息,但是会促进机器学习的效果。
(1)、主要原理:
上图是将二维的数据转化到一维数据的过程,蓝色的线是通过PCA获得的最优解。
from sklearn.decomposition import PCA
def pca():
"""
采用主成分分析进行数据降维
:return:
"""
data = [[1, 2, 3],
[1, 2, 5],
[1, 3, 7]]
"""n_components有两种表达形式,分别为整数以及小数
整数是保留的特征个数,这里我们不是很常用
小数是所保留的特征占之前所有特征的比例,这里我们往往设定为0.9-0.95"""
aa = PCA(n_components=0.95)
result = aa.fit_transform(data)
print(result)
运算后的结果如下:
[[-2.02034885]
[-0.08236249]
[ 2.10271134]]