您的位置:

特征工程

一、特征工程的定义

特征工程是指在机器学习和数据挖掘任务中,将原始数据转换为模型可用特征的过程。其目的是在保留最大信息量的同时,提高模型的准确性和预测能力。

在机器学习中,特征的选择和构造往往是取得好的预测结果的关键步骤。

二、特征选择方法

特征选择是从原始特征中选择最佳特征的过程。其中最常用的方法包括过滤法、包裹法和嵌入法。

1. 过滤法

过滤法是根据数据的一些特征选择指标进行特征排序,然后根据预先设定的阈值或者某些方法来选择特征,其中常用指标有卡方检验、信息增益、相关系数等。

# 以信息增益为例
from sklearn.feature_selection import SelectKBest
from sklearn.feature_selection import mutual_info_classif
 
# 假设X为样本的特征,y为类别
selector=SelectKBest(score_func=mutual_info_classif,k=5)
selector.fit(X,y)
X_selected=selector.transform(X)

2. 包裹法

包裹法直接将特征选择看做子集选择问题,对于每个子集训练模型,最终根据模型的好坏来评价选择结果,其中典型的算法有基于遗传算法的特征选择算法GA-MLP。

# 以GA-MLP为例
from sklearn.neural_network import MLPClassifier
from sklearn.feature_selection import f_classif, SelectKBest
from sklearn.pipeline import Pipeline
from wrapperMethod import GA

# wrapperMethod是写好的GA-MLP算法
pipe = Pipeline([('select', SelectKBest(f_classif)), ('classify', MLPClassifier())])
ga = GA(pipe)
ga.fit(X, y)
X = ga.transform(X)

3. 嵌入法

嵌入法是通过在建模过程中对特征选择,控制特征的数量和系数来进行特征选择。其中包括lasso、ridge等算法。

# 以ridge为例
from sklearn.linear_model import Ridge
ridge=Ridge(alpha=1)
ridge.fit(X,y)
print(ridge.coef_)

三、特征提取方法

特征提取是将原始数据转换为模型可用特征的过程,包括人工提取和自动提取。

1. 人工提取

人工特征提取是指根据领域知识或者经验来进行特征选择和提取的过程。将原始数据转化为可用于建模的特征向量。

# 以文本分类为例
def document_matrix(text):
    words = set(text.split(' '))
    document = []
    for w in words:
        count = text.count(w)
        document.append(count)
    return document

document_vect = []
for d in documents:
    vect = document_matrix(d)
    document_vect.append(vect)

2. 自动提取

自动提取是指通过某些算法对原始数据进行转换并提取特征。例如,PCA将高维数据转化为低维数据。

# 以PCA为例
from sklearn.decomposition import PCA
pca = PCA(n_components=2)
pca.fit(X)
X_pca = pca.transform(X)

四、特征缩放

特征缩放是指将特征的数据范围缩放到一个合适的范围内,目的是避免特征具有较大的差异性对模型造成不必要的干扰。

1. 归一化

归一化是指将特征值按照比例缩放,使之落在一个区间内,例如0-1之间。

from sklearn.preprocessing import MinMaxScaler
scaler = MinMaxScaler()
X_scaled = scaler.fit_transform(X)

2. 标准化

标准化是将特征值按照均值为0,标准差为1的比例缩放。

from sklearn.preprocessing import StandardScaler
scaler = StandardScaler()
X_scaled = scaler.fit_transform(X)

五、特征降维

特征降维是将高维特征数据转化为低维特征数据,目的是在保留最重要的特征的同时,减少维度使得模型更加高效。

1. PCA降维

PCA是将高维数据映射到低维空间的算法,它可以去除冗余的信息并保留最重要的信息。

from sklearn.decomposition import PCA
pca = PCA(n_components=2)
X_pca = pca.fit_transform(X)

2. LDA降维

LDA是一种有监督的降维算法,它可以将高维数据映射到低维空间,并且保留样本类别信息。

from sklearn.discriminant_analysis import LinearDiscriminantAnalysis
lda = LinearDiscriminantAnalysis(n_components=2)
X_lda = lda.fit_transform(X, y)

六、特征衍生

特征衍生是指根据原始特征生成新的特征的过程,可以通过构造特征组合或者特征交互等方法来进行。

# 以特征交互为例
import pandas as pd
df = pd.read_csv('data.csv')
df['diff'] = df['high'] - df['low']
df.to_csv('data_new.csv', index=False)

七、特征选择的优化

在进行特征选择的过程中,通常存在着一些优化问题,例如特征的数量过多、噪声数据的存在等。我们可以通过不断地尝试不同的特征选择方法、参数调整和数据预处理来优化特征选择的结果。

# 以网格搜索为例
from sklearn.model_selection import GridSearchCV
from sklearn.linear_model import Ridge
parameters = {'alpha':[0.001, 0.01, 0.1, 1, 10]}
ridge = GridSearchCV(Ridge(), parameters, cv=5)
ridge.fit(X_train, y_train)
print(ridge.best_params_)
特征工程是机器学习中不可或缺的一环,合理的特征工程不仅可以提高模型的准确率,还可以加快模型训练的速度。希望本文对特征工程有了更深入的了解。