当前位置: 首页 > news >正文

人工智能-python-Sklearn 数据加载与处理实战

文章目录

    • 1. 数据加载(Loading Datasets)
      • 🎯 为什么要掌握这些技能?
      • 如何做到?
      • 代码实现:
        • 1.1 从网络加载数据集
        • 1.2 从本地加载数据集
        • 1.3 加载自己的文件
    • 2. 数据集的划分(Train-Test Split)
    • 为什么要划分数据集?
      • 如何做到?
      • 代码实现:
    • 3. 特征工程(Feature Engineering)
      • 为什么要做特征工程?
      • 如何做到?
      • 3.1 字典特征处理
      • 3.2 文本特征提取
      • 3.3 中文文本特征提取
      • 3.4TF-IDF文本加权
    • 4. 无量纲化处理(Scaling)
      • 为什么要进行无量纲化?
      • 无量纲化选择指南
      • 如何做到?
      • 4.1 标准化
      • 4.2 归一化
    • 5. 总结
      • 结果导向
    • 6. 完整代码示例


1. 数据加载(Loading Datasets)

🎯 为什么要掌握这些技能?

  • 数据质量决定模型上限:90%的机器学习时间花在数据预处理上
  • 避免「垃圾进垃圾出」:脏数据会导致模型失效
  • 适配算法需求:不同算法对数据格式有特定要求
  • 提升模型泛化力:规范处理让模型更适应新数据

如何做到?

sklearn 中,加载数据集的工具非常多。可以通过 sklearn.datasets 加载公开数据集,或者通过自定义文件加载本地数据。

代码实现:

1.1 从网络加载数据集

场景 :快速获取基准测试数据
API优势:自动缓存避免重复下载

sklearn 提供了许多常用的公开数据集,可以通过 fetch_* 方法来下载。

from sklearn.datasets import fetch_20newsgroups# 加载新闻组数据集(网络)
news = fetch_20newsgroups(subset='all')
print(f"数据集大小: {len(news.data)}")
1.2 从本地加载数据集

如果你有本地的 CSV、Excel 文件等数据,可以用 pandas 读取数据,再转换成适合的格式。

import pandas as pd# 从本地 CSV 文件加载数据
df = pd.read_csv('your_data.csv')
print(df.head())
1.3 加载自己的文件

场景:处理业务专属数据
技巧:搭配pandas预处理更高效

你还可以通过 sklearn 提供的 load_svmlight_file 等方法来加载格式特定的数据。

from sklearn.datasets import load_svmlight_file# 加载svm-light格式的数据
X, y = load_svmlight_file("your_data.svm")

2. 数据集的划分(Train-Test Split)

处理方式解决痛点典型场景
简单划分基础验证需求小样本快速验证
分层划分保持类别比例一致分类不平衡数据集
时间序列划分避免未来信息泄露股价预测

为什么要划分数据集?

在机器学习中,通常将数据集分为训练集和测试集。训练集用于训练模型,测试集用于评估模型的性能。这样做是为了防止模型的过拟合,保证其泛化能力。

如何做到?

使用 train_test_split 函数将数据集划分为训练集和测试集。可以指定划分比例,例如 80% 用于训练,20% 用于测试。

代码实现:

from sklearn.model_selection import train_test_split# 划分数据集,80% 训练集,20% 测试集
X_train, X_test, y_train, y_test = train_test_split(df.drop('target', axis=1), df['target'], test_size=0.2, random_state=42)
print(f"训练集大小: {len(X_train)}, 测试集大小: {len(X_test)}")

3. 特征工程(Feature Engineering)

为什么要做特征工程?

