DC学院学习笔记(二十):用特征选择方法优化模型

简介: 特征选择( Feature Selection )也称特征子集选择( Feature Subset Selection , FSS ),或属性选择( Attribute Selection )

特征选择的定义:

特征选择( Feature Selection )也称特征子集选择( Feature Subset Selection , FSS ),或属性选择( Attribute Selection )。是指从已有的M个特征(Feature)中选择N个特征使得系统的特定指标最优化,是从原始特征中选择出一些最有效特征以降低数据集维度的过程,是提高学习算法性能的一个重要手段,也是模式识别中关键的数据预处理步骤。对于一个学习算法来说,好的学习样本是训练模型的关键。

特征选择的方法:

数据驱动:分析手上已有的训练数据,得出哪些x里面的特征对预测y最重要的。主要的三大种类方法如下:

  • 相关性:考察在我们已有的数据里面的特征x与预测值y的相关度
  • 迭代删除(增加):确定要使用哪个算法后,选择最合适的训练子集,从而使得模型的效果最好
  • 基于模型:通过随机森林等可以直接得出每个训练特征的重要性的模型;或者是在进行预测时加入的一些正则化调整,引起的对特征的筛选,从而挑选出最重要的特征

领域专家:通过相关领域的专家知识、经验来挑选特征

相关性系数:皮尔逊系数

定义
在统计学中,皮尔逊积矩相关系数(英语:Pearson product-moment correlation coefficient,又称作 PPMCC或PCCs, 文章中常用r或Pearson’s r表示)用于度量两个变量X和Y之间的相关(线性相关),其值介于-1与1之间。在自然科学领域中,该系数广泛用于度量两个变量之间的相关程度。它是由卡尔·皮尔逊从弗朗西斯·高尔顿在19世纪80年代提出的一个相似却又稍有不同的想法演变而来的。这个相关系数也称作“皮尔森相关系数r”。

公式image
Python实现

from scipy.stats.stats import pearsonr
pearsonr(x,y)

迭代特征选择

解决的问题:假设我们已经确定了要使用哪个算法后,我们怎么知道哪个X的子集合作为特征训练模型效果最好。

解决方案

image

迭代特征选择python实现

import pandas
import numpy as np
from sklearn import linear_model
from sklearn.model_selection import cross_val_score
from sklearn.preprocessing import LabelEncoder

iris =pandas.read_csv('http://archive.ics.uci.edu/ml/machine-learning-databases/iris/iris.data',header=None)
iris.columns=['SepalLengthCm','SepalWidthCm','PetalLengthCm','PetalWidthCm','Species']
le = LabelEncoder()
le.fit(iris['Species'])
lm = linear_model.LogisticRegression()
features = ['PetalLengthCm','PetalWidthCm','SepalLengthCm','SepalWidthCm']
y = le.transform(iris['Species'])

selected_features = []
rest_features = features[:]
best_acc = 0
while len(rest_features)>0:
    temp_best_i = ''
    temp_best_acc = 0
    for feature_i in rest_features:
        temp_features = selected_features + [feature_i,]
        X = iris[temp_features]
        scores = cross_val_score(lm,X,y,cv=5 , scoring='accuracy')
        acc = np.mean(scores)
        if acc > temp_best_acc:
            temp_best_acc = acc
            temp_best_i = feature_i
    print("select",temp_best_i,"acc:",temp_best_acc)
    if temp_best_acc > best_acc:
        best_acc = temp_best_acc
        selected_features += [temp_best_i,]
        rest_features.remove(temp_best_i)
    else: 
        break
print("best feature set: ",selected_features,"acc: ",best_acc)
select PetalWidthCm acc: 0.853333333333
select SepalWidthCm acc: 0.94
select PetalLengthCm acc: 0.953333333333
select SepalLengthCm acc: 0.96
best feature set:  ['PetalWidthCm', 'SepalWidthCm', 'PetalLengthCm', 'SepalLengthCm'] acc:  0.96

ok,跟之前得到的一样,就是三个特征都选择了,效果最好。

最后,来认识一下什么叫特征工程

特征工程

有这么一句话在业界广泛流传:数据和特征决定了机器学习的上限,而模型和算法只是逼近这个上限而已。那特征工程到底是什么呢?顾名思义,其本质是一项工程活动,目的是最大限度地从原始数据中提取特征以供算法和模型使用。

引用知乎的一张图:https://www.zhihu.com/question/29316149

image

目录
相关文章
|
6月前
BOSHIDA DC电源模块的故障排除与维修方法
BOSHIDA DC电源模块的故障排除与维修方法 当DC电源模块出现故障时,可以按照以下步骤进行排除和维修:
BOSHIDA  DC电源模块的故障排除与维修方法
|
6月前
|
安全
DC电源模块的安全性能评估与测试方法
DC电源模块的安全性能评估与测试方法 DC电源模块的安全性能评估与测试方法应包括以下几个方面: 1. 输入安全性测试:包括输入电压范围、输入电压稳定性、输入电流范围、输入电流保护等方面的测试。测试方法可以是逐步增加输入电压或输入电流,观察模块的工作状态和保护功能。
DC电源模块的安全性能评估与测试方法
|
6月前
|
安全 测试技术
BOSHIDA DC电源模块的安全性能评估与测试方法
BOSHIDA DC电源模块的安全性能评估与测试方法
 BOSHIDA DC电源模块的安全性能评估与测试方法
|
6月前
AC/DC电源模块实现更大的输出功率有几个关键因素需要考虑和优化
AC/DC电源模块实现更大的输出功率有几个关键因素需要考虑和优化
|
6月前
BOSHIDA DC电源模块在通信设备中的应用与优化
BOSHIDA DC电源模块在通信设备中的应用与优化
BOSHIDA  DC电源模块在通信设备中的应用与优化
|
6月前
|
算法
DC电源模块的能效优化探索与应用
能效优化是指在设计和应用过程中,通过采用先进的技术手段和方法,最大限度地提高电源模块的能效。
DC电源模块的能效优化探索与应用
|
6月前
|
算法
AC/DC电源模块设计原理、优化技术和应用案例三个方面进行阐述
AC/DC电源模块是一种将交流电转换成直流电的设备,广泛应用在各种电子设备中。其设计和优化是为了提高转换效率、降低功耗和提高性能稳定性。本文将从设计原理、优化技术和应用案例三个方面进行阐述。
AC/DC电源模块设计原理、优化技术和应用案例三个方面进行阐述
|
5月前
|
安全
设计线路和优化两个方面来探讨AC/DC电源模块的关系。
设计线路和优化两个方面来探讨AC/DC电源模块的关系。
设计线路和优化两个方面来探讨AC/DC电源模块的关系。
|
5月前
AC/DC电源模块设计中,线路的选择和布局对于优化起着至关重要的作用
AC/DC电源模块设计中,线路的选择和布局对于优化起着至关重要的作用
AC/DC电源模块设计中,线路的选择和布局对于优化起着至关重要的作用
|
6月前
探讨AC/DC电源模块的可靠性设计和测试方法
探讨AC/DC电源模块的可靠性设计和测试方法
探讨AC/DC电源模块的可靠性设计和测试方法