当前位置: 首页 > news >正文

特征工程与选择:优化模型性能的关键步骤----示例:特征工程在泰坦尼克号生存预测中的应用、使用递归特征消除(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'] + 1df['IsAlone'] = 1  # 初始化为1df.loc[df['FamilySize'] > 1, 'IsAlone'] = 0return 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_获取所选特征的索引,然后从原始特征列表中提取这些特征。
  • 重新训练模型

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

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


http://www.mrgr.cn/news/41628.html

相关文章:

  • C++多重继承
  • 酒店业CRM和酒店数据管理大数据—未来之窗行业应用跨平台架构
  • Allegro从.brd文件中导出器件封装
  • Python库pandas之二
  • MySQL 事务
  • 某度假村定岗定编项目成功案例纪实
  • 付费计量系统通用功能(10)
  • Webpack 特性:自定义 Loader 和 Plugin
  • 【C++二分查找 前缀和】1712. 将数组分成三个子数组的方案数|2078
  • 付费计量系统通用功能(9)
  • ERC 是什么?
  • 什么是虚拟化?| 裸机 vs 虚拟机 vs 容器
  • 免费录屏软件工具:助力高效屏幕录制
  • 数字控制系统
  • 媲美GPT-4o mini的小模型,Meta Llama 3.2模型全面解读!
  • `address-profile-spec-alias-ref` 元素
  • Golang | Leetcode Golang题解之第452题用最少数量的箭引爆气球
  • Python练习1
  • 在Ubuntu 16.04上使用LAMP安装WordPress
  • 死锁的成因与解决方案