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

苏米特·班迪帕迪亚

一、说明 

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

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

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

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

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

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 npdef zscore_outlier_detection(data, threshold=3):z_scores = (data - np.mean(data)) / np.std(data)outliers = np.abs(z_scores) > thresholdreturn outliers
  • 改进的 Z 得分方法:与 Z 得分方法类似,但使用稳健的变异估计,例如中值绝对偏差。
from scipy.stats import median_absolute_deviationdef 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_devoutliers = np.abs(modified_z_scores) > thresholdreturn 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 - q1lower_fence = q1 - k * iqrupper_fence = q3 + k * iqroutliers = (data < lower_fence) | (data > upper_fence)return outliers
  • K 最近邻 (KNN):测量每个点与其 k 个最近邻的距离,并将距离较大的点识别为异常值。
from sklearn.neighbors import NearestNeighborsdef 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_distanceoutliers = normalized_distances > thresholdreturn outliers
  • 局部异常值因子:计算每个点与其相邻点相比的局部密度,并将密度明显较低的点标记为异常值。
from sklearn.neighbors import LocalOutlierFactordef lof_outlier_detection(data, contamination=0.1):lof = LocalOutlierFactor(n_neighbors=20, contamination=contamination)outliers = lof.fit_predict(data) == -1return 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.mzph.cn/news/158168.shtml

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

相关文章

webpack external 详解

作用&#xff1a;打包时将依赖独立出来&#xff0c;在运行时&#xff08;runtime&#xff09;再从外部获取这些扩展依赖&#xff0c;目的时解决打包文件过大的问题。 使用方法&#xff1a; 附上代码块 config.set(externals, {vue: Vue,vue-router: VueRouter,axios: axios,an…

【实战教程】改进YOLOv5与Seg网络结合:实时车道线精准识别系统(含源码及部署步骤)

1.研究的背景 随着自动驾驶技术的不断发展&#xff0c;车道线的实时分割成为了自动驾驶系统中的重要任务之一。车道线的准确分割可以为自动驾驶系统提供重要的环境感知信息&#xff0c;帮助车辆进行准确的路径规划和决策。因此&#xff0c;开发一种高效准确的车道线实时分割系…

markdown常用命令说明,自己常用的,用到其他的再添加

对于要标红的字体 <font color"red">标签中的字会显示为红色</font> 之后的字不会再显示为红色注意: <font color"red">或者<font colorred>或者<font colorred>三种写法都可以

【ARFoundation学习笔记】2D图像检测跟踪

写在前面的话 本系列笔记旨在记录作者在学习Unity中的AR开发过程中需要记录的问题和知识点。主要目的是为了加深记忆。其中难免出现纰漏&#xff0c;更多详细内容请阅读原文以及官方文档。 汪老师博客 文章目录 2D图像检测创建一个图像检测工程图像追踪的禁用和启用多图像追踪…

快来瞧瞧这样制作出来的电子画册,还便于分享宣传呢!

说起电子画册制作&#xff0c;很多人都不知道从何入手。与传统纸质画册相比&#xff0c;电子画册最大的优点是便于传阅&#xff0c;通过微信、QQ等社交平台都能进行转发和分享。而且内容的排版基本上和纸质画册一致&#xff0c;不同的是&#xff0c;无论图片还是文字都可以赋予…

【数据结构算法(二)】链表总结

&#x1f308;键盘敲烂&#xff0c;年薪30万&#x1f308; 目录 普通单向链表 双向链表 带哨兵的链表 环形链表 ⭐双向带头带环链表的实现⭐ ⭐链表基础OJ⭐ 普通单向链表 结点结构&#xff1a;只有val 和 next指针 初始时&#xff1a;head null; 双向链表 指针&…

16.添加脚注footnote

