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

news2024/11/24 18:52:53

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

特征工程

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

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

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

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_获取所选特征的索引,然后从原始特征列表中提取这些特征。
  • 重新训练模型

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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2185814.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

平面电磁波(解麦克斯韦方程)

注意无源代表你立方程那个点xyzt处没有源,电场磁场也是这个点的。 j电流面密度,电流除以单位面积,ρ电荷体密度,电荷除以单位体积。 j方程组有16个未知数,每个矢量有三个xyz分量,即三个未知数,…

样式重置 normalize.css

安装normalize.css npm install --save normalize.csspnpm add normalize.css安装less yarn add less -Dmain.ts import { createApp } from vue import App from ./App.vue // 引入 import normalize.csscreateApp(App).mount(#app)index.less import less中的语法 imp…

JDBC 概述

JDBC 概述 JDBC的基本概念与功能JDBC的工作原理JDBC的组件与类JDBC的类型与特性JDBC的应用场景 JDBC(Java Database Connectivity)即Java数据库连接,是Java编程语言用于与数据库进行连接和操作的API(应用程序编程接口)…

K8s域名解析方案CoreDNS(K8s Domain Name Resolution Solution CoreDNS)

💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 本人主要分享计算机核心技…

MFC工控项目实例二十一型号选择界面删除参数按钮禁用切换

承接专栏《MFC工控项目实例二十手动测试界面模拟量输入实时显示》 对于禁止使用的删除、参数按钮,在选中列表控件选项时切换为能够使用。 1、在TypDlg.h文件中添加代码 #include "ShadeButtonST.h" #include "BtnST.h" class CTypDlg : publi…

(C语言贪吃蛇)9.贪吃蛇撞墙找死

目录 游戏说明​ 1.撞墙死翘翘的情况 2.如何解决初始化问题 封装函数initSnake(); 注意事项 解决方法 总结 效果演示 游戏说明 玩家通过上下左右按键来控制小蛇的移动,我们之前的内容完成了小蛇每按下一次右键小蛇便向右移动一格,但是玩贪吃蛇一…

(笔记)第三期书生·浦语大模型实战营(十一卷王场)--书生入门岛通关第2关Python 基础知识

学员闯关手册:https://aicarrier.feishu.cn/wiki/ZcgkwqteZi9s4ZkYr0Gcayg1n1g?open_in_browsertrue 课程视频:https://www.bilibili.com/video/BV1mS421X7h4/ 课程文档:https://github.com/InternLM/Tutorial/tree/camp3/docs/L0/Python 关…

某度假村定岗定编项目成功案例纪实

某度假村定岗定编项目成功案例纪实 引入分级定编系统,将个人工资和度假村当日绩效总额挂钩,解决忙闲不均带来的人工成本问题 【客户行业】文旅行业、酒店行业、度假村 【问题类型】定岗定编 【客户背景】 某度假村是一家集住宿、娱乐、健身等服务为…

【Nacos架构 原理】内核设计之Nacos寻址机制

文章目录 前提设计内部实现单机寻址文件寻址地址服务器寻址 前提 对于集群模式,集群内的每个Nacos成员都需要相互通信。因此这就带来一个问题,该以何种方式去管理集群内部的Nacos成员节点信息,即Nacos内部的寻址机制。 设计 要能够感知到节…

MybatisPlus代码生成器的使用

在使用MybatisPlus以后,基础的Mapper、Service、PO代码相对固定,重复编写也比较麻烦。因此MybatisPlus官方提供了代码生成器根据数据库表结构生成PO、Mapper、Service等相关代码。只不过代码生成器同样要编码使用,也很麻烦。 这里推荐大家使…

openpnp - 单独用CvPipeLineEditor来调试学习图片识别参数