特征工程是机器学习中至关重要的一步。通过适当的特征提取和转换,可以极大提升模型的性能。常见的特征包括数字型特征、类别型特征、文本特征等。(将非数值特征转为算法可识别的矩阵

如何做到?

  • 字典特征:通过将类别数据转换为数字编码。
  • 文本特征:使用 TfidfVectorizer 将文本转换为向量。
  • 中文文本特征:需要做中文分词,然后进行 TF-IDF 转换。

3.1 字典特征处理

对于类别型变量,可以使用 LabelEncoderOneHotEncoder 进行编码。

from sklearn.preprocessing import LabelEncoder# 假设 'category' 是一个分类变量
label_encoder = LabelEncoder()
df['category_encoded'] = label_encoder.fit_transform(df['category'])

3.2 文本特征提取

使用 TfidfVectorizer 将文本数据转换为数值特征。

from sklearn.feature_extraction.text import TfidfVectorizer# 假设新闻数据存在 'data' 列中
vectorizer = TfidfVectorizer(stop_words='english')
X_tfidf = vectorizer.fit_transform(news.data)
print(f"TF-IDF 特征矩阵大小: {X_tfidf.shape}")

3.3 中文文本特征提取

中文文本处理需要使用分词工具,常见的有 jieba。然后,使用 TfidfVectorizer 来进行转换。

import jieba
from sklearn.feature_extraction.text import TfidfVectorizer# 中文文本分词函数
def chinese_tokenizer(text):return list(jieba.cut(text))# 假设中文数据存储在 'data' 列
vectorizer = TfidfVectorizer(tokenizer=chinese_tokenizer, stop_words=None)
X_chinese_tfidf = vectorizer.fit_transform(df['data'])
print(f"中文TF-IDF特征矩阵大小: {X_chinese_tfidf.shape}")

3.4TF-IDF文本加权

为什么用:降低高频但无意义词的权重

from sklearn.feature_extraction.text import TfidfVectorizer
corpus = ['This is first document', 'This document is second']
tfidf = TfidfVectorizer(norm='l2')  # 使用L2归一化
X = tfidf.fit_transform(corpus)
print(tfidf.idf_)  # 查看各词的逆文档频率

4. 无量纲化处理(Scaling)

为什么要进行无量纲化?

无量纲化(标准化、归一化)可以使得不同尺度的特征有相同的权重,避免某些大尺度特征在模型训练时占据主导地位,影响模型的学习效果。标准化是指将数据转换为均值为 0、标准差为 1 的形式。

无量纲化选择指南

方法受异常值影响输出范围适用算法
StandardScaler(-∞, +∞)SVM, 线性回归
MinMaxScaler[min, max]神经网络, KNN
RobustScaler近似(-∞, +∞)含异常值的数据

如何做到?

可以使用 StandardScalerMinMaxScaler 进行标准化或归一化处理。

4.1 标准化

适用场景:数据服从正态分布时
标准化使得特征均值为 0,标准差为 1。

from sklearn.preprocessing import StandardScalerscaler = StandardScaler()
X_scaled = scaler.fit_transform(X_train)
print(f"标准化后的数据: {X_scaled[:5]}")

4.2 归一化

归一化是将数据按比例缩放到 [0, 1] 区间。

from sklearn.preprocessing import MinMaxScalerscaler = MinMaxScaler()
X_normalized = scaler.fit_transform(X_train)
print(f"归一化后的数据: {X_normalized[:5]}")

5. 总结

结果导向

通过 sklearn 提供的工具,我们可以轻松完成数据加载、划分、特征提取和无量纲化处理。这些操作在机器学习过程中至关重要,帮助我们将原始数据转换为模型可以处理的形式,提升模型的性能。

通过本文的介绍,你应该能够:

  • 从不同来源加载数据集;
  • 使用 train_test_split 划分训练集和测试集;
  • 对文本数据进行 TF-IDF 特征提取;
  • 对特征进行标准化和归一化处理,为模型训练做好准备。

6. 完整代码示例

最后,可以提供一段完整的代码,整合所有步骤,作为总结:

from sklearn.datasets import fetch_20newsgroups
from sklearn.decomposition import PCA
from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler# 加载数据
news = fetch_20newsgroups(subset='all')
vectorizer = TfidfVectorizer(stop_words='english')
X_tfidf = vectorizer.fit_transform(news.data)# 数据划分
X_train, X_test, y_train, y_test = train_test_split(X_tfidf, news.target, test_size=0.2, random_state=42)# 标准化
scaler = StandardScaler()
X_scaled = scaler.fit_transform(X_train)# PCA降维
pca = PCA(n_components=0.95)
X_pca = pca.fit_transform(X_scaled)print(f"降维后的数据形状: {X_pca.shape}")

这样,你就完成了数据加载、划分、特征提取和无量纲化处理的全过程,并且解释了每个步骤为什么要做、如何做以及结果如何。

http://www.lryc.cn/news/611140.html

相关文章:

  • ChatGPT以及ChatGPT强化学习步骤
  • MLIR Bufferization
  • Linux驱动学习(八)设备树
  • 《手撕设计模式》系列导学目录
  • 防火墙安全策略练习
  • Dot1x认证原理详解
  • LeetCode 面试经典 150_数组/字符串_H 指数(9_274_C++_中等)(排序后再进行判断)(计数)
  • 三坐标测量技术解析:从基础原理到斜孔测量难点突破
  • 智慧城市SaaS平台|市容环卫管理系统
  • 微服务—OpenFeign
  • 基于PD控制器的四旋翼无人机群飞行控制系统simulink建模与仿真
  • Crawl4AI:开源的AI友好型网页爬虫与数据抓取工具
  • MyBatis实现SQL
  • DM8日常运维命令总结(四)
  • jenkins插件Active Choices的使用通过参数动态控制多选参数的选项
  • 聚焦智能穿戴“下一代消费终端”之争,Meta/微美全息借AI+AR积淀定义行业未来
  • Swift 实战:用队列巧解 LeetCode 346 数据流中的移动平均数
  • 【RabbitMQ】高级特性—持久性、重试机制详解
  • 栈的输入与输出方式
  • 《算法导论》第 4 章 - 分治策略
  • Python Day23程序、进程、线程及多线程实现全解析 例题分析
  • 星图云开发者平台赋能商储油安全管控数字化转型
  • 为什么要选择时序数据库IoTDB?
  • Python爬虫08_Requests聚焦批量爬取图片
  • Pandas 入门:数据分析的得力工具
  • 嵌入式硬件中运放内部底层分析
  • 基于深度学习的医学图像分析:使用CycleGAN实现医学图像风格转换
  • 后量子时代已至?中国量子加密技术突破与网络安全新基建
  • 关于npx react-native run-android下载进程缓慢以及进程卡壳等问题的解决方案。
  • Java 大视界 -- Java 大数据在智能医疗电子病历数据分析与临床决策支持中的应用(382)