机器学习中的数据预处理步骤2

机器学习:7个步骤-2-数据预处理-异常值处理 异常值的判断 1、使用均值和标准差进行判断 mean 为数据的均值 std 为数据的标准差 数据的正常范围为 【mean-2 × std,mean+2 × std】 import pandas as pd import numpy as np tips = pd.read_csv('tips.csv') tipmean=tips['tip'].mean() tipstd = tips['tip'].std() topnum1 =tipmean+2*tipstd bottomnum1 = tipmean-2 阅读详情

机器学习中的数据预处理步骤

数据预处理是机器学习工作流程中至关重要的一环,它能够显著提高模型的性能和准确性。以下是数据预处理的主要步骤及相关的scikit-learn函数和使用场景:

1. 数据加载与探索

在开始处理数据之前,首先需要加载数据并了解其基本情况。

常用函数:

  • pandas.read_csv()/pandas.read_excel() - 读取数据文件
  • pandas.DataFrame.describe() - 获取数据统计摘要
  • pandas.DataFrame.info() - 查看数据类型和缺失值
  • pandas.DataFrame.head() - 查看前几行数据

实例:

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns

# 加载数据
df = pd.read_csv('dataset.csv')

# 查看数据信息
print(df.info())
print(df.describe())

# 查看前几行数据
print(df.head())

# 数据可视化
plt.figure(figsize=(10, 6))
sns.heatmap(df.corr(), annot=True, cmap='coolwarm')
plt.title('特征相关性矩阵')
plt.show()

2. 处理缺失值

缺失值可能会影响模型训练效果,需要通过填充或删除来处理。

常用函数:

  • sklearn.impute.SimpleImputer - 用于替换缺失值
  • pandas.DataFrame.dropna() - 删除包含缺失值的行或列

使用场景:

  • 当缺失值较少时,可以考虑删除包含缺失值的行
  • 对于连续型变量,可以用均值、中位数或众数填充
  • 对于分类变量,可以用众数填充

实例:

from sklearn.impute import SimpleImputer

# 使用均值填充数值型特征的缺失值
numerical_imputer = SimpleImputer(strategy='mean')
df_numerical = df.select_dtypes(include=['int64', 'float64'])
df[df_numerical.columns] = numerical_imputer.fit_transform(df_numerical)

# 使用众数填充分类特征的缺失值
categorical_imputer = SimpleImputer(strategy='most_frequent')
df_categorical = df.select_dtypes(include=['object'])
df[df_categorical.columns] = categorical_imputer.fit_transform(df_categorical)

3. 处理异常值/离群点

异常值会影响统计分析和模型训练,需要识别并处理。

常用函数:

  • sklearn.ensemble.IsolationForest - 异常检测
  • scipy.stats.zscore - 计算Z分数

使用场景:

  • 当数据集较大且异常点很明显时,可以考虑删除
  • 也可以考虑将异常值截断到某个合理范围
  • 对于高维数据,可以使用隔离森林等算法检测异常值

实例:

import numpy as np
from scipy import stats

# 使用Z分数检测并处理异常值
z_scores = stats.zscore(df['feature'])
abs_z_scores = np.abs(z_scores)
filtered_entries = (abs_z_scores < 3)  # 保留Z分数绝对值小于3的数据点
df_no_outliers = df[filtered_entries]

# 或者使用IQR方法检测并处理异常值
Q1 = df['feature'].quantile(0.25)
Q3 = df['feature'].quantile(0.75)
IQR = Q3 - Q1
lower_bound = Q1 - 1.5 * IQR
upper_bound = Q3 + 1.5 * IQR
df_no_outliers = df[(df['feature'] >= lower_bound) & (df['feature'] <= upper_bound)]

4. 特征编码

将分类特征转换为数值形式,以便模型可以处理。

常用函数:

  • sklearn.preprocessing.LabelEncoder - 将类别标签编码为0到n_classes-1
  • sklearn.preprocessing.OneHotEncoder - 将分类特征转换为独热编码
  • sklearn.preprocessing.OrdinalEncoder - 用于有序分类特征的编码
  • sklearn.preprocessing.TargetEncoder - 用目标变量的均值替换分类变量

使用场景:

  • LabelEncoder适用于目标变量的编码
  • OneHotEncoder适用于没有顺序关系的分类特征
  • OrdinalEncoder适用于有顺序关系的分类特征
  • TargetEncoder适合处理高基数分类特征

实例:

from sklearn.preprocessing import LabelEncoder, OneHotEncoder

# 对目标变量进行标签编码
label_encoder = LabelEncoder()
df['target_encoded'] = label_encoder.fit_transform(df['target'])

# 对分类特征进行独热编码
categorical_features = ['feature1', 'feature2']
one_hot_encoder = OneHotEncoder(sparse_output=False, drop='first')
encoded_features = one_hot_encoder.fit_transform(df[categorical_features])
encoded_df = pd.DataFrame(encoded_features, 
                          columns=one_hot_encoder.get_feature_names_out(categorical_features))
df = pd.concat([df.drop(categorical_features, axis=1), encoded_df], axis=1)

5. 特征缩放/标准化

调整特征的尺度,使特征具有可比性,这对于许多算法非常重要。

常用函数:

  • sklearn.preprocessing.StandardScaler - 标准化,使数据均值为0,标准差为1
  • sklearn.preprocessing.MinMaxScaler - 将数据缩放到特定范围(默认为[0,1])
  • sklearn.preprocessing.RobustScaler - 使用中位数和四分位数,对异常值不敏感
  • sklearn.preprocessing.Normalizer - 将样本缩放到单位范数

使用场景:

  • StandardScaler适用于正态分布数据
  • MinMaxScaler适用于希望特征在固定范围内的情况
  • RobustScaler适用于存在异常值的数据
  • Normalizer适用于需要考虑样本向量方向而非幅值的情况

实例:

from sklearn.preprocessing import StandardScaler, MinMaxScaler, RobustScaler

# 标准化
scaler = StandardScaler()
df_scaled = scaler.fit_transform(df[['feature1', 'feature2', 'feature3']])

# MinMax缩放到[0,1]区间
min_max_scaler = MinMaxScaler()
df_min_max_scaled = min_max_scaler.fit_transform(df[['feature1', 'feature2', 'feature3']])

# 使用RobustScaler处理有异常值的数据
robust_scaler = RobustScaler()
df_robust_scaled = robust_scaler.fit_transform(df[['feature1', 'feature2', 'feature3']])

6. 特征选择

选择最相关或最重要的特征,减少维度,提高模型性能。

常用函数:

  • sklearn.feature_selection.SelectKBest - 选择K个最佳特征
  • sklearn.feature_selection.RFE - 递归特征消除
  • sklearn.feature_selection.SelectFromModel - 基于模型的特征选择

使用场景:

  • SelectKBest适用于基于统计测试选择特征
  • RFE适用于通过递归减少特征数量
  • SelectFromModel适用于基于树模型等提取特征重要性

实例:

from sklearn.feature_selection import SelectKBest, f_classif, RFE
from sklearn.ensemble import RandomForestClassifier

# 使用SelectKBest选择最佳的3个特征
selector = SelectKBest(score_func=f_classif, k=3)
X_new = selector.fit_transform(X, y)
selected_features = X.columns[selector.get_support()]

# 使用随机森林和RFE进行特征选择
rf = RandomForestClassifier()
rfe = RFE(estimator=rf, n_features_to_select=5)
X_rfe = rfe.fit_transform(X, y)
selected_features_rfe = X.columns[rfe.support_]

7. 特征工程

创建新特征或转换现有特征,以提高模型性能。

常用函数:

  • sklearn.preprocessing.PolynomialFeatures - 创建多项式特征
  • sklearn.preprocessing.FunctionTransformer - 应用自定义函数变换
  • sklearn.decomposition.PCA - 主成分分析降维

使用场景:

  • PolynomialFeatures适用于捕捉非线性关系
  • FunctionTransformer适用于应用自定义变换
  • PCA适用于降维和处理多重共线性

实例:

from sklearn.preprocessing import PolynomialFeatures
from sklearn.decomposition import PCA

# 创建多项式特征
poly = PolynomialFeatures(degree=2, include_bias=False)
X_poly = poly.fit_transform(X)

# 使用PCA降维
pca = PCA(n_components=5)
X_pca = pca.fit_transform(X)
print(f"解释方差比例: {pca.explained_variance_ratio_}")

8. 数据分割

将数据集分为训练集和测试集,以评估模型性能。

常用函数:

  • sklearn.model_selection.train_test_split - 随机分割数据集
  • sklearn.model_selection.KFold - K折交叉验证

使用场景:

  • train_test_split适用于简单的训练/测试分割
  • KFold适用于进行交叉验证

实例:

from sklearn.model_selection import train_test_split, KFold

# 简单的训练/测试分割
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

# K折交叉验证
kf = KFold(n_splits=5, shuffle=True, random_state=42)
for train_index, test_index in kf.split(X):
    X_train, X_test = X.iloc[train_index], X.iloc[test_index]
    y_train, y_test = y.iloc[train_index], y.iloc[test_index]
    # 训练和评估模型

9. 类别不平衡处理

处理训练集中类别分布不均的情况。

常用函数:

  • sklearn.utils.class_weight.compute_class_weight - 计算类别权重
  • imblearn.over_sampling.SMOTE - 合成少数类过采样技术
  • imblearn.under_sampling.RandomUnderSampler - 随机欠采样

使用场景:

  • 当类别严重不平衡时
  • 当少数类样本较少或稀有事件检测

实例:

from imblearn.over_sampling import SMOTE
from sklearn.utils.class_weight import compute_class_weight

# 使用SMOTE过采样
smote = SMOTE(random_state=42)
X_resampled, y_resampled = smote.fit_resample(X, y)

# 计算类别权重
class_weights = compute_class_weight(class_weight='balanced', classes=np.unique(y), y=y)
class_weight_dict = dict(zip(np.unique(y), class_weights))

# 在模型中使用类别权重
model = RandomForestClassifier(class_weight=class_weight_dict)

完整的数据预处理实例

下面是一个完整的数据预处理流程示例,整合了上述步骤:

import pandas as pd
import numpy as np
from sklearn.impute import SimpleImputer
from sklearn.preprocessing import StandardScaler, OneHotEncoder
from sklearn.compose import ColumnTransformer
from sklearn.pipeline import Pipeline
from sklearn.model_selection import train_test_split
from sklearn.ensemble import RandomForestClassifier
from sklearn.metrics import classification_report

# 1. 加载数据
df = pd.read_csv('你的数据.csv')
print("数据基本信息:")
print(df.info())
print("\n数据预览:")
print(df.head())

# 2. 分离特征和目标变量
X = df.drop('target', axis=1)
y = df['target']

# 3. 识别数值和分类特征
numerical_features = X.select_dtypes(include=['int64', 'float64']).columns.tolist()
categorical_features = X.select_dtypes(include=['object']).columns.tolist()

# 4. 创建数据预处理管道
# 数值特征处理:填充缺失值 + 标准化
numerical_transformer = Pipeline(steps=[
    ('imputer', SimpleImputer(strategy='median')),
    ('scaler', StandardScaler())
])

# 分类特征处理:填充缺失值 + 独热编码
categorical_transformer = Pipeline(steps=[
    ('imputer', SimpleImputer(strategy='most_frequent')),
    ('onehot', OneHotEncoder(handle_unknown='ignore'))
])

# 组合所有预处理步骤
preprocessor = ColumnTransformer(
    transformers=[
        ('num', numerical_transformer, numerical_features),
        ('cat', categorical_transformer, categorical_features)
    ])

# 5. 创建完整的模型管道
model_pipeline = Pipeline(steps=[
    ('preprocessor', preprocessor),
    ('classifier', RandomForestClassifier(random_state=42))
])

# 6. 分割数据为训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

# 7. 训练模型
model_pipeline.fit(X_train, y_train)

# 8. 评估模型
y_pred = model_pipeline.predict(X_test)
print("\n模型评估:")
print(classification_report(y_test, y_pred))

# 9. 特征重要性分析(如果适用)
if hasattr(model_pipeline.named_steps['classifier'], 'feature_importances_'):
    # 获取处理后的特征名称
    feature_names = []
    
    # 获取数值特征名称
    if numerical_features:
        feature_names.extend(numerical_features)
    
    # 获取独热编码后的分类特征名称
    if categorical_features:
        ohe = preprocessor.named_transformers_['cat'].named_steps['onehot']
        feature_names.extend(ohe.get_feature_names_out(categorical_features))
    
    # 获取特征重要性
    importances = model_pipeline.named_steps['classifier'].feature_importances_
    
    # 创建特征重要性DataFrame并排序
    feature_importance_df = pd.DataFrame({
        'Feature': feature_names,
        'Importance': importances
    }).sort_values(by='Importance', ascending=False)
    
    print("\n特征重要性:")
    print(feature_importance_df.head(10))  # 显示前10个重要特征

以上是使用scikit-learn进行数据预处理的完整流程,包括数据加载、缺失值处理、特征编码、特征缩放、特征工程和模型训练与评估。这个流程适用于大多数机器学习任务,可以根据具体数据集和问题进行适当调整。

人工智能Python数据准备预处理数据 数据预处理步骤按照以下步骤在Python中预处理数据 -第1步 - 导入有用的软件包 - 如果使用Python,那么这将成为将数据转换为特定格式(即预处理)的第一步。如下代码 -Python这里使用了以下两个软件包 -• NumPy - 基本上NumPy是一种通用的数组处理软件包,设计用于高效处理任意记录的大型多维数组而不牺牲小型多维数组的速度。 阅读详情

相关推荐

机器学习----特征预处理

特征预处理 通过一些转换函数将特征数据转换成更加适合算法模型的特征数据的过程。 特征的单位或者大小相差较大,或者某特征的方差相比其他的特征要大出几个数量级,容易影响(支配)目标结果,使得一些算法无法学习到其它的特征。对数据进行标准化或者归一化可解决此类现象 from sklearn.preprocessing import StandardScaler, MinMaxScaler, RobustS...

yhx_jmdx的博客 531

机器学习中的数据预处理方法与步骤

机器学习预处理详细方法

全栈川川 4万+

Ubuntu20.04下Pycharm的快速安装与配置指南

本文提供了一份详细的Ubuntu 20.04系统下PyCharm社区版的安装与配置指南。文章重点介绍了通过手动下载.tar.gz压缩包进行安装的灵活方法,并涵盖了系统准备、依赖安装、首次运行、创建快捷方式以及解释器配置等关键步骤,帮助Python开发者快速搭建高效、可控的本地开发环境。

weixin_28831341的博客 379

机器学习:数据预处理

数据预处理:无量纲化,缺失值,字符编码

qq_65431299的博客 2303

华为硬件逻辑岗笔试题(一)

积少成多,集腋成裘,坚持!!! 目录 1. 进制转换 2. 状态机和编码方式 3. 存储器的分类 4. Verilog语法中的操作符 5. 对组合逻辑的认识 6. 对时序逻辑的认识 7. 竞争冒险的认识 8. 基本时序逻辑电路 9. 建立时间和保持时间 10. 同步时序电路 11. 组合逻辑和时序逻辑判断 13. 基本总线的理解 14.加法器 15.FPGA开发工具 1. 进制转换 1、十进制46.25对应的二进制表达式为( )。 A 101110.11...

qq_42235129的博客 1万+

风力发电机缺陷检测平台

风力发电机缺陷检测平台相关内容展示

weixin_39779415的博客 1111

机器学习:数据预处理(学习笔记)

ps:本笔记是因为在完善模型时将自己的数据集代入会引发很多的错误,例如:缺省值对函数运算造成的报错,通过数据转换后数据形状不匹配,导致预测结果无法正确生成等等,因此我打算正式的学习一下有关数据处理的相关知识,而不是和之前一样,在借鉴的模型中有用到的才去查询相关的信息。主要以python中对机器学习的数据处理。

OHHHHH890的博客 3679

树莓派4B系统安装及SSH远程控制(简单易操作)

​自从2022年4月树莓派官网更新了RaspberryPiImager版本v1.7.2后,便不再支持自行建立ssh文件,并用默认用户名pi和密码raspberry的方式进行远程控制(亲测不行,输密码时一直access denied)。但是该版本软件提供了烧录系统前设置ssh用户及密码功能。本文记录了系统安装和SSH远程操作步骤。........................

机械人的代码路 5790

机器学习——数据的预处理(总结大全)

特征缩放 一、为什么要特征数据缩放? 有特征的取值范围变化大,影响到其他的特征取值范围较小的,那么,根据欧氏距离公式,整个距离将被取值范围较大的那个特征所主导。 为避免发生这种情况,一般对各个特征进行缩放,比如都缩放到[0,1],以便每个特征属性对距离有大致相同的贡献。 作用:确保这些特征都处在一个相近的范围。 优点:1、这能帮助梯度下降算法更快地收敛,2、提高模型精 直接求解的缺点: 1、当x1 特征对应权重会比x2 对应的权重小很多,降低模型可解释性 2、梯度......

君莫笑的博客 3万+

YOLOv5改进 | 多尺度特征提取 | 结合多样分支块及融合的高级设计(CVPR2021)

YOLOv5改进 | 多尺度特征提取 | 结合多样分支块及融合的高级设计(CVPR2021)

qq_44224801的博客 2068

python机器学习之数据的预处理(五种方式数据处理案例详解)

数据的预处理数据下载地址——>点这里下载到入文件时可以直接复制地址然后用r" "包裹起来。例如:data = pd.read_cav(r"C:\work\data.csv")或者也可以以直接将\换成//也可以导入。1.归一化在sklearn当中,我们使用preprocessing.MinMaxScaler来实现这个功能。MinMaxScaler有一个重要参数,

m0_59162248的博客 8621

vue3+vite:引入tailwindcss不生效的原因,详细解决Tailwind配置没问题但就是不生效的情况,配置正确无报错但样式没有生效(包括tailwindcss在Vue2使用不生效解决方案)

vue3 tailwind使用教程以及tailwind不生效的问题,vue3+vite引入tailwindcss不生效的原因,tailwindcss配之后不生效怎么办,如何解决tailwinscss不生效的原因,Vue3项目使用tailwindcss在Vue2使用,不生效解决,如何解决使用 Tailwind CSS 后出现的样式不生效的问题?tailwindcss配之后不生效 tailwindcss不生效,为什么我的 Tailwind css 类没生效,解决使用 Tailwind 时样式不生效的问题,配置没

✅ 精选推荐文章 4128

7个核心步骤掌握数据预处理:从混乱数据到完美模型的实战指南

数据预处理是机器学习项目成功的基石,直接影响模型性能与可靠性。本文将通过**GitHub 加速计划 / 100 / 100-Days-Of-ML-Code**项目的实战经验,带您系统掌握数据预处理的完整流程,让原始数据焕发模型价值。 ## 为什么数据预处理是机器学习的黄金法则? 在机器学习工作流中,数据预处理占据60%以上的时间成本。现实世界的原始数据往往存在缺失值、异常值和格式混乱等问题,直

gitblog_00208的博客 329

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

第 2 天:数据预处理与特征工程

数据预处理和特征工程是构建有效机器学习模型的重要步骤。今天,你学会了如何通过数据清洗、标准化与归一化处理数据,并掌握了特征选择、特征提取与降维的常见方法。

2401_86512878的博客 1045

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

数据集准备及数据预处理_1.准备数据集

数据集准备及数据预处理In this post I will introduce an example of how to upgrade legacy tensorflow codes to new style. tensorflow 2.0 recommends using Keras which is a well known high level API. Their sequential...

weixin_26752765的博客 1732

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

BCI Competition IV 2a数据集.gdf文件读取与预处理

BCI Competition IV 2a 数据集.gdf文件读取与预处理

qq_45713591的博客 9795

mycat2伪分布式分库分表——以ml-latest数据集为例

mycat2分库分表实验——以ml-latest数据集为例

qq_42856273的博客 1130

python数据预处理技术

数据预处理步骤 按照以下步骤在Python中预处理数据,本文中使用jupyter notebook进行演示。 第一步 导入所需的软件包,如果使用Pytho,那么这将成为数据转换为特定格式的第一步。代码如下: import numpy as np from sklearm import preprocessing 这里使用了两个软件包: NumPy:NumPy是一种通用的数组处理软件包,设计用于高效处理任意记录的大型多维数组而不牺牲小型多维数组的速度。 sklearn.preprocessing:此包提

yeserumo的博客 2320

机器学习&&深度学习——文本预处理

机器学习&&深度学习——文本预处理

m0_52380556的博客 578

ML.NET 示例:对象检测

目录 问题 数据集 预训练模型 解决方案 代码演练 ML.NET:模型评分 ML.NET:配置模型 检测图像中的对象: ML.NET 版本 API 类型 状态 应用程序类型 数据类型 场景 机器学习任务 算法 v1.4 动态API 最新 控制台应用程序 图像文件 对象检测 深度学习 Tiny Yolo2 ONNX 模型 有关如何构建此应用程序的详细说明,请参阅Microsoft Docs网站上...

寒冰屋的专栏 1488

易百教程人工智能python修正-人工智能数据准备-预处理数据

预处理数据 在我们的日常生活中,需要处理大量数据,但这些数据是原始数据。 为了提供数据作为机器学习算法的输入,需要将其转换为有意义的数据。 这就是数据预处理进入图像的地方。 换言之,可以说在将数据提供给机器学习算法之前,我们需要对数据进行预处理。 数据预处理步骤 按照以下步骤在Python中预处理数据 - 第1步- 导入有用的软件包 - 如果使用Python,那么这将成为将数据转换为特定...

weixin_34007020的博客 439

机器学习——数据预处理

在机器学习中,有一些经典的数据,例如Iris数据集、波士顿房价数据集等;然而在现实生活中很少有十分整洁的数据集,所以我们要学习如何处理数据,也就是数据的预处理。

m0_74143716的博客 148

机器学习---数据预处理

机器学习1

liehulitiezhu的博客 182

机器学习框架_七个自动机器学习框架

导读:给各位介绍七个自动机器学习框架,希望有价值。这些年,机器学习(Machine Learning)的使用率越来越高,模型给企业带来一系列机会,也给未来留下更好的畅想。但是,机器学习的建模流程时间长且复杂,人们仍然在寻求部署更多机器学习模型。企业需要预测的特定数据集合时,传统的方法需要执行以下操作:1、处理数据2、定义技术特性3、选择模型4、优化超参数5、对参数的训练没有适用于所有任务...

weixin_39760206的博客 1314
上一篇: 数据预处理流程与关键步骤解析
下一篇: 系统掌握scikit-learn:核心功能与实践指南
未来创世纪
博客等级 码龄18年 960粉丝 209原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值