在 LaTeX 中&#xff0c;您可以使用 \footnote 命令来添加脚注&#xff0c;其中包含您想要引用的网址。同时&#xff0c;为了使网址在文本中可点击&#xff0c;您可以使用 hyperref 宏包。 首先&#xff0c;在文档导言部分添加 hyperref 宏包&#xff1a; \usepackage{hyperr…

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

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

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

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

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

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

使用CSS渲染不同形状

本文只是用来记录自己遇到的图形 1.图形一 2.图形二 3.图形三 4.图形四 5.图形五

Windows安装Linux双系统教程

&#x1f4bb;Windows安装Linux双系统教程 &#x1f959;资源准备&#x1f354;启动盘制作&#x1f373;分区&#x1f32d;重启电脑&#x1f371;安装Ubuntu &#x1f959;资源准备 &#x1f4a1;下载ubuntu系统、refus启动盘制作程序&#x1f448; &#x1f4a1;一个U盘 &am…

定时器的使用

目录 前言 正文 1.方法 schedule(TimerTask task, Date time) 的测试 &#xff08;1&#xff09;执行任务的时间晚于当前时间(在未来执行)的效果 &#xff08;2&#xff09;线程TimerThread不销毁的原因 &#xff08;3&#xff09;使用 public void cancel() 方法实现 T…

手写promis(2)-- 链式编程篇

目录 链式编程 处理异常 和普通内容 链式编程---处理返回promise 链式编程---处理重复引用 链式编程--rejected 链式编程--处理padding状态 链式编程 处理异常 和普通内容 1.返回promise实例&#xff1a;在原本then方法里边创建新promise2.获取返回值&#xff1a;把原本…

基于安卓android微信小程序的小型企业人力资源管理系统-人事考勤app

运行环境 开发语言&#xff1a;Java 框架&#xff1a;ssm JDK版本&#xff1a;JDK1.8 服务器&#xff1a;tomcat7 小程序框架&#xff1a;uniapp 小程序开发软件&#xff1a;HBuilder X 小程序运行软件&#xff1a;微信开发者 项目介绍 基于微信小程序的小型企业人力资源管…

C语言基本算法之选择排序

目录 概要&#xff1a; 代码如下 运行结果如下 概要&#xff1a; 它和冒泡排序一样&#xff0c;都是把数组元素按顺序排列&#xff0c;但是方法不同&#xff0c;冒泡排序是把较小值一个一个往后面移&#xff0c;选择排序则是直接找出最小值&#xff0c;可以这个说&#xff…

Python+OpenCV裂缝面积识别系统(部署教程&源码)

1.研究背景与意义 随着科技的不断发展&#xff0c;计算机视觉技术在各个领域中得到了广泛的应用。其中&#xff0c;图像处理是计算机视觉中的一个重要分支&#xff0c;它通过对图像进行数字化处理&#xff0c;提取出其中的有用信息&#xff0c;为后续的分析和应用提供支持。而…

2023.11.22 -数据仓库

目录 https://blog.csdn.net/m0_49956154/article/details/134320307?spm1001.2014.3001.5501 1经典传统数仓架构 2离线大数据数仓架构 3数据仓库三层 数据运营层,源数据层&#xff08;ODS&#xff09;&#xff08;Operational Data Store&#xff09; 数据仓库层&#…

新生儿近视:原因、科普和注意事项

引言&#xff1a; 近年来&#xff0c;新生儿近视的发病率逐渐上升&#xff0c;引起了广泛关注。新生儿近视的原因复杂&#xff0c;可能受到遗传、环境和行为等多方面因素的影响。本文将深入解析新生儿近视的原因&#xff0c;提供相关科普知识&#xff0c;并为父母和监护人提供…

线性代数 - 几何原理

目录 序言向量的定义线性组合、张成空间与向量基线性变换和矩阵线性复合变换与矩阵乘法三维空间的线性变换行列式矩阵的秩和逆矩阵维度变换点乘叉乘基变换特征值和特征向量抽象向量空间 序言 欢迎阅读这篇关于线性代数的文章。在这里&#xff0c;我们将从一个全新的角度去探索线…