特征工程完整指南 - 第一部分

news2024/9/24 5:30:41

苏米特·班迪帕迪亚

一、说明 

        特征工程是利用领域知识从原始数据中提取特征的过程。这些功能可用于提高机器学习算法的性能。本篇叙述在特征选择过程的若干数据处理。

一般来说,特征工程有以下子步骤:

  • 特征转换
  • 特征构建
  • 特征选择
  • 特征提取

二、特征转换的缺失数据处理

在特征变换中,我们做了以下几种处理

2.1 缺失值插补

        在现实世界中,通常不可能找到完整且没有缺失值或NaN值的数据。因此,我们可以删除包含这些缺失值的行,或者执行插补(填充缺失值)以确保 ML 模型处理这些数据。

        要从 pandas 数据框中删除行,我们使用以下命令

#Assuming data is store in df dataframe
df.isnull().sum()
#This returns the count of all the missing values in the columns

#In order to remove the missing values, we use drop function
df.drop(inplace=True)

2.2 数据插补

        它是用各种插补策略(例如均值中位数众数插补)替换缺失值的过程。然而,也可以通过根据领域知识为数据分配值来随机进行插补。

def mean_imputation(data, inplace=False):
    """
    This function replaces the missing values in the data with the average (mean) value of the data.
    
    Parameters:
    - data: The input data with missing values.
    - inplace: A boolean indicating whether to modify the data in place or return a new copy.
               If True, the missing values are filled in the original data; if False, a new copy with filled values is returned.
               (Default: False)
    """
    data.fillna(data.mean(), inplace=inplace)

def median_imputation(data, inplace=False):
    """
    This function replaces the missing values in the data with the median value of the data.
    
    Parameters:
    - data: The input data with missing values.
    - inplace: A boolean indicating whether to modify the data in place or return a new copy.
               If True, the missing values are filled in the original data; if False, a new copy with filled values is returned.
               (Default: False)
    """
    data.fillna(data.median(), inplace=inplace)

def mode_imputation(data, inplace=False):
    """
    This function replaces the missing values in the data with the mode value of the data.
    
    Parameters:
    - data: The input data with missing values.
    - inplace: A boolean indicating whether to modify the data in place or return a new copy.
               If True, the missing values are filled in the original data; if False, a new copy with filled values is returned.
               (Default: False)
    """
    data.fillna(data.mode(), inplace=inplace)

替代方法

threshold = 0.7
#Dropping columns with missing value rate higher than threshold
data = data[data.columns[data.isnull().mean() < threshold]]

#Dropping rows with missing value rate higher than threshold
data = data.loc[data.isnull().mean(axis=1) < threshold]

        我们还可以使用预测插补使用机器学习模型的插补

        在这种方法中,不是使用均值、中位数或众数等汇总统计来填充缺失值,而是使用机器学习模型根据在没有缺失值的剩余特征中观察到的模式来预测缺失值。

三、处理分类特征

        One-hot 编码是一种用于将分类变量表示为二进制向量的技术。它通常用于机器学习和数据预处理任务。one-hot 编码过程将每个分类值转换为一个新的二进制特征,其中值的存在或不存在分别由 1 或 0 表示。

        此方法将难以理解算法的分类数据更改为数字格式,并使您能够对分类数据进行分组而不会丢失任何信息。

一种热门编码技术

        在 one-hot 编码中,分类列中的每个不同值都由单独的二进制列表示。这意味着对于列中的 N 个不同值,将创建 N 个二进制列,每列代表特定值的存在或不存在。这种方法确保每个类别都有自己独立的二进制特征,使机器学习算法更容易理解和处理分类数据。

encoded_columns = pd.get_dummies(data['column'])
data = data.join(encoded_columns).drop('column', axis=1)

四、异常值检测

异常值检测是识别数据集中明显偏离大多数数据点的观测值的过程。

检测异常值在数据分析和机器学习中非常重要,因为它们会对模型的结果和性能产生重大影响。

统计方法:

  • Z 分数:计算每个数据点的 Z 分数,并标记 Z 分数高于特定阈值的数据点。
import numpy as np

def zscore_outlier_detection(data, threshold=3):
    z_scores = (data - np.mean(data)) / np.std(data)
    outliers = np.abs(z_scores) > threshold
    return outliers
  • 改进的 Z 得分方法:与 Z 得分方法类似,但使用稳健的变异估计,例如中值绝对偏差。
from scipy.stats import median_absolute_deviation

def modified_zscore_outlier_detection(data, threshold=3.5):
    median = np.median(data)
    median_abs_dev = median_absolute_deviation(data)
    modified_z_scores = 0.6745 * (data - median) / median_abs_dev
    outliers = np.abs(modified_z_scores) > threshold
    return outliers
  • Tukey 栅栏:将异常值识别为低于下栅栏 (Q1 — k * IQR) 或高于上栅栏 (Q3 + k * IQR) 的值,其中 Q1 和 Q3 是第一和第三四分位数,IQR 是四分位距。
def tukey_fences_outlier_detection(data, k=1.5):
    q1 = np.percentile(data, 25)
    q3 = np.percentile(data, 75)
    iqr = q3 - q1
    lower_fence = q1 - k * iqr
    upper_fence = q3 + k * iqr
    outliers = (data < lower_fence) | (data > upper_fence)
    return outliers
  • K 最近邻 (KNN):测量每个点与其 k 个最近邻的距离,并将距离较大的点识别为异常值。
from sklearn.neighbors import NearestNeighbors

def knn_outlier_detection(data, k=5, threshold=1.5):
    neigh = NearestNeighbors(n_neighbors=k)
    neigh.fit(data)
    distances, _ = neigh.kneighbors(data)
    median_distance = np.median(distances[:, -1])
    normalized_distances = distances[:, -1] / median_distance
    outliers = normalized_distances > threshold
    return outliers
  • 局部异常值因子:计算每个点与其相邻点相比的局部密度,并将密度明显较低的点标记为异常值。
from sklearn.neighbors import LocalOutlierFactor

def lof_outlier_detection(data, contamination=0.1):
    lof = LocalOutlierFactor(n_neighbors=20, contamination=contamination)
    outliers = lof.fit_predict(data) == -1
    return outliers

处理异常值的另一个选择是限制它们而不是丢弃它们。

#Capping the outlier rows with percentiles
upper_lim = data['column'].quantile(.95)
lower_lim = data['column'].quantile(.05)
data.loc[(df[column] > upper_lim),column] = upper_lim
data.loc[(df[column] < lower_lim),column] = lower_lim

五、特征缩放

        特征缩放是机器学习中的预处理步骤,涉及将数据集的数值特征转换为通用尺度。这很重要,因为当特征规模相似时,许多机器学习算法表现更好或收敛得更快。

        特征缩放的几种方法:

5.1 标准化(Z 分数归一化)

        此方法将特征缩放至零均值和单位方差。它减去特征的平均值并除以标准差。标准化的公式为: x_scaled = (x — Mean(x)) / std(x)
标准化可确保每个特征的平均值为 0标准差为 1,从而使所有特征具有相同的量级。

x = 观察值,μ = 平均值,σ = 标准差

from sklearn.preprocessing import StandardScaler

# Create an instance of StandardScaler
scaler = StandardScaler()

# Assuming your data is stored in a 2D array or dataframe X

# Fit the scaler to your data
scaler.fit(X)

# Transform the data
X_scaled = scaler.transform(X)

# The transformed data is now normalized using Z-score normalization

5.2 最小-最大缩放

        此方法将特征缩放到指定范围(通常在 0 到 1 之间)。它减去特征的最小值并除以范围(最大值减去最小值)。最小-最大缩放的公式为: x_scaled = (x — min(x)) / (max(x) — min(x))

from sklearn.preprocessing import MinMaxScaler
import numpy as np

# 4 samples/observations and 2 variables/features
data = np.array([[4, 6], [11, 34], [10, 17], [1, 5]])

# create scaler method
scaler = MinMaxScaler(feature_range=(0,1))

# fit and transform the data
scaled_data = scaler.fit_transform(data)

print(scaled_data)

# [[0.3        0.03448276]
#  [1.         1.        ] 
#  [0.9        0.4137931 ] 
#  [0.         0.        ]]

5.3 最大绝对缩放

        此方法将特征缩放到范围 [-1, 1]。它将每个特征值除以该特征中的最大绝对值。max-abs 缩放的公式为: x_scaled = x / max(abs(x))

from sklearn.preprocessing import MaxAbsScaler

# Create an instance of MaxAbsScaler
scaler = MaxAbsScaler()

# Assuming your data is stored in a 2D array or dataframe X

# Fit the scaler to your data
scaler.fit(X)

# Transform the data
X_scaled = scaler.transform(X)

# The transformed data is now scaled using max-abs scaling

特征缩放方法的选择取决于数据集的特征和所使用的机器学习算法的要求。

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

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

相关文章

12.文档中添加Appendix

要在 LaTeX 文档中添加附录&#xff0c;您可以使用 \appendix 命令&#xff0c;它会告诉 LaTeX 后续部分是附录。以下是添加附录的步骤&#xff1a; 在文档的导言部分&#xff08;在 \begin{document} 之前&#xff09;导入 appendix 宏包。您可以使用以下命令&#xff1a; \…

Centos8部署MySQL主从复制报错问题

问题1.在部署MySQL主从复制时&#xff0c;创建用户提示ERROR 1819&#xff1a;Your password does not satisfy the current policy requirements。即为当前配置的密码&#xff0c;不符合策略要求。 问题1解决方式&#xff1a; set global validate_password.policyLOW; \\…

「Verilog学习笔记」含有无关项的序列检测

专栏前言 本专栏的内容主要是记录本人学习Verilog过程中的一些知识点&#xff0c;刷题网站用的是牛客网 timescale 1ns/1ns module sequence_detect(input clk,input rst_n,input a,output reg match);reg [8:0] a_tem ; always (posedge clk or negedge rst_n) begin if (~rs…

jvs-智能bi(自助式数据分析)11.21更新功能上线

jvs智能bi更新功能 新增: 1.字段设置节点新增自定义时间格式功能&#xff1b; 自定义功能允许用户根据需要自定义日期和时间字段的显示格式&#xff0c;为用户提供了更大的灵活性和便利性 2.图表时间搜索条件新增向下兼容模式&#xff1b; 时间搜索条件的向下兼容模式允许用…

万界星空科技QMS质量管理系统介绍

QMS&#xff08;Quality Management System&#xff09;质量管理系统是五大基础系统之一&#xff0c;在工业企业中被广泛的应用&#xff0c;在质量策划、生产过程质量监督、体系审核和文档管理等业务上发挥着不可替代的作用。 一般制造业工厂现状&#xff1a;质量成本高&#x…

运动耳机哪个牌子好?盘点最值得入手的五款运动耳机

现在&#xff0c;不入耳的运动耳机成了许多运动爱好者的首选&#xff0c;我也不例外&#xff0c;不得不说骨传导耳机跟运动真的很搭&#xff0c;不仅佩戴稳固不掉落&#xff0c;而且防水好&#xff0c;可以说是最值得入手的运动耳机&#xff0c;为了避免大家在选购运动耳机的时…

超级会员卡积分收银系统源码 会员卡+积分商城+收银功能+多门店系统 附带完整的搭建教程

线上线下的融合已经成为趋势。在这个过程中&#xff0c;会员卡积分收银系统成为了许多企业不可或缺的一部分。该系统以超级会员卡为基础&#xff0c;结合积分商城、收银功能以及多门店系统&#xff0c;为企业提供了一站式的解决方案&#xff0c;帮助企业实现线上线下会员一体化…

CAS方式实现单点登录SSO

1. CAS介绍 CAS&#xff08;Central Authentication Service&#xff09;中心认证服务 下面这张图来自官网&#xff0c;清晰简单的介绍了CAS的继续交互过程 2. CAS具体实现 首先需要分别搭建CAS-server和CAS-client服务&#xff0c; 这两个服务分别在2台机器上&#xff0c;…

2023年国自然植物科学相关面上项目信息公布(小麦、大麦、棉花、大豆、玉米)

2024年申报国自然项目基金撰写及技巧http://mp.weixin.qq.com/s?__bizMzA4NTAwMTY1NA&mid2247575761&idx1&sn32dbacd3393f3b76a1e0668e4b8b3c89&chksm9fdd7c08a8aaf51ec31d4790067bb57751a09947eeb7e728b8c008d26b89adba37e0cab32a62&scene21#wechat_redi…

梨花教育,精心的声音可提升罪案剧的吸引力和体验

