1.特征选择

         特征选择是降维的一种方法,即选择对预测结果相关度高的特征或者消除相似度高的特征,以提高估计函数的准确率或者提高多维度数据集上的性能。

 

2.删除低方差特征

        1)思路:设置一个阀值,对每个特征求方差,如果所求方差低于这个阀值,则删除此特征。默认情况下会删除0方差。

        2)核心函数

              sklearn.feature_selection.VarianceThreshold

       3)主要参数:

              threshold :设置的阀值

             补充说明:

             官网给出的是一个布尔值的数据集,阀值的表示方式为下面的公式:

             机器学习:特征选择

             示例写法:sel = VarianceThreshold(threshold=(0.8 * (1 - 0.8)))

             经过测试,非布尔值的数据集也适用,并且直接写成:threshold=0.16 也是可以的。

             对于二维矩阵,求的是每列的方差,然后和阀值比较。

        4)示例

             为了更好的说明用删除低方差的方式进行特征选择后,新的数据集不会影响预测结果或者不会造成太大的影响,这里选择一个官方提供的数据集进行对比。这个数据集是关于花朵类型判断的:包含150个样本数据,每个样本数据包含4个特征,这些样本数据属于3类,每类50个样本。

       使用决策树进行分类预测。

        详细代码如下:

from sklearn.datasets import load_iris
from sklearn import tree
from sklearn.feature_selection import VarianceThreshold
import numpy as np

##加载数据
iris = load_iris()
##设置筛选阀值
sel = VarianceThreshold(threshold=(.7 * (1 - .7)))

##设置训练集和标签集
X, y = iris.data, iris.target
print("原始数据:")
print(X.shape) #(150, 4)

#筛选数据
X_new = sel.fit_transform(X)
print("新数据集:")
print(X_new.shape) #(150, 3)

##设置分类函数:决策树
clf = tree.DecisionTreeClassifier()
##训练数据
clf.fit(X, y)
##预测数据
y_pred = clf.predict(X)

##使用选择特征后的数据进行训练
clf.fit(X_new, y)
##在新数据集上进行预测
y_pred1 = clf.predict(X_new)


##原始数据的预测结果和真实结果的对比
cnt = 0
for i in range(len(y)):
    if y_pred[i] == y[i]:
        cnt += 1
print("原始数据的预测结果和真实结果相同的个数:")
print(cnt)

##新数据集和真实结果的对比
cnt = 0
for i in range(len(y)):
    if y_pred1[i]== y[i]:
        cnt += 1
print("新数据集的预测结果和真实结果相同的个数:")
print(cnt)

##原始数据的预测结果和新数据的预测结果的对比
cnt = 0
for i in range(len(y)):
    if y_pred[i] == y_pred1[i]:
        cnt += 1
print("原始据集的预测结果和新数据集预测结果相同的个数:")
print(cnt)
View Code

分类:

技术点:

相关文章: