特征工程与选择:优化模型性能的关键步骤----示例:特征工程在泰坦尼克号生存预测中的应用、使用递归特征消除(RFE)进行特征选择

    特征工程和特征选择是机器学习流程中至关重要的环节,直接影响到模型的性能。特征工程涉及从原始数据中提取或构造有用的特征,而特征选择则是从已有的特征集中挑选出最相关的子集。

特征工程

特征工程是指创建能够使机器学习算法更好地理解数据的新特征的过程。这包括处理缺失值、编码分类变量、标准化数值特征等。

示例:特征工程在泰坦尼克号生存预测中的应用

假设一个泰坦尼克号乘客的数据集目标是预测哪些乘客可能幸存。

import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler, OneHotEncoder
from sklearn.compose import ColumnTransformer
from sklearn.pipeline import Pipeline
from sklearn.ensemble import RandomForestClassifier
from sklearn.metrics import accuracy_score

# 加载数据
data = pd.read_csv('titanic.csv')

# 数据预处理
def preprocess_data(df):
    # 填充缺失值
    df['Age'].fillna(df['Age'].median(), inplace=True)
    df['Embarked'].fillna(df['Embarked'].mode()[0], inplace=True)
    
    # 创建新特征
    df['FamilySize'] = df['SibSp'] + df['Parch'] + 1
    df['IsAlone'] = 1  # 初始化为1
    df.loc[df['FamilySize'] > 1, 'IsAlone'] = 0
    
    return df

# 处理数据
data = preprocess_data(data)

# 定义特征和标签
features = ['Pclass', 'Sex', 'Age', 'Fare', 'Embarked', 'FamilySize', 'IsAlone']
X = data[features]
y = data['Survived']

# 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

# 特征转换
preprocessor = ColumnTransformer(
    transformers=[
        ('num', StandardScaler(), ['Age', 'Fare', 'FamilySize']),
        ('cat', OneHotEncoder(), ['Pclass', 'Sex', 'Embarked', 'IsAlone'])
    ])

# 创建管道
pipeline = Pipeline(steps=[
    ('preprocessor', preprocessor),
    ('classifier', RandomForestClassifier(random_state=42))
])

# 训练模型
pipeline.fit(X_train, y_train)

# 预测
predictions = pipeline.predict(X_test)

# 评估模型
print("Accuracy:", accuracy_score(y_test, predictions))

 

  • 数据加载

    • 使用pandas读取CSV文件。
  • 数据预处理

    • preprocess_data函数用于填充缺失值,并创建新的特征FamilySize(家庭大小)和IsAlone(是否独自一人)。
  • 特征和标签定义

    • 选择相关特征并分离标签。
  • 数据划分

    • 将数据划分为训练集和测试集。
  • 特征转换

    • 使用ColumnTransformer对数值特征进行标准化,对分类特征进行独热编码。
  • 创建管道

    • 使用Pipeline将特征转换和分类器组合在一起,简化了模型训练过程。
  • 训练和评估

    • 训练随机森林分类器并评估其在测试集上的准确率。
特征选择

   特征选择是从现有特征集中挑选出最相关于目标变量的子集的过程。常用的方法包括基于统计测试的选择方法、递归特征消除(RFE)等。

示例:使用递归特征消除(RFE)进行特征选择

继续使用泰坦尼克号数据集,将使用RFE来选择最重要的特征。

from sklearn.feature_selection import RFE

# 使用RFE进行特征选择
selector = RFE(estimator=RandomForestClassifier(random_state=42), n_features_to_select=5, step=1)
selector = selector.fit(X_train, y_train)

# 获取所选特征
selected_features = X_train.columns[selector.support_]
print("Selected Features:", selected_features)

# 使用选定的特征重新训练模型
X_train_selected = X_train[selected_features]
X_test_selected = X_test[selected_features]

# 重新创建管道
pipeline = Pipeline(steps=[
    ('preprocessor', preprocessor),
    ('classifier', RandomForestClassifier(random_state=42))
])

# 训练模型
pipeline.fit(X_train_selected, y_train)

# 预测
predictions = pipeline.predict(X_test_selected)

# 评估模型
print("Accuracy with Selected Features:", accuracy_score(y_test, predictions))
  • 特征选择

    • 使用RFE类进行递归特征消除,指定要选择的特征数量为5。
    • fit方法训练RFE模型,并返回选择的特征。
  • 获取所选特征

    • 通过selector.support_获取所选特征的索引,然后从原始特征列表中提取这些特征。
  • 重新训练模型

    • 使用选定的特征重新训练随机森林分类器,并评估其性能。

通过上述示例,可以看到特征工程和特征选择是如何帮助我们提高模型性能的。特征工程可以创建更有意义的特征,而特征选择可以帮助我们找到最相关的特征,从而简化模型并提高泛化能力。 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

何遇mirror

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值