在为罪案剧录制配音时&#xff0c;配音员应致力于营造剧集所需的紧绚和不确定性&#xff0c;同时准确地传达角色的心理活动和情绪纠葛。罪案剧往往围绕着刑侦探索、法律较量、道德抉择等主题展开&#xff0c;因此配音需要与这些情境相适应。以下是进行罪案剧配音时的几点建议&a…

Vue 2使用element ui 表格不显示

直接修改package.json文件 把这两个依赖修改成对应的 删除node_modules 重新安装依赖 重启

集成电路工厂用什么ERP?哪家的集成电路ERP比较好

集成电路通常对制造工艺、生产设备、品质检验等方面有较高的要求&#xff0c;而随着智能技术和自动化技术的发展成熟&#xff0c;如今集成电路行业逐渐迈入数字化和智能化阶段&#xff0c;而至这个时代背景当中&#xff0c;很多集成电路工厂借助ERP实现信息化转型升级。 时至今…

汽车托运汽车会产生公里数吗?

汽车托运&#xff0c;顾名思义就是把汽车放在板车上进行托运&#xff0c;既然是被托运&#xff0c;那为什么还会产生公里数呢?是被司机私用了吗?还是被当成租赁工具租借出去了呢? 其实不然&#xff0c;回到托运流程里&#xff0c;特别是大板车&#xff0c;我们的线路有很多需…

008 OpenCV matchTemplate 模板匹配

目录 一、环境 二、模板匹配算法原理 三、代码演示 一、环境 本文使用环境为&#xff1a; Windows10Python 3.9.17opencv-python 4.8.0.74 二、模板匹配算法原理 cv.matchTemplate是OpenCV库中的一个函数&#xff0c;用于在图像中查找与模板匹配的特征。它的主要应用场景…

为何内存不够用?微服务改造启动多个Spring Boot的陷阱与解决方案

在生产环境中我们会遇到一些问题&#xff0c;此文主要记录并复盘一下当时项目中的实际问题及解决过程。 背景简述 最初系统上线后都比较正常风平浪静的。在系统运行了一段时间后&#xff0c;业务量上升后&#xff0c;生产上发现java应用内存占用过高&#xff0c;服务器总共64…

穿山甲SDK接入收益·android广告接入·app变现·广告千展收益·eCPM收益(2023.11)

接入穿山甲SDK的app 全屏文字滚动APP 数独训练APP 广告接入示例: Android 个人开发者如何接入广告SDK&#xff0c;实现app流量变现 接入穿山甲SDK app示例&#xff1a; android 数独小游戏 经典数独休闲益智 2023.11.11 ~ 2023.11.22 app接入上架有一段时间了&#xff0c;接…

毕业设计2049网上选课系统JSP【程序源码+文档+调试运行】

摘要 本文详细介绍了一个网上选课系统的设计与实现过程。该系统主要分为学生用户、管理员和教师用户三个模块&#xff0c;涵盖了用户登录、在线选课、信息管理、密码修改等功能。通过对系统功能的分析&#xff0c;进行了数据库设计和界面设计&#xff0c;并进行了测试和优化。…

5G将如何改变我们的生活和工作方式?

本文翻译自 How Will 5G Transform the Way We Live and Work?&#xff0c;作者&#xff1a;Ansam Yousry&#xff0c; 略有删改。 5G有潜力为所有人创造一个更加互联、高效和可持续的世界。 欢迎来到5G革命&#xff01; 想象一下这样一个世界&#xff0c;您可以在几秒钟内下…

人在国企,年薪30w,每天工作1小时,觉得没意思,要不要走?

精彩回顾&#xff1a;进了央企&#xff0c;拿了户口&#xff0c;却感觉被困住了。 我们经常对自己的掌握的技能视若无睹&#xff0c;认为那不过是寻常之物&#xff0c;但是对于不懂的人来说&#xff0c;那就是宝藏啊。就好像&#xff0c;你可能会做一个超级棒的PPT&#xff0c;…

上海站活动回顾 | 聚焦私募视野,助力量化投研交易

11月16日下午&#xff0c;DolphinDB 携手华金证券&#xff0c;在上海成功举办了 D-Day 私募行业交流会&#xff0c;为大家带来了详实的私募行业场景解析、功能介绍、案例分享及现场演示。三十余位来自私募机构的核心策略研发、量化交易员、数据分析专家们齐聚现场&#xff0c;深…