文章目录 openpnp - 单独用CvPipeLineEditor来调试学习图片识别参数概述笔记官方给出的单独启动CvPipeLineEditor的方法我自己环境单独启动CvPipeLineEditor的方法CvPipeLineEditor启动后的样子添加命令的方法删除不要的命令参数调整多个命令参数的执行顺序添加命令用来载入实验…

数据治理006-数据标准的管理

元数据的分类和标准有哪些? 一、元数据的分类 元数据可以根据其描述的对象和属性不同,被分为不同的类型。以下是几种常见的元数据分类方法: 基于数据的类型:根据数据的类型,元数据可以被分为结构化元数据、非结构化元…

WPF用户控件的使用

WPF用户控件的使用 先看一下程序结构&#xff1a; WPF_Test是我的主程序&#xff1b;WPF_LIB是我添加的一个用户控件库&#xff0c;其中UserControl1是一个用户控件&#xff1b; 用户控件xaml代码&#xff1a; <UserControl x:Class"WPF_LIB.UserControl1"xmln…

爵士编曲:爵士钢琴编写的规律和步骤 关于教程的个人想法 举一反三

反思了下自己目前学习编曲和其他兴趣爱好时暴露出来的问题&#xff0c;就是举一反三的能力还有待提高&#xff01;平时多学习和多对学习内容进行举一反三&#xff0c;也就是根据一个例子&#xff0c;创作出类似的3个以上的例子&#xff0c;这样才算学会&#xff0c;并且事半功倍…

2024必备英语在线翻译工具推荐

英语在线翻译工具就如同一位随时待命的语言助手&#xff0c;为我们打破语言障碍&#xff0c;搭建起沟通的桥梁。接下来&#xff0c;让我们一起深入了解这些英语在线翻译工具的丰富功能及其为我们带来的便利。 1.福昕在线翻译 链接直达>>https://fanyi.pdf365.cn/doc …

【含文档】基于Springboot+微信小程序 的海产品加工销售一体化管理系统(含源码+数据库+lw)

1.开发环境 开发系统:Windows10/11 架构模式:MVC/前后端分离 JDK版本: Java JDK1.8 开发工具:IDEA 数据库版本: mysql5.7或8.0 数据库可视化工具: navicat 服务器: SpringBoot自带 apache tomcat 主要技术: Java,Springboot,mybatis,mysql,vue 2.视频演示地址 3.功能 系统定…

基于SpringBoot+Vue+MySQL的民宿预订平台

系统展示 用户前台界面 管理员后台界面 商家后台界面 系统背景 随着旅游业的蓬勃发展&#xff0c;民宿作为一种独特的住宿方式&#xff0c;受到了越来越多游客的青睐。然而&#xff0c;传统的民宿预定方式往往存在信息不对称、效率低下等问题&#xff0c;难以满足游客的个性化需…

python的内存管理机制

python的内存管理机制主要分为三个部分&#xff1a;引用计数、垃圾回收和内存池机制。 引用计数机制&#xff1a; python通过维护每个对象的引用计数来跟踪内存中的对象。当对象被创建时就会有一个引用计数&#xff0c;当对象不再被使用时&#xff0c;引用计数为0&#xff0c…

Android SystemUI组件(08)睡眠灭屏 锁屏处理流程

该系列文章总纲链接&#xff1a;专题分纲目录 Android SystemUI组件 本章关键点总结 & 说明&#xff1a; 说明&#xff1a;本章节持续迭代之前章节的思维导图&#xff0c;主要关注左侧上方锁屏分析部分 睡眠灭屏 即可。 Power按键的处理逻辑最终是由PhoneWindowManager来完…

【电路基础 · 2】电阻电路的等效变换(自用)

总览 1.电路的等效变换 1.1 电阻电路 1.2 等效变换是什么 1.3 线性电路和非线性电路 1.4 时变电路和非时变电路 1.5 二端网络&#xff08;一端口网络&#xff09;、四端网络&#xff08;二端口网络&#xff09;、六端网络&#xff08;三端口网络&#xff09; 1.6 两端电路的等…