机器学习实践:了解数据核心的通用方法!

人工智能(AI)与机器学习(ML):塑造未来的技术引擎 人工智能是一种模拟、延伸和扩展人类智能的理论、方法、技术及应用系统。它旨在让计算机能够像人类一样思考、学习,并能在各种环境下自主地做出决策。AI的发展经历了从最初的符号主义、连接主义到如今的深度学习等多个阶段,每一次的突破都极大地推动了科技的进步。尽管AI与ML技术取得了巨大的进步,但它们仍然面临着诸多挑战。首先,数据的获取和标注是一个巨大的问题。高质量的标注数据是机器学习模型训练的关键,但数据的获取和标注往往需要耗费大量的人力和时间。其次,模型的泛化能力也是一个需要解决的问题。 阅读详情

 Datawhale干货 

作者:耿远昊,华东师范大学,Datawhale成员

我们常说数据和特征决定了机器学习的上限,而模型和算法只是逼近这个上限。

机器学习中的数据繁多复杂,我们很容易迷失在无尽的具体数据中,迅速抓住数据集的核心与重点。因此,需要一套高效且能够广泛应用于绝大多数数据的认知方法,快速建立对未知数据模式的有效观察。

这里讲述最常用的结构化数据,按照数据的类型、分布和统计量三个角度来阐述数据观测的策略。

数据类型

现实生活中的数据类型多种多样,我们能够通过某些先验的划分将数据集的特征分类,这是后续数据处理的基础。主要分为以下两类:

原生类型

原生表示数据本身的类型,与数据含义无关。

与数据含义无关就是指我们在此并不关心数据的业务场景。例如:一个数据集中可能出现了两个字符串特征分别代表城市名与人员的身份编码,我们只需统一将其视作字符串特征。

常见的类型包括缺失类型、文本类型、分类类型以及时序类型,数据的原生类型决定了对数据的初步处理方式。

对于缺失数据,我们可以计算缺失值的比例和数量。

对于文本类型,可以利用预训练的语言模型将其映射到给定维数的特征向量,或者根据给定文本的特点来提取一些特征模式(如重复性、唯一性、某些模式的存在性等)。

对于分类类型,我们可以观察类别的均衡度、种数、比例、高频项与低频项分布特点等。

对于时序类型,我们需要观察时间戳的连续性、范围、采样频率、采样特点(如均匀性、是否按固定时间模式采样等)。

总体来说,我们在拿到数据集后应当首先判断数据的原生类型,并基于类别进行基本的特征观察。

业务类型

业务类型由数据特征代表的含义与特征所属的业务类别决定。

业务类型可分为同质特征、同类特征以及异类特征。

同质特征是指原生类型相同且数据含义相似的特征,例如某个商品的近1周销售额、近1月销售额、近3月销售额这3个特征,它们就属于同质特征,对这些特征往往可以进行有意义的简单交叉组合。

同类特征是指数据含义直接相关的特征,例如现有用户购买商品的数据集,那么用户的身高、年龄性别之间就属于同类特征,它们都是用户的属性,而商品的ID、历史销量和价格也属于同类特征,它们都是商品的属性。

相对的,异类特征为数据含义并不直接相关的特征,例如商品ID和用户性别。

业务类型的判断有利于使我们快速建立对特征含义的宏观认识,这是我们后续构造有效特征的基础。

数据统计量

这里用一个数据举例:假设现在存有一个特征列var,其数据分布图如下。

plt.hist(var)

范围型统计量

范围型的统计量包括极差、分位数、排名。因此,也可以基于极值出现的位置构造其他相应统计量。

其中,极差和分位数分别反应了绝对范围和大致范围:

# 取极值和分位数
var.max()-var.min(), np.quantile(var, 0.95)-np.quantile(var, 0.05)

对于时序数据而言,一段时间内的波动情况的极值,可以认为是该段时间内数据的极差:

# 查看极值的波动情况
ts = pd.Series(
  var,
  index=pd.date_range(
    "20200101",
    periods=500,
    freq="6h"
  )
)
ts.plot()

同时,我们还应当关注取到极值的时刻:

# 查看何时会出现极值
ts.index[ts.argmax()], ts.index[ts.argmin()]

需要注意的是,极值出现的时刻可能不唯一:

# 出现多个极值的时刻
ts.index[ts==ts[ts.argmax()]], ts.index[ts==ts[ts.argmin()]]

频率型统计量

频率型统计量包括高频项频数、唯一值、符合某些条件的样本频数。其中,符合某些条件可以指某一个特征是否超过给定阈值或其他布尔条件等。

高频项指多次重复出现的数据,它的出现次数(项数)可通过value_counts获得;唯一值可以通过unique获得:

#高频项项数
var = pd.Series(var)
var.value_counts()
#只出现一次的数据
var.unique()

假设想把0.2与0.8分位数之外的值设为缺失值,可如下写:

var_temp = var.copy()
var_temp[(var<var.quantile(0.2))|(var>var.quantile(0.8))] = np.nan
var_temp.unique()

矩统计量

矩特征包括了常见的均值、方差、偏度、峰度。其中,偏度和峰度分别反应了数据分布单尾和双尾的薄厚程度,它们的计算方法分别为:

当偏度系数为0时,样本分布具有较好的对称性;若偏度系数大于零,此时称分布为正偏或右偏,此时样本的右尾较厚,均值(即密度重心)相较于众数(密度最值)更大,var变量所示的分布即为右偏分布:

var.skew()

如果偏度系数小于零,意味着左尾较厚,此时均值(即密度重心)相较于众数(密度最值)更小,称为左偏分布或负偏分布:

(-var).hist()
(-var).skew()

对于峰度系数而言,可以证明其值不会小于1。

对于在无穷区间(即随机变量且和中至少有一个为无穷值)上取值的密度,峰度系数越大,意味着分布的尾部越厚,这是由密度积分为1的限制所决定的。

数据分布

单变量分布

在现实生活中,我们经常会接触到分布不均衡的变量,例如每个家庭的年收入、艺术品市场的拍卖价格等等。

在读取变量后,做出直方图经常会遇到如下的情况:

极值分布非常拉胯

此时,一个有用的技巧是利用clip函数按照分位数进行截断:

a = a.clip(a.min(), a.quantile(0.95))
a.hist()

多变量分布

在机器学习中,我们特别关心测试集和训练集关于标签变量的这两种分布,当两者分布强烈不一致时,此时模型会学习到错误的模式,从而发生误判。

假设当前处理的是二分类问题,我们分别需要观察其与离散分布或连续分布的条件分布。

:tags: [remove_input]
df_train = pd.DataFrame(
  {
    "X1": np.random.choice(
      ["a", "b", "c", "d"],
      size=1000
    ),
    "X2": np.random.randint(0, 7, 1000),
    "Y": np.random.choice([0, 1], size=1000, p=[0.1, 0.9])
  }
)
df_test = pd.DataFrame(
  {
    "X1": np.random.choice(
      ["a", "b", "c", "d"],
      size=1000,
      p=[0.1,0.5,0.1,0.3]
    ),
    "X2": np.random.randint(3, 10, 1000),
    "Y": np.random.choice([0, 1], 1000, p=[0.2, 0.8])
  }
)
df_train.head()
df_test.head()

(a)与离散分布的条件分布

以给定的条件分布为例:

vc_train = df_train.query("Y==1").X1.value_counts()
vc_test = df_test.query("Y==1").X1.value_counts()
plt.bar(
  vc_train.index,
  vc_train.values,
  alpha=0.5,
  label='Train Dataset'
)
plt.bar(
  vc_test.index,
  vc_test.values,
  alpha=0.5,
  label='Test Dataset'
)
plt.legend()

(b)与连续分布的条件分布

以给定的条件分布为例:

df_train.query("Y==1").X2.plot.kde(label='Train Dataset')
df_test.query("Y==1").X2.plot.kde(label='Test Dataset')
plt.legend()

相同地,我们可以观察以某个特征为给定条件下的其他特征或目标变量的分布,方法类似。

异常识别

异常模式的识别与处理是一个非常复杂的活儿,幸好统计学中早有相关研究。统计学中的假设检验,本质上就是一种异常处理,而值则对应了对于异常的容忍度。

方法是一类最为基本的异常处理检测机制,在一个数据分布中,处于均值加减三倍标准差之外的点,可以认为其是异常数据点。

var[
  (
    var>(var.mean()+var.std()*3)
  )|(
    var<(var.mean()-var.std()*3)
    )
]

上面被选出的这些点,从分布图上而言,确实脱离了大多数的数据,但同时我们需要注意,异常也是一种数据模式,不能够无根据地对这些数据进行修改操作。

对于时序中的异常数据,我们可以使用滑窗版本的方法进行识别。下图中,我们可以看见对于几个较为明显的序列下转或上转区,都基本与使用滑窗方法的检验上下界发生了触碰:

np.random.seed(6)
s = np.random.randint(-2,3, 500).cumsum()
s = pd.Series(s)
s.plot()
n = 50
(s.rolling(n).mean()+3*s.rolling(n).std()).plot()
(s.rolling(n).mean()-3*s.rolling(n).std()).plot()
图中就是滑窗版本

对于常见的异常检测问题,可以选择第三方库,如scikit-learn中的Novelty and Outlier Detection模块,基于规则与无监督方法的ADTK时序异常检测包等等。

练习一下

公众号后台回复关键词【数据练习】,获取练习数据集

1. 美国环境污染数据分析

现有一份有关2000年至2016年的美国环境污染数据集,请利用本文中介绍的数据观测思路对其进行初步分析。

df = pd.read_csv("data/ex-ch11-3-pollution.csv")
df.head()

2. pandas-profiling的使用

pandas-profiling是一个基于DataFrame的数据信息整合库,它能够高效地对数据集的核心重要指标进行计算汇总。设待观测的数据框为df,通过如下命令可以保存数据分析汇总的结果到html格式:

from pandas_profiling import ProfileReport
profile = ProfileReport(
    df,
    title="My DataFrame Report",
    # 当数据集较大计算时间较长时,可以开启精简模式,只计算最重要的指标
    # minimal=True,
)
profile.to_file("my_report.html")

现有一份有关印度洋版块地震记录的数据集,请利用pandas-profiling生成html报告,并观察报告中所包含的信息。

df = pd.read_csv("data/ex-ch11-4-earthquake.csv")
df.head()

--end--

强烈推荐李沐等人的《动手学深度学习》最新版!

完整中文版 PDF 终于 在10月 5 日更新 可下载:


内容简介

此书的结构:


以下是主要目录:




????添加AI派团队程序媛小姐姐微信获取资料哦????
添加微信记得备注【深度学习】哦!
不然小姐姐又要向我抱怨了????


添加微信记得备注【深度学习】哦!

觉得有趣就点亮在看吧

用 ML.NET 开发智能应用:让 .NET 程序员轻松掌握机器学习 ML.NET是一个由微软开发的开源跨平台机器学习框架,专为 .NET 开发者设计,允许他们在不离开 C# 或 F# 编程语言的情况下,进行机器学习建模和应用。通过 ML.NET,开发者无需学习 Python 或深度学习框架的复杂操作,就能在其现有的 .NET 应用中集成强大的机器学习功能。ML.NET 支持各种机器学习任务,包括分类、回归、聚类、推荐、异常检测、自然语言处理等。无论是开发企业级应用、Web 应用,还是桌面应用,ML.NET 都能为你的项目带来智能化提升。 阅读详情

相关推荐

ML:MLOps系列讲解之《CRISP-ML (Q)ML生命周期过程—了解机器学习开发的标准过程模型—业务和数据理解→数据工程(数据准备)→ML模型工程→评估ML模型→模型部署→模型监控和维护》解读

​ ML:MLOps系列讲解之《CRISP-ML (Q)ML生命周期过程—了解机器学习开发的标准过程模型—业务和数据理解→数据工程(数据准备)→ML模型工程→评估ML模型→模型部署→模型监控和维护》解读 目录 MLOps系列讲解之《CRISP-ML (Q)ML生命周期过程—了解机器学习开发的标准过程模型》解读 6、CRISP-ML (Q)ML生命周期过程—了解机器学习开发的标准过程模型。 6.1、Business and Data Understanding业务和数据理解 6.2、Data Eng

头部AI社区如有邀博主AI主题演讲请私信—心比天高,仗剑走天涯,保持热爱,奔赴向梦想!低调,专注,谦虚,自律,反思,成长,还算比较正能量的博主,公益免费传播…内心特别想在AI界做出一些可以推进历史进程影响力的技术(兴趣使然,有点小情怀,也有点使命感呀 3026

pandas_profiling

pandas_profiling 包

csdnypp的博客 3059

C#与机器学习:ML.NET库应用的魔法实验室

机器学习是一种人工智能技术,它允许计算机通过学习数据来提高性能,而不需要明确编程。简单来说,机器学习就像是训练你的魔法宠物,让它能够识别模式和做出预测。ML.NET是一个开源的机器学习框架,专为.NET开发者设计。它允许开发者轻松地将机器学习集成到他们的应用程序中,支持多种机器学习任务,如分类、回归、聚类等。定义你的数据模型,包括输入和输出。0set;1set;2set;

java专栏 1659

模型预测笔记(四):pandas_profiling生成数据报告

pandas_profiling是一个基于Python的开源库,用于生成数据分析报告。它可以自动分析数据集的各种统计指标,并生成一个详细的HTML报告,包括数据的基本信息、缺失值分析、唯一值分析、数值变量的描述统计、相关性分析、变量之间的交互等。自动化报告生成:pandas_profiling可以自动分析数据集的各种统计指标,并生成一个详细的HTML报告,无需手动编写代码。

源的博客 920

ML.NET与C#在Jupyter笔记本中的应用:机器学习实践教程

ML.NET 是一个跨平台的开源机器学习框架,由微软开发,旨在将机器学习的能力带给.NET开发者。开发者可以使用C#或F#等.NET支持的语言,轻松地将机器学习模型集成到应用程序中,无论是Web、移动还是桌面应用。ML.NET允许开发者从数据准备、模型训练、评估、优化到最终的模型部署,整个机器学习工作流全部在.NET环境中完成。随着人工智能和机器学习技术的快速发展,ML.NET框架的设计初衷是为了解决.NET开发者在构建智能应用程序时面临的挑战。

weixin_33750664的博客 1221

程序进入hardfault之后查找原因的方法

如果在MCU运行程序的时候,进入了hardfault,该怎么办?

smart_boy__的博客 762

pandas-profiling(数据预览分析)

对于探索性数据分析来说,做数据分析前需要先看一下数据的总体概况,pandas_profiling工具可以快速预览数据。 1、pandas-profiling安装与调用 pip install pandas-profiling import pandas as pd import pandas_profiling 2、导入数据 data=pd.read_csv("model.csv")...

Andy_shenzl的博客 2万+

Linux平台CCS安装配置完整示例

手把手讲解在Linux系统中完成CCS安装与环境配置的全过程,涵盖关键步骤与常见问题解决,是查找ccs安装教程时不可多得的实战指南。

weixin_42601134的博客 516

python自动数据分析——pandas_profiling

pandas_profiling 我们常用pandas中的df.describe()函数去描述数据的情况,但是不能够直观的去展示出数据的分布情况,今天要介绍的这个工具pandas_profiling就是扩展了pandas中的DataFrame并且能自动进行数据分析并生成分析报告的库。 在分析过程中会得到下面的结果: 要点:类型,唯一值,缺失值 分位数统计信息,例如最小值,Q1,中位数,Q3...

二哥为啥不像程序员? 3656

记录一次小项目中的重放攻击与解决方案

文章目录1、重放攻击简介2、重放攻击演示3、解决方案4、重放攻击验证 欢迎各位 前(提)来(出)讨(意)论(见)。 1、重放攻击简介 重放攻击(Replay Attacks)又称重播攻击、回放攻击,是指攻击者发送一个目的主机已接收过的包,来达到欺骗系统的目的,主要用于身份认证过程,破坏认证的正确性。 举个简单的小例子。 我们往系统里面插入一条数据,如果此次操作的数据包被攻击者获取,又恰巧后台没有对重复内容进行验证,那么攻击者就可以利用该数据包重复的发起请求,无限制的往数据库插入数据,即使请求包是加密的也

fiveSix 8727

【Bluetooth蓝牙开发】九、BLE协议之GATT

1、开篇词 2、蓝牙开发入门 3、蓝牙协议栈总览 4、蓝牙协议栈——物理层 5、蓝牙协议栈——链路层 6、蓝牙协议栈——传输层 7、蓝牙协议栈——L2CAP协议 8、蓝牙协议栈——ATT协议 9、蓝牙协议栈——GATT协议 10、蓝牙通信流程分析 11、蓝牙协议栈——Bluez交叉编译 12、蓝牙调试工具汇总

Donge's Blog 4766

python科学计算之Pandas Profiling库详解

Pandas Profiling库详解

GodFatherMisZhao的博客 1132

科研绘图系列:基因突变瀑布图统计以及可视化

科研绘图系列:基因突变瀑布图统计以及可视化

专注生信领域 1658

【赠书第19期】跨平台机器学习:ML.NET架构及应用编程

在微软最有价值专家(16届)的指导下,运用跨平台机器学习框架ML.NET来创建机器学习解决方案,将人工智能技术应用于实际任务场景中。

无人机开发(开源Ardupilot) 2万+

GameFramework框架详解之 框架总览

一.前言 目前市场上有很多优秀个开源框架,比如ET,GameFramework,DBFramework,StrangeIOC,Loxodon-Framework,KSFramework,xluaFramework等等。其中要说规范的话,不得不说GameFramework还是不错的,当然很多新手看到后会觉的有点复杂,写一个小小的功能,不得不套用一堆东西,继承一堆接口,感觉不知所措,不能随心所欲的去撸代码。其实这个框架就是为了约束新手的行为的,让我们面向接口编程,遵循“开闭”的设计原则来写代码,方便后期的扩

TxNet 2万+

【从零开始学习 SystemVerilog】1.1、SystemVerilog 概述

【从零开始学习 SystemVerilog】1.1、SystemVerilog 概述

努力,加油每一天鸭~ 1038

Unity 机器学习(ML-Agents) 基础

Unity 机器学习 ML-Agents 基础Unity 官方示例下载ML-Agents 部分Python 下载AnacondaAnaconda 虚拟环境构建 ML-Agents安装 ML-Agents Python 包安装 ML-Agents 包ML-Agents 入门指南Unity Hub 部分虚拟环境 训练虚拟环境 训练运行:虚拟环境 开始训练:虚拟环境 观察训练进度:虚拟环境 停止训练虚拟环境 恢复训练虚拟环境 训练模型ML-Agents 打造新的学习环境ML-Agents 资产导入 Unity 官

Maddie_Mo的博客 1万+

Trae 保姆级使用指南,零基础小白也能实现编程。

Trae 使用指南 Trae AI 使用 零基础编程 满血版 DeepSeek-R1&V3 AI IDE 深度理解中文开发场景 傻瓜式编程 编程入门 开发入门

Mr.L-OAM的博客 5822

OpenCV机器学习(10)训练数据的一个核心类cv::ml::TrainData

cv::ml::TrainData 类是 OpenCV 机器学习模块中用于表示训练数据的一个核心类。它封装了样本数据、响应(标签)、样本权重等信息,并提供了多种方法来创建和操作这些数据,以适应不同的机器学习算法需求。

jndingxin的专栏 1135

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

ML Hacks: 机器学习实用技巧与最佳实践

ML Hacks项目为机器学习从业者提供了一个宝贵的学习和实践平台。通过系统地学习和应用项目中的技巧,开发者可以显著提升自己的机器学习能力,更好地应对实际工作中的挑战。随着人工智能技术的不断发展,保持学习和实践的习惯变得尤为重要。ML Hacks项目无疑是这一学习过程中的重要资源。无论你是机器学习的新手还是有经验的从业者,ML Hacks项目都能为你提供有价值的见解和工具。探索这个项目,将其中的技巧应用到自己的工作中,相信你会在机器学习的道路上走得更远、更快。

m0_75126181的博客 968

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

机器学习项目日志实践:从通用logging到ML专用工具的最佳策略

在软件工程中,日志记录是保障系统可观测性和可维护性的基础技术,它通过结构化记录程序运行状态、事件与数据,帮助开发者进行调试、监控与问题回溯。其核心原理在于将运行时信息持久化,形成可追溯的时间序列数据流。在机器学习领域,这一技术的价值被显著放大,因为ML项目生命周期涉及数据、实验、模型与服务等多个复杂阶段,对可复现性、实验对比与资产管理的需求尤为突出。通用日志库(如Python logging)虽能记录基础信息,但难以结构化存储超参数、指标曲线与模型工件,导致实验管理混乱。ML专用日志库(如MLflow、W&

weixin_30715523的博客 640

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

ML.NET 快速入门与实践教程:机器学习框架

ML.NET是微软为.NET开发者打造的跨平台机器学习框架,让开发者无需Python基础就能在C#环境中构建智能应用。本文通过学生成绩预测案例,详细讲解ML.NET的核心概念与使用流程:从数据加载、模型训练到评估预测,并演示了房价预测的类似实现。关键步骤包括定义数据类、构建处理管道、选择训练算法以及创建预测引擎。文章还介绍了MLContext、IDataView等核心组件,帮助.NET开发者快速上手机器学习开发。

专注于C#/.NET/.NET Core学习、工作、面试干货和实战教程分享。这里聚焦了大量的C#/.NET/.NET Core优质文章、开源项目、实用工具和学习、工作、面试心得。 738

Swift 与机器学习:使用 Core ML 进行模型集成

Core ML 是苹果公司推出的机器学习框架,自 2017 年 6 月发布以来,一直致力于优化在移动设备上运行机器学习模型的性能。它为开发者提供了一套易于使用的 API,支持多种类型的机器学习模型,如神经网络、树集成、支持向量机和广义线性模型等。无论是处理图像、文本、音频还是其他数据类型,Core ML 都能提供高效的解决方案。通过本文的介绍,我们详细了解了如何使用 Swift 与 Core ML 框架进行机器学习模型的集成。

数字魔方操控师的博客 2114
上一篇: 相当全面的 Numpy 使用总结.pptx
下一篇: 主流App开屏广告一夜消失!国家出手整治,网友齐赞丝滑,满屏找“跳过”的时代快结束了...
Wang_AI
博客等级 码龄12年 996粉丝 162原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值