
本文档旨在解决在Snowflake中使用已保存的编码器进行模型推理时遇到的 "ufunc 'isnan' not supported" 错误。我们将深入探讨问题的原因,并提供一种可行的解决方案,包括代码示例和关键步骤,以确保成功地将编码器和模型部署到Snowflake并进行推理。
在Snowflake中部署机器学习模型时,一个常见的挑战是如何正确地保存和加载预处理步骤,例如One-Hot Encoding和Ordinal Encoding。当模型和编码器被保存到Snowflake并尝试在UDF(用户定义函数)中使用时,可能会遇到 "ufunc 'isnan' not supported" 错误。
这个错误通常表明在编码器的转换过程中,输入数据包含了编码器在训练时未遇到的值,或者数据类型不匹配,导致isnan函数无法处理。具体来说,问题可能源于以下几个方面:
以下步骤提供了一种解决该问题的完整方案:
首先,确保使用joblib库正确地保存编码器和模型。以下代码展示了如何将OneHotEncoder、OrdinalEncoder和XGBoost模型保存到Snowflake的stage中:
from joblib import dump
def s*e_object(object_,filename,stagename,auto_compress=True):
dump(object_, filename)
session.file.put(filename, stagename, overwrite=True,auto_compress=auto_compress)
return
# Extract model object
xgb_model = xgb.to_xgboost()
ohe_obj = ohe.to_sklearn()
oe_obj = oe.to_sklearn()
s*e_object(xgb_model,'xgb_model.joblib','@AM_TEST_MODELS')
s*e_object(ohe_obj,'one_hot_encode.joblib','@AM_TEST_MODELS',auto_compress=False)
s*e_object(oe_obj,'ordinal_encode.joblib','@AM_TEST_MODELS',auto_compress=False)注意:
创建UDF时,需要注意以下几点:
以下是一个UDF的示例代码:
ViiTor AI
一个强大的多语言AI语音合成和视频转译平台
9414
查看详情
import cachetools
@cachetools.cached(cache={})
def read_file(filename):
import sys
import os
import joblib
# Get the "path" of where files added through iport are *alible
import_dir = sys._xoptions.get("snowflake_import_directory")
if import_dir:
with open(os.path.join(import_dir, filename), 'rb') as file:
m = joblib.load(file)
return m
@F.udf(
name='predict_package_mix_p',session=session,replace=True,
is_permanent=True,stage_location='@AM_TEST_UDFS',
)
def predict_package_mix_p(
df:PandasDataFrame[int,str,str,str,str,str,int]
) -> PandasSeries[float]:
import sys
import pandas as pd
from joblib import load
import sklearn
import xgboost as xgb
import json
import snowflake.ml.modeling
def transform_simple_target_encode_manual(
df,transform_col,transform_df
):
df = df.merge(transform_df, on=transform_col)
return df
def remove_space(df):
cols = df.columns
space_cols = [x for x in cols if ' ' in x]
for c in space_cols:
new_col = c.replace(" ","_")
df = df.rename(columns={c:new_col})
return df
IMPORT_DIRECTORY_NAME = "snowflake_import_directory"
import_dir = sys._xoptions[IMPORT_DIRECTORY_NAME]
ohe = read_file('one_hot_encode.pkl')
oe = read_file('ordinal_encode.pkl')
te = pd.read_csv(import_dir + 'target_encoding.csv.gz')
model = read_file('xgb_model.pkl.gz')
print('loaded models')
features = [
"LS1_FLIGHT_ID","DEPARTURE_AIRPORT_CODE","ARRIVAL_AIRPORT_CODE",
"ROUTE_CATEGORY_NAME","DEPARTURE_DATETIME_LOCAL",
"ARRIVAL_DATETIME_LOCAL","CAPACITY"
]
df.columns = features
print('loaded dataframe')
# transform data for one hot and ordinal encodings
df_ohe = ohe.transform(df[['ROUTE_CATEGORY_NAME']])
encoded_df = pd.DataFrame(df_ohe, columns=ohe.categories_)
encoded_df.columns = encoded_df.columns.get_level_values(0)
encoded_df = encoded_df.add_prefix('ROUTE_NAME_OHE_')
df = pd.concat([df, encoded_df], axis=1)
df['DEPART_CODE_ENCODE'] = oe.transform(df[['DEPARTURE_AIRPORT_CODE']])
print('transformed via one hot and ordinal')
# transform using pre-set target encoding
df_te = transform_simple_target_encode_manual(df,'ARRIVAL_AIRPORT_CODE',te)
df_final = remove_space(df_te)
print('transformed via target encode')
# change date cols to datetime
df_final.loc[:,'DEPARTURE_DATETIME_LOCAL'] = pd.to_datetime(
df_final.loc[:,'DEPARTURE_DATETIME_LOCAL'],format='%Y-%m-%d %H:%M:%S',yearfirst=True
)
df_final['ARRIVAL_DATETIME_LOCAL'] = pd.to_datetime(
df_final['ARRIVAL_DATETIME_LOCAL'],format='%Y-%m-%d %H:%M:%S',yearfirst=True
)
print('transformed dates')
df_final['DEPART_HOUR'] = df_final['DEPARTURE_DATETIME_LOCAL'].dt.hour
# snowpark function goes from 1-7 whereas pandas goes from 0-6
df_final['DEPART_WEEKDAY'] = df_final['DEPARTURE_DATETIME_LOCAL'].dt.day_of_week + 1
df_final['DEPART_MONTHDAY'] = df_final['DEPARTURE_DATETIME_LOCAL'].dt.day
df_final['DEPART_YEARDAY'] = df_final['DEPARTURE_DATETIME_LOCAL'].dt.day_of_year
df_final['DEPART_MONTH'] = df_final['DEPARTURE_DATETIME_LOCAL'].dt.month
df_final['DEPART_YEAR'] = df_final['DEPARTURE_DATETIME_LOCAL'].dt.year
df_final['ARRIVE_HOUR'] = df_final['ARRIVAL_DATETIME_LOCAL'].dt.hour
print('created features')
pm = pd.Series(model.predict(df_final[
["DEPART_CODE_ENCODE","ROUTE_NAME_OHE_CITY","ROUTE_NAME_OHE_FAR_SUN",
"ROUTE_NAME_OHE_SKI","ROUTE_NAME_OHE_SUN","CAPACITY",
"ARRIVAL_AIRPORT_CODE_ENCODED","DEPART_HOUR",
"DEPART_WEEKDAY","DEPART_MONTHDAY","DEPART_YEARDAY",
"DEPART_MONTH","DEPART_YEAR","ARRIVE_HOUR"]
]))
return pm关键点:
创建UDF后,可以使用Snowpark DataFrame调用UDF进行推理:
test_df = session.create_dataframe(
[[979152,"LBA","ALC","SUN","2025-11-24 08:30:00","2025-11-24 12:25:00",189],
[987073,"LBA","FAO","SUN","2025-12-13 16:15:00","2025-12-13 11:25:00",189],
[951384,"STN","FNC","FAR SUN","2025-12-05 09:40:00","2025-12-05 13:35:00",189],
[952380,"MAN","LPA","FAR SUN","2025-12-22 19:45:00","2025-12-22 14:30:00",235],
[963602,"MAN","FUE","FAR SUN","2025-12-29 10:30:00","2025-12-29 15:05:00",235]],
schema=[
"LS1_FLIGHT_ID","DEPARTURE_AIRPORT_CODE","ARRIVAL_AIRPORT_CODE",
"ROUTE_CATEGORY_NAME","DEPARTURE_DATETIME_LOCAL","ARRIVAL_DATETIME_LOCAL","CAPACITY"
]
)
test_df.withColumn(
'PREDICTED_PACKAGE_MIX',
predict_package_mix_p([*test_df])).show()注意:
通过遵循以上步骤,可以解决在Snowflake中使用已保存的编码器进行模型推理时遇到的 "ufunc 'isnan' not supported" 错误。关键在于正确地保存和加载编码器和模型,并在UDF中进行必要的数据预处理和类型转换。此外,使用cachetools库可以提高UDF的性能。
注意事项:
希望本文档能够帮助您成功地在Snowflake中部署机器学习模型并进行推理。
以上就是使用Snowflake进行模型推理:解决编码器加载后的“isnan”错误的详细内容,更多请关注其它相关文章!
# js
# 肥西网站优化费用
# 网站建设过时了吗英语
# 丽水网站优化价格
# 吕梁交城全网营销推广中心
# 专属网站建设流程
# 遵义seo网站优化
# 微博短视频营销百度推广
# 福保专业外贸网站推广
# 大公司seo销售
# 并在
# 以确保
# 文档
# 是一个
# 的是
# 几种
# 所需
# 浮点
# 正确地
# 加载
# red
# python包
# api调用
# ai
# csv
# session
# 编码
# go
# json
# python
# 龙泉网站建设推广
相关栏目:
【
Google疑问12 】
【
Facebook疑问10 】
【
优化推广96088 】
【
技术知识133117 】
【
IDC资讯59369 】
【
网络运营7196 】
【
IT资讯61894 】
相关推荐:
电脑开不了机怎么办 电脑无法开机的解决方法
歌词怎么展示在|直播|间视频号?有什么注意事项?
c++中的const关键字用法大全_c++ const正确使用指南
谷歌邮箱官方入口链接 谷歌邮箱网页版电脑端快速登录
中大网校app做题记录清除方法
iCloud官方网站 iCloud网页版在线登录入口
在PySimpleGUI中实现键盘按键绑定按钮事件
PHP实现等比数列:构建数组元素基于前一个值递增的方法
百度网盘如何设置上传限额
《tt语音》超级玩家开通方法
BunnyStream TUS视频上传指南:解决401认证错误与参数配置
空腹吃苹果好吗 苹果空腹摄入指南
猫眼电影app如何筛选支持退改签的影院_猫眼电影退改签影院筛选方法
《绿竹漫游》关闭消息通知方法
德邦快递收费标准详解
《兴业银行》注册登录方法
QQ网站入口直接登录 QQ官方正版登录页面
《波斯王子:失落的王冠》剑术大师打法攻略
j*a中ArrayBlockingQueue的使用
PSD转AI文件的简单方法
铁路12306官网入口 铁路12306中国铁路官网登录首页
Win10锁屏时间怎么设置 Win10调整自动锁屏时间方法
TikTok搜索结果不显示怎么办 TikTok搜索刷新与优化方法
附近酒吧怎么找?
mysql触发器如何编写_mysql触发器编写规范与代码示例讲解
微博网页版访问入口 微博网页版网页端使用指南
解决CSS background 属性中 cover 关键字的常见误用
J*aScript模块加载器_RequireJS原理分析
背部总是隐隐作痛怎么回事 背痛如何改善
优化CSS动画与J*aScript定时器协同:构建稳定Toast提示
cad加载的线型看不见怎么办_cad线型不可见问题解决方法
J*aScript与HTML元素交互:图片点击事件与链接处理教程
顺丰快递收费标准查询_如何查看顺丰最新收费价格
三星A55应用闪退排查步骤_Samsung A55稳定性优化技巧
Sublime怎么格式化HTML代码_Sublime前端代码美化插件使用指南
Highcharts雷达图轴线交点数值标注指南
除了Copilot,还有哪些值得一试的VS Code AI插件?
抖音网页版地址直接进入_抖音网页版在线观看入口
荣耀 Magic10 Pro 系统更新提示失败_荣耀 Magic10 Pro 升级修复
企查查官网和爱企查 企查查企业查询官网入口
Go App Engine 项目结构与包管理深度指南
Excel如何快速合并单元格内容_Excel文本合并与函数操作技巧
qq邮箱怎么注册_QQ邮箱注册步骤与注意事项
如何通过settings.json个性化您的VS Code体验
使用CSS :has() 选择器实现父元素样式控制:从子元素反向应用样式
如何查询个人病历记录
Apple Music无故扣费引质疑
邮编号码查询app有哪些_邮编号码查询推荐app及使用体验
跨语言测试实践:使用Python Selenium测试现有J*a Web项目
《sketchbook》选中部分图案移动方法
2025-11-04
运城市盐湖区信雨科技有限公司是一家深耕海外推广领域十年的专业服务商,作为谷歌推广与Facebook广告全球合作伙伴,聚焦外贸企业出海痛点,以数字化营销为核心,提供一站式海外营销解决方案。公司凭借十年行业沉淀与平台官方资源加持,打破传统外贸获客壁垒,助力企业高效开拓全球市场,成为中小企业出海的可靠合作伙伴。