首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >使用时间特征使让机器学习模型更好地工作

使用时间特征使让机器学习模型更好地工作

作者头像
数据派THU
发布于 2022-03-04 02:11:51
发布于 2022-03-04 02:11:51
1.9K00
代码可运行
举报
文章被收录于专栏:数据派THU数据派THU
运行总次数:0
代码可运行
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
来源: DeepHub IMBA本文约2300字,建议阅读8分钟在本文中,通过一个实际示例讨论如何从 DateTime 变量中提取新特征以提高机器学习模型的准确性。

特征工程是构建机器学习模型最重要的方面之一。在本文中,我将通过一个实际示例讨论如何从 DateTime 变量中提取新特征以提高机器学习模型的准确性。

从日期中提取特征

一些数据集提供了日期或日期时间字段,通常在为机器学习模型构建输入特征时会被删除(除非您正在处理时间序列,显然 😃)。

但是,DateTime 是可用于提取新特征的,这些新特征可以添加到数据集的其他可用特征中。

日期由日、月和年组成。从这三个部分中,至少可以提取四个不同的特征:

  • 一年中的一天或一个月中的一天或一周中的一天
  • 一年中的月份
  • 季节

除了年以外,所有的特征都可以两部分:正弦和余弦,这样可以获得时间的周期性,例如 1 月 1 日接近 12 月 31 日。

一年中的一天或一个月中的一天或一周中的一天

一年中的某一天是指 1 到 365(或 366)之间的数字。当你有一个粒度精细的数据集并且在天数内具有平衡分布时可以使用这个特征,否则使用此特征可能会产生过拟合。

Python 中,一年中的某一天可以计算如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import numpy as np
current_date = "2022-01-25 17:21:22"
cdate = datetime.strptime(current_date, '%Y-%m-%d %H:%M:%S')

day_sin = np.sin(2 * np.pi * cdate.timetuple().tm_yday/365.0)
day_cos = np.cos(2 * np.pi * cdate.timetuple().tm_yday/365.0)

对于数据集中更稀疏的日期值,建议将日期用作月份或星期几。

一年中的月份

一年中的月份指的是 1 到 12 之间的数字。如果 DF中有 DateTime 列,则可以按如下方式提取一年中的月份:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
df['month_sin'] = np.sin(2 * np.pi * df['date_time'].dt.month/12.0)
df['month_cos'] = np.cos(2 * np.pi * df['date_time'].dt.month/12.0)

季节

季节是一个分类变量,包括以下值:春季、夏季、秋季和冬季。

