大量的特征变量,很多的模型,模型也有很多参数,如何选择合适的特征、合适的模型和合适的模型参数,这对建模是很重要的,但也是很困难的。并且选择最优的方案,方法也是很多的,这里将其中一种方法尽量描述清楚:通过遍历所有的特征组合,用最一般的模型去拟合,并计算各种特征组合的模型的性能评估,选择最好的特征组合。用最好的特征组合去创建其他模型及各种参数,确定最好的模型和参数。
数据说明
加载sklearn的数据集,X是一个13维度的特征变量,y是一个一维的分类离散变量。这里我们寻求一个最好的X的特征组合去拟合y的分类。下面是加载数据集的代码:
from sklearn.datasets import load_wine
wine = load_wine()
X = wine.data
y = wine.target
一、加载需要用到的python模块
import matplotlib.pyplot as plt
import pandas as pd
import numpy as np
from sklearn import tree
from sklearn import ensemble
from sklearn import linear_model
from sklearn.model_selection import cross_val_score
from sklearn.model_selection import train_test_split
from sklearn.datasets import load_wine
from sklearn.grid_search import GridSearchCV
二、选择最佳的特征
2.1 加载数据
整理数据,把X转换为pandas的DataFrame类型,定义一个X的所有特征的组合。
wine = load_wine()
X = wine.data
y = wine.target
X = pd.DataFrame(X)
features = [0,1,2,3,4,5,6,7,8,9,10,11,12]
2.2 定义特征遍历函数
定义一个特征遍历函数combinations,并且把特征组合遍历存放在group_combinations
def combinations(ls):
n=1<
tmp=[]
for i in range(n):
bits=[i>>offset&1 for offset in range(len(ls)-1,-1,-1)]
if np.sum(bits)>0:
current=[ls[index] for (index,bit) in enumerate(bits) if bit==1]
tmp= tmp+[current]
return tmp
group_combinations = combinations(features)