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

苏米特·班迪帕迪亚

一、说明 

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

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

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

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

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

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

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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

全志R128芯片RTOS调试指南

RTOS 调试指南 此文档介绍 FreeRTOS 系统方案支持的常用软件调试方法&#xff0c;帮助相关开发人员快速高效地进行软件调试&#xff0c;提高解决软件问题的效率。 栈回溯 栈回溯是指获取程序的调用链信息&#xff0c;通过栈回溯信息&#xff0c;能帮助开发者快速理清程序执行…

Jemeter的简单使用教程(压测)

Jemter 使用教程&#xff08;压测&#xff0c;吞吐量测试&#xff09;_jemter教程-CSDN博客 启动Jmeter 打开bin包下的Jmeter.bat启动jmeter 使用Jmeter编写测试计划 1.新建测试计划 这里命名为了测试计划 2.添加线程组 线程组参数详解&#xff1a; 线程数&#xff1a;模拟…

『亚马逊云科技产品测评』活动征文|利用EC2云服务器快速部署一个SpringBoot项目

&#xff08;授权声明&#xff1a;本篇文章授权活动官方亚马逊云科技文章转发、改写权&#xff0c;包括不限于在 Developer Centre, 知乎&#xff0c;自媒体平台&#xff0c;第三方开发者媒体等亚马逊云科技官方渠道&#xff09; 1. 前言 本文主要是对亚马逊云科技的EC2进行体…

基于野马算法优化概率神经网络PNN的分类预测 - 附代码

基于野马算法优化概率神经网络PNN的分类预测 - 附代码 文章目录 基于野马算法优化概率神经网络PNN的分类预测 - 附代码1.PNN网络概述2.变压器故障诊街系统相关背景2.1 模型建立 3.基于野马优化的PNN网络5.测试结果6.参考文献7.Matlab代码 摘要&#xff1a;针对PNN神经网络的光滑…

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; \\…

Sulfo-CY5 DBCO的荧光特点、激发发射-星戈瑞

**Sulfo-CY5 DBCO是一种近红外荧光标记探针&#xff0c;具有以下荧光特点&#xff1a; 激发波长&#xff1a;**Sulfo-CY5 DBCO的激发波长位于近红外区域&#xff0c;通常在650-670纳米之间。近红外光在生物体内具有较好的组织穿透性&#xff0c;能够减少组织自发荧光的干扰&…

Redis-Redis持久化,主从哨兵架构详解

Redis持久化 RDB快照&#xff08;snapshot&#xff09; 在默认情况下&#xff0c; Redis 将内存数据库快照保存在名字为 dump.rdb 的二进制文件中。 你可以对 Redis 进行设置&#xff0c; 让它在“ N 秒内数据集至少有 M 个改动”这一条件被满足时&#xff0c; 自动保存一次数…

python数据结构与算法-13_高级排序算法-分治法

分治法 (Divide and Conquer) 很多有用的算法结构上是递归的&#xff0c;为了解决一个特定问题&#xff0c;算法一次或者多次递归调用其自身以解决若干子问题。 这些算法典型地遵循分治法的思想&#xff1a;将原问题分解为几个规模较小但是类似于原问题的子问题&#xff0c;递…

基于SSM的公司仓库管理系统(有报告)。Javaee项目

演示视频&#xff1a; 基于SSM的公司仓库管理系统&#xff08;有报告&#xff09;。Javaee项目 项目介绍&#xff1a; 采用M&#xff08;model&#xff09;V&#xff08;view&#xff09;C&#xff08;controller&#xff09;三层体系结构&#xff0c;通过Spring SpringMvc …

基于SpringBoot+Redis的前后端分离外卖项目-苍穹外卖(七)

分页查询、删除和修改菜品 1. 菜品分页查询1.1 需求分析和设计1.1.1 产品原型1.1.2 接口设计 1.2 代码开发1.2.1 设计DTO类1.2.2 设计VO类1.2.3 Controller层1.2.4 Service层接口1.2.5 Service层实现类1.2.6 Mapper层 1.3 功能测试1.3.2 前后端联调测试 2. 删除菜品2.1 需求分析…

11月22日星期三今日早报简报微语报早读