在 Python 中,可以按照 Stackoverflow 上这个有趣的回复中的说明提取季节。(https://stackoverflow.com/questions/16139306/determine-season-given-timestamp-in-python-using-datetime)

或者可以将季节视为数字特征。

当必须预测未来的值时,年份作为输入特征并不是很有用。但是为了完整起见本篇文章还是将描述如何将其作为输入特征加以利用。

如果数据集包含多年,则可以使用年份。它可以是分类变量或数值变量,具体取决于需求。

如果 Pandas 有 DateTime 列,则可以按如下方式提取年份:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
df['year'] = df['date_time'].dt.year

从时间中提取特征

根据数据集的粒度,可以从 DateTime 列中提取不同级别的时间特征(小时、分钟、秒……)。但是,最频繁的时间特征是以小时为单位。时间特征应分割为正弦和余弦以反映数据循环性(例如 23:59 接近 0:01)。

在 Python 中,给定一个 DateTime 变量,可以按如下方式提取一个小时:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
hour_sin = np.sin(2 * np.pi * cdate.hour/24.0)
hour_cos = np.cos(2 * np.pi * cdate.hour/24.0)

一个实际的例子

该示例利用了 Kaggle 上的天气数据集,该数据集在 CC0:公共领域许可证下。

此示例的目的是构建一个多类分类器,该分类器根据输入特征预测天气状况(由数据集的摘要列给出)。我计算了两种情况的准确性:有和没有 DateTime特征。

加载数据集

该数据集可在 Kaggle 上获得。并且通过 Pandas加载:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import pandas as pd
df = pd.read_csv('../input/weather-dataset/weatherHistory.csv')

该数据集包含 96,453 条记录和 12 列。

探索性数据分析

现在,我删除了对预测没有太大影响的变量。所有行的 Loud Cover 都是相同的,所以也可以删除它。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
df['Loud Cover'].value_counts()
0.0   96453
Name: Loud Cover, dtype: int64

我还可以删除 Daily Summary 列,因为它只包含文本。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
df.drop(['Daily Summary','Loud Cover'],axis=1,inplace=True)

最后,处理缺失值:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
df.isnull().sum()

给出以下输出:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Formatted Date               0
Summary                       0
Precip Type                 517
Temperature (C)               0
Apparent Temperature (C)     0
Humidity                     0
Wind Speed (km/h)             0
Wind Bearing (degrees)       0
Visibility (km)               0
Pressure (millibars)         0

Precip Type 列包含一些缺失值,也删除它。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
df.dropna(inplace=True)

数据清洗

首先,我将分类数据转换为数值数据:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
from sklearn.preprocessing import LabelEncoder

le = LabelEncoder()
df['Precip Type']=le.fit_transform(df['Precip Type'])
df['Summary']=le.fit_transform(df['Summary'])

然后,特征标准化:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
from sklearn.preprocessing import StandardScaler
scaler = StandardScaler()
df[df.columns[2:]] = scaler.fit_transform(df[df.columns[2:]])

从第三列开始,因为我没有标准化前两列(日期时间和摘要)。

特征工程

现在,准备提取一年中的日期和时间。我定义了一个函数,在给定日期的情况下,提取正弦和天数和小时数的余弦:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import numpy as np
from datetime import datetime

def discretize_date(current_date, t):
  current_date = current_date[:-10]
  cdate = datetime.strptime(current_date, '%Y-%m-%d %H:%M:%S')
   
  if t == 'hour_sin':
      return np.sin(2 * np.pi * cdate.hour/24.0)
  if t == 'hour_cos':
      return np.cos(2 * np.pi * cdate.hour/24.0)
  if t == 'day_sin':
      return np.sin(2 * np.pi * cdate.timetuple().tm_yday/365.0)
  if t == 'day_cos':
      return np.cos(2 * np.pi * cdate.timetuple().tm_yday/365.0)

现在提取新特征:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
date_types = ['hour_sin', 'hour_cos', 'day_sin', 'day_cos']
for dt in date_types:
  df[dt] = df['Formatted Date'].apply(lambda x : discretize_date(x, dt))
df.drop(['Formatted Date'],axis=1,inplace=True)

计算特征之间的相关性,以检查是否存在一些高度相关的特征。在这种情况下,可以删除两个相关的特征之一。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
df.corr()

Apparent Temperature 和Temperature 高度相关,因此我可以删除Apparent Temperature:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
df.drop(['Apparent Temperature (C)'],axis=1,inplace=True)

训练测试拆分

我在 X 和 y 中拆分数据,然后在训练和测试集中:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
from sklearn.model_selection import train_test_split
X = df.iloc[:,1:]
y=df.iloc[:,0] 

X_train,X_test,y_train,y_test = train_test_split(X,y,test_size=0.3,random_state=1)

模型训练和评估

我测试了两种模型,一种具有 DateTime 特征,另一种没有。首先,使用 DateTimeFeatures 训练模型:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
from sklearn.ensemble import RandomForestClassifier

model = RandomForestClassifier(max_depth=32,n_estimators=120,random_state=1)
model.fit(X_train,y_train)
y_pred = model.predict(X_test)

计算精度:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
from sklearn.metrics import accuracy_score
accuracy_score(y_test, y_pred)
0.6695389319342622

现在,在没有 DateTime特征的情况下训练模型:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
model = RandomForestClassifier(max_depth=32,n_estimators=120,random_state=1)
model.fit(X_train[X_train.columns[:-4]],y_train)
y_pred = model.predict(X_test[X_test.columns[:-4]])
accuracy_score(y_test, y_pred)
0.5827108161634411

具有 DateTime 特征的模型如何优于其他模型。

总结

以上就是如何从机器学习模型中提取 DateTime 特征!本文中描述的实际示例表明,日期时间特征的存在可以提高机器学习模型的性能。

下面带来一个具有挑战性的问题:

DateTime 功能是否会引入过拟合?

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-02-14,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 数据派THU 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
用AI指挥另一个AI,GAN+CLIP的组合成了“CG艺术家”
不需要改变数据集,只需要给CLIP下达的命令中把“虚幻引擎”几个字加上,再让CLIP去指挥GAN,图像就立马变成了高大上的CG艺术风。
量子位
2021/07/19
7890
原画师惊呆:这个爆火AI真把梦境画成现实了!下载APP人人可用
明敏 梦晨 发自 凹非寺 量子位 | 公众号 QbitAI 没想到,平常都是我拿着最新AI的Demo到处去安利。 这回竟然被美术圈的朋友安利了一个AI绘画APP??? 话不多说先看效果: 这摩登又玄幻的画面,一上来就冲击到我了。 抽象的线条兼具了美感和想象力,同时还传递出未来城市的感觉。 要不是被剧透,我还真不一定能立刻猜出来这是出自AI之手。 而且除了能对照片进行二改,这个AI还能根据文字命题、凭自己想象作画。 比如输入落日飞车四个字,在AI的“想象”中会是这样: 另外还可以画出不同画风,目前已支持2
量子位
2022/04/28
1.2K0
原画师惊呆:这个爆火AI真把梦境画成现实了!下载APP人人可用
特别详细!带你一文了解扩散模型(不含任何公式)
扩散模型(Diffusion Models)能够生成超棒的图片、视频和音乐。它们的名字来源于自然界的扩散现象,就像水里的墨水慢慢散开一样。在AI的世界里,扩散模型通过逆转扩散过程来生成新数据,也就是说,它通过在数据中添加随机噪声,然后再逆转这个过程,从而从噪声数据中恢复原始数据分布,这样就能创造出新的数据。
ShuYini
2024/03/11
14.1K0
特别详细!带你一文了解扩散模型(不含任何公式)
图像、视频生成大一统!MSRA+北大全华班「女娲」模型怒刷8项SOTA,完虐OpenAI DALL-E
前脚刚推出取得了40多个新SOTA的Florence「佛罗伦萨」吊打CLIP,横扫40多个SOTA。
新智元
2021/11/29
9071
图像、视频生成大一统!MSRA+北大全华班「女娲」模型怒刷8项SOTA,完虐OpenAI DALL-E
效率碾压DALL·E 2和Imagen,谷歌新模型达成新SOTA,还能一句话搞定PS
Alex 羿阁 发自 凹非寺 量子位 | 公众号 QbitAI 新年伊始,谷歌AI又开始发力文字-图像生成模型了。 这次,他们的新模型Muse(缪斯)在CC3M数据集上达成了新SOTA(目前最佳水平)。 而且其效率远超火爆全球的DALL·E 2和Imagen (这俩都属于扩散模型),以及Parti (属于自回归模型)。 ——单张512x512分辨率图像的生成时间被压缩到仅1.3秒。 在图像编辑方面,只需一句文字指令,就可以对原始图像进行编辑。 (貌似不用再为学ps头秃了~) 如果想要效果更精准,还能选定
量子位
2023/02/28
2680
效率碾压DALL·E 2和Imagen,谷歌新模型达成新SOTA,还能一句话搞定PS
Nvidia「艺术家神器」GauGAN发布第二代!训练超1000万张图片,两个词就能生成风景画
最近,英伟达发布了实时绘画工具GauGAN的第二代,主要特性是支持输入文本来生成图像。
磐创AI
2021/12/01
1.5K0
Nvidia「艺术家神器」GauGAN发布第二代!训练超1000万张图片,两个词就能生成风景画
OpenAI DALL·E 3来了,集成ChatGPT,生图效果太炸了
终于,OpenAI 的文生图 AI 工具 DALL-E 系列迎来了最新版本 DALL・E 3,而上个版本 DALL・E 2 还是在去年 4 月推出的。
机器之心
2023/09/21
9870
OpenAI DALL·E 3来了,集成ChatGPT,生图效果太炸了
多模态新王登基!OpenAI发布DALL·E 2,生成图像「指哪打哪」
---- 新智元报道   编辑:LRS 【新智元导读】大艺术家重磅升级!最近OpenAI发布升级版DALL·E 2,不仅分辨率提升了4倍,准确率更高,业务也更广了:除了生成图像,还能二次创作! 2021年1月,OpenAI放了一个大招:DALL-E模型,让自然语言和图像成功牵手,输入一段不管多离谱的文本,都能生成图片! 比如经典的「牛油果形状的扶手椅」,还有新奇生物「一个长颈鹿乌龟」。 当时看着已经够神奇了吧? 时隔一年,OpenAI结合另一个多模态模型CLIP,发布了第二个版本DALL·E 2!
新智元
2022/04/11
5230
多模态新王登基!OpenAI发布DALL·E 2,生成图像「指哪打哪」
一段话让模型自曝「系统提示词」!ChatGPT、Bing无一幸免
而这位名为Bryce Drennan的网友则表示,可以让ChatGPT自己说出来!
量子位
2023/10/25
3921
一段话让模型自曝「系统提示词」!ChatGPT、Bing无一幸免
独家 | 这张骑马的宇航员图片是AI感知世界的一个里程碑(附链接)
文:Will Douglas Heaven April 6, 2022(2022 年4月6日)翻译:陈超校对:zrx 本文约3400字,建议阅读10分钟本文介绍了DALL-E的升级版,DALL-E 2对于人工智能的意义。 DALL-E 2021年初OpenAI的制图神经网络DALL-E一经发布,该项目便以新方法整合不同概念的类人化能力得到瞩目。DALL-E根据需求制作的图片是超现实且卡通化的,他们展现出了AI已经学会了世界是如何融合在一起的关键课程。DALL-E的鳄梨手扶椅具有鳄梨和椅子的关键特征;穿着t
数据派THU
2022/04/27
1.8K0
独家 | 这张骑马的宇航员图片是AI感知世界的一个里程碑(附链接)
AIGC生图技术:从GAN到最新的生成模型架构
人工智能生成内容(AIGC)技术,尤其是在图像生成领域,近年来取得了显著的进展。从最初的生成对抗网络(GAN)到如今的多种生成模型架构,AIGC技术已成为图像创作、艺术生成、虚拟现实、游戏开发等领域的重要工具。本文将深入探讨AIGC生图技术的演变历程,重点从GAN模型的基础到目前的最新生成模型架构,并结合代码实例展示其实现过程。
一键难忘
2025/03/12
5330
详解AI作画算法原理
在艺术与科技的交汇处,AI作画正以惊人的创造力刷新着我们对美的认知。这一领域融合了深度学习、计算机视觉和生成模型的前沿技术,让机器能够“想象”并创作出令人惊叹的图像。本文将深入浅出地探讨AI作画的核心算法原理,分析常见问题与易错点,并通过一个简单的代码示例,带领大家一窥AI艺术创作的奥秘。
Jimaks
2024/04/29
6660
1句话生成视频AI爆火!Meta最新SOTA模型让网友大受震撼
---- 新智元报道   编辑:编辑部 【新智元导读】Meta新模型Make-A-Video,可以从文本一键生成视频了!AI的进展太神了…… 给你一段话,让你做个视频,你能行吗? Meta表示,我可以啊。 你没听错:使用AI,你也可以变成电影人了! 近日,Meta推出了新的AI模型,名字起得也是非常直接:做个视频(Make-A-Video)。 这个模型强大到什么程度? 一句话,就能实现「三马奔腾」的场景。 就连LeCun都说,该来的总是会来的。 视觉效果超炫 话不多说,咱们直接看效果。 俩袋鼠在厨
新智元
2022/10/08
1.1K0
1句话生成视频AI爆火!Meta最新SOTA模型让网友大受震撼
吴恩达的2022年终盘点:生成式AI、ViT、大模型
近日,吴恩达在圣诞节的《The Batch》特刊上发布了一年一度的年终盘点。在过去的一年,生成式AI迎来爆发式增长,由人工智能生成的图片在社交平台疯狂传播,引发大量争议的同时也推动了投资;视觉 Transformer(ViT) 的工作也出现爆炸性增长,在过去一年中,研究人员共计发表超过 17,000 篇 ViT 论文;AlphaCode、Codex 等的推出便利了开发者,大受欢迎;与此同时,研究人员也在不断拓宽语言模型的边界,在解决可信度、偏见和实时性等问题方面做出持续不断的努力。
Datawhale
2023/01/10
6750
吴恩达的2022年终盘点:生成式AI、ViT、大模型
首次不依赖生成模型,一句话让AI修图!
来源:机器之心 本文约4500字,建议阅读9分钟 本文为你介绍一套基于可微矢量渲染器的解决方案。 2022 年是人工智能生成内容(AI Generated Content,AIGC)爆发的一年,其中一个热门方向就是通过文字描述(text prompt)来对图片进行编辑。已有方法通常需要依赖在大规模数据集上训练的生成模型,不仅数据采集和训练成本高昂,且会导致模型尺寸较大。这些因素给技术落地于实际开发和应用带来了较高的门槛,限制了 AIGC 的发展和创造力发挥。 针对以上痛点,网易互娱 AI Lab 与上海交通
数据派THU
2023/03/29
4410
首次不依赖生成模型,一句话让AI修图!
分享15个全球顶尖的AIGC图片生成平台
人工智能正在改变许多行业的格局,而其中改变最直观和影响最大的就是AIGC领域的图像创作。
非喵鱼
2022/12/31
33.2K0
分享15个全球顶尖的AIGC图片生成平台
生成式AI正在改变一切,但热度散后,还会剩什么呢?
大数据文摘转载自数据派THU 作者:Will Douglas Heaven 翻译:顾伟嵩 校对:欧阳锦 没有人知道OpenAI的DALL-E在2022年会那么受欢迎,也没有人知道它的崛起会留给我们什么。 数字艺术家埃里克·卡特(Erik Carter)使用文本转换到图像的AI工具DALL-E2创作了这幅令人不安的图像。 显然,OpenAI已经引起了一些轰动。2021年快结束的时候,一小队研究人员在该公司旧金山办事处正讨论一个想法。他们建立了OpenAI的文本到图像模型DALL-E的新版本,这是一种将简短
大数据文摘
2023/02/23
3400
生成式AI正在改变一切,但热度散后,还会剩什么呢?
广告创意行业的AI革命
近年来,生成式人工智能(Generative AI)的突破性进展正在重塑广告创意行业。作为OpenAI与微软联合推出的尖端技术,DALL-E 3通过Azure云平台的深度集成,不仅大幅提升了图像生成的效率与质量,还为广告行业带来了从创意构思到落地的全链条革新。本文将深入探讨DALL-E 3的技术优势、与Azure结合的实际应用场景,以及其对广告行业的影响与未来潜力。
Michel_Rolle
2025/03/24
1.2K0
多模态图像版「GPT-3」来了!OpenAI推出DALL-E模型,一句话即可生成对应图像
最近,OpenAI官宣了一个基于Transformer的语言模型--DALL-E,使用了GPT-3的120亿参数版本。取名DALL-E,是为了向艺术家萨尔瓦多-达利(Salvador Dali )和皮克斯的机器人WALL-E致敬。
新智元
2021/01/11
1.4K0
多模态图像版「GPT-3」来了!OpenAI推出DALL-E模型,一句话即可生成对应图像
AIGC:DALL·E 2, Stable Diffusion和 Midjourney工作原理简介
在过去的几年里,人工智能(AI)取得了极大的进展,而AI的新产品中有AI图像生成器。这是一种能够将输入的语句转换为图像的工具。文本转图像的AI工具有许多,但最突出的就属DALLE 2、Stable Diffusion和Midjourney了。
Freedom123
2024/03/29
5480
AIGC:DALL·E 2, Stable Diffusion和 Midjourney工作原理简介
推荐阅读
相关推荐
用AI指挥另一个AI,GAN+CLIP的组合成了“CG艺术家”
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档