花费了很长时间整理编辑,转载请联系作者授权,违者必究。
特征选择(Feature selection)是在构建预测模型的过程中减少输入变量的一个过程。它是机器学习中非常重要的一步并在很大程度上可以提高模型预测精度。这里我总结了一些机器学习中常见的比较有用的特征选择方法并附上相关python实现code。希望可以给大家一些启发。
首先,我们为什么要进行特征选择呢?它有以下几个优点:减少过拟合:冗余数据常常会给模型训练产生噪声,去掉这些噪声更有利于进行决策。
提高准确性:减少误导性数据意味着提高了建模准确性。
减少训练时间:更少的数据点降低了算法复杂度,并使训练速度更快。
减低模型复杂性:降低了模型的复杂性,并使其更易于解释。
Topic 1:变量排名(Variable Ranking)
变量排名是通过某些评分函数的值对要素进行排序的过程,通常会测量要素相关性。通常我们可以通过常见的统计检验来选择与输出变量关系最密切的那些特征。scikit-learn中的SelectKBest就是根据不同的统计测试选取k个分数最高的变量。
整个程序都是以sklearn自带的波士顿房价数据为例,进行变量选择。通过load_boston(),我们可以调取所需数据。下面的程序是对训练数据的提取。
import pandas as pd
#load sklearn built-in Boston dataset
from sklearn.datasets import load_boston
#Loading the dataset
x = load_boston()
data = pd.DataFrame(x.data, columns = x.feature_names)
data["MEDV"] = x.target
X = data.drop("MEDV",1) #Remove Target Variable to Get Feature Matrix
y = data["MEDV"] #Target Variable
data.head()数据样本
以下通过线性回归的F值来对各输入变量进行排序,并选出前五个预测效果最好的变量。我们可以看出,LSTAT分数最高,预测能力最好:
from sklearn.feature_selection import SelectKBest
from sklearn.feature_selection import f_regression
#apply SelectKBest class to extract top 5 best features
bes