11月22日星期三&#xff0c;农历十月初十&#xff0c;早报微语早读。 1、我国自主研发气象无人艇实现首次海上云雾立体观测。 2、国家统计局与国家医疗保障局签署数据共享利用合作协议。 3、三部门&#xff1a;加强全国重点文物保护单位内古树名木保护。 4、油价4连降&#xf…

COMSOL 多场耦合仿真技术与应用”光电常见案例应用

(一)案列应用实操教学&#xff1a; 案例一 光子晶体能带分析、能谱计算、光纤模态计算、微腔腔膜求解 案例二 类比凝聚态领域魔角石墨烯的moir 光子晶体建模以及物理分析 案例三 传播表面等离激元和表面等离激元光栅等 案例四 超材料和超表面仿真设计&#xff0c;周期性超表面…

21款奔驰GLS450升级23P驾驶辅助 提升安全出行

辅助驾驶越来越多的被大家所青睐&#xff01;为了提升驾驶安全性和舒适便捷性奔驰改装原厂半自动驾驶23P辅助系统 23P智能辅助驾驶系统还是很有必要的&#xff0c;因为在跑高速的时候可以使用23P智能驾驶的自动保持车速&#xff0c;保持车距&#xff0c;车道自动居中行驶以及自…

数据集笔记:Pems 自行下载数据+python处理

以下载District 4的各station每5分钟的车速为例 1 PEMS网站下载数据 点击红色的 选择需要的station和区域&#xff0c;点击search&#xff0c;就是对应的数据&#xff0c;点击数据即可下载 &#xff08;这个是station每5分钟的速度数据&#xff09; 2 pems 速度数据 2.1 每一…

虾皮泰国选品-如何使用知虾进行市场分析和选品

在电商平台上&#xff0c;选品是一项非常重要的任务。虾皮作为泰国地区最大的电商平台之一&#xff0c;提供了一款名为“知虾”的选品工具&#xff0c;帮助卖家进行市场分析和选品决策。本文将介绍如何使用知虾进行虾皮泰国选品市场分析和选品&#xff0c;以及其中的具体步骤和…

C题目11:数组a[m]排序

每日小语 双手&#xff0c;且放下一切劳作&#xff0c;前额&#xff0c;也忘掉忧思&#xff0c;此时此刻我所有的感觉就想沉入安睡。 自己敲写 这个问题老师上课讲了一种方法&#xff0c;叫做冒泡排序。基本思想是 1.找最小值&#xff0c;放到a[0] 2.从a[1]~a[3]找最小值&a…

Spark---转换算子、行动算子、持久化算子

一、转换算子和行动算子 1、Transformations转换算子 1&#xff09;、概念 Transformations类算子是一类算子&#xff08;函数&#xff09;叫做转换算子&#xff0c;如map、flatMap、reduceByKey等。Transformations算子是延迟执行&#xff0c;也叫懒加载执行。 2)、Transf…

ROS2对比ROS1的一些变化与优势(全新安装ROS2以及编译错误处理)《1》

1、概述 我们在前面介绍的ROS&#xff0c;都是ROS1的版本&#xff0c;近期对机器狗进行学习的时候&#xff0c;发现版本是ROS2了&#xff0c;也发现平时习惯的一些命令都有了变化&#xff0c;改变还是挺大的&#xff0c;不过熟悉之后还是很习惯ROS2的写法。 ROS2不是在ROS1的基…

NV080D语音芯片:让智能快递柜取件更便利

随着互联网的普及和电子商务的迅速发展&#xff0c;网购消费已经成为了越来越多人的选择。这也催生了一个庞大的“网购一族”&#xff0c;他们购买的各种商品会通过快递公司送到家门口。然而&#xff0c;收取快递往往也伴随着一系列问题。比如&#xff0c;派送时间和收件人取件…

如何通过提升客户体验带来更大的增长、更好的客户留存率?

客户期望的转变 在一个日益数字化的世界里&#xff0c;有必要采取以客户为中心的思维方式。因为客户与企业互动的方式有很多是在数字空间发生的&#xff0c;客户的需求和模式已经转变。 这种情况已经酝酿了几年&#xff0c;但在2020年才打开闸门。随着疫情的爆发&#xff0c;企…