news 2026/4/18 11:50:19

$R = \alpha \times T + \beta \times I + \gamma \times D$ 其中T为口味匹配度,I为食材匹配度

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
$R = \alpha \times T + \beta \times I + \gamma \times D$ 其中T为口味匹配度,I为食材匹配度

实现AI美食推荐功能

功能概述

  • 基于用户口味偏好和现有食材推荐菜谱
  • 支持健康饮食参数设置
  • 具备学习用户偏好的能力

核心代码结构

import pandas as pd from sklearn.metrics.pairwise import cosine_similarity from sklearn.feature_extraction.text import TfidfVectorizer class FoodRecommender: def __init__(self, recipes_db): self.recipes = pd.read_csv(recipes_db) self.vectorizer = TfidfVectorizer(stop_words='english') self.ingredient_matrix = self._create_feature_matrix() def _create_feature_matrix(self): """将食材列表转换为特征矩阵""" processed_ingredients = self.recipes['ingredients'].apply( lambda x: ' '.join(x.lower().replace('[','').replace(']','').split(','))) return self.vectorizer.fit_transform(processed_ingredients)

用户偏好处理模块

def update_preferences(self, user_prefs): """更新用户口味偏好""" self.user_prefs = { 'flavors': user_prefs.get('flavors', []), 'dietary_restrictions': user_prefs.get('restrictions', []), 'ingredients': user_prefs.get('ingredients', []) } def _filter_by_preferences(self): """根据用户偏好筛选菜谱""" filtered = self.recipes.copy() # 口味筛选 if self.user_prefs['flavors']: flavor_mask = filtered['flavor_profile'].isin(self.user_prefs['flavors']) filtered = filtered[flavor_mask] # 食材筛选 if self.user_prefs['ingredients']: ingredient_str = '|'.join(self.user_prefs['ingredients']) ingredient_mask = filtered['ingredients'].str.contains(ingredient_str, case=False) filtered = filtered[ingredient_mask] return filtered

推荐算法实现

def recommend(self, n=5): """生成个性化推荐""" available_recipes = self._filter_by_preferences() if len(available_recipes) == 0: return self._fallback_recommendation(n) # 计算食材相似度 user_ingredients = ' '.join(self.user_prefs['ingredients']) user_vec = self.vectorizer.transform([user_ingredients]) sim_scores = cosine_similarity(user_vec, self.ingredient_matrix) # 综合评分 available_indices = available_recipes.index scored_recipes = available_recipes.assign( similarity=sim_scores[0][available_indices] ).sort_values('similarity', ascending=False) return scored_recipes.head(n).to_dict('records') def _fallback_recommendation(self, n): """备用推荐策略""" return self.recipes.sample(n).to_dict('records')

使用示例

# 初始化推荐系统 recommender = FoodRecommender('recipes_dataset.csv') # 设置用户偏好 user_prefs = { 'flavors': ['spicy', 'savory'], 'ingredients': ['chicken', 'bell pepper'], 'restrictions': ['gluten-free'] } # 获取推荐 recommender.update_preferences(user_prefs) recommendations = recommender.recommend(3) # 输出结果 for idx, recipe in enumerate(recommendations, 1): print(f"{idx}. {recipe['name']}") print(f" 食材: {recipe['ingredients']}") print(f" 口味: {recipe['flavor_profile']}\n")

数据库结构示例

推荐使用的菜谱数据库应包含以下字段:

  • name: 菜谱名称
  • ingredients: 食材列表(字符串格式)
  • flavor_profile: 主要口味
  • cooking_time: 烹饪时间
  • difficulty: 难度等级
  • nutrition_info: 营养信息(可选)

扩展功能建议

机器学习集成

from sklearn.cluster import KMeans def cluster_recipes(self, n_clusters=8): """使用聚类算法发现菜谱模式""" kmeans = KMeans(n_clusters=n_clusters) self.recipes['cluster'] = kmeans.fit_predict(self.ingredient_matrix)

实时学习模块

def update_with_feedback(self, recipe_id, liked): """根据用户反馈更新模型""" if liked: self.user_prefs['ingredients'].extend( self.recipes.loc[recipe_id, 'ingredients'].split(','))

健康评分系统

def health_score(self, recipe): """计算菜谱健康评分""" nutrition = recipe['nutrition_info'] return (0.3 * nutrition['protein'] - 0.2 * nutrition['sugar'] + 0.1 * nutrition['fiber'])

基于用户口味的菜谱推荐方法

通过分析用户的口味偏好(如甜、咸、辣、酸等),建立口味画像模型。利用协同过滤算法,将用户口味与菜谱数据库中的口味标签匹配,推荐相似口味的菜谱。例如偏好辣味的用户,系统会优先推荐川菜、湘菜等辣味突出的菜系。

口味权重计算公式: $S = \sum_{i=1}^{n} w_i \times p_i$ 其中$w_i$表示口味权重,$p_i$表示用户对该口味的偏好程度

基于现有食材的智能匹配技术

采用NLP技术解析用户输入的食材,通过知识图谱建立食材与菜谱的关联关系。系统支持模糊匹配和替代建议,当缺少某样食材时,会推荐类似食材可替代的菜谱版本。

食材匹配算法示例:

def ingredient_match(user_ingredients, recipe): intersection = set(user_ingredients) & set(recipe['ingredients']) return len(intersection)/len(recipe['ingredients'])

多维度融合推荐策略

结合用户历史行为、季节时令、烹饪难度等多维度数据,使用混合推荐算法生成个性化菜谱列表。系统会动态调整推荐权重,例如夏季推荐清凉菜系,工作日推荐快捷食谱。

推荐分数计算公式:,D为难度适配度

实时反馈优化机制

通过用户对推荐菜谱的评分、收藏、制作等互动行为,持续优化推荐模型。采用强化学习算法,使系统能够根据用户反馈自动调整推荐策略,提高推荐准确率。

模型更新公式: $w_{new} = w_{old} + \eta \times (R_{actual} - R_{predicted}) \times f(x)$ 其中η为学习率,f(x)为特征函数

跨平台数据整合方案

对接主流美食平台的开放API,构建统一的菜谱数据库。采用数据清洗和标准化处理技术,确保不同来源的菜谱数据具有可比性,扩大推荐系统的覆盖范围。

数据标准化示例代码:

def standardize_recipe(recipe): return { 'name': recipe['title'].lower(), 'ingredients': [i.lower() for i in recipe['ingredients']], 'tags': set(tag.lower() for tag in recipe['categories']) }
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/18 10:48:57

计算机毕业设计springboot“红色长征”宣传网站的设计与实现 基于SpringBoot的红色长征精神传播平台的设计与实现 SpringBoot+Vue红色长征记忆展馆网站建设

计算机毕业设计springboot“红色长征”宣传网站的设计与实现(配套有源码 程序 mysql数据库 论文) 本套源码可以在文本联xi,先看具体系统功能演示视频领取,可分享源码参考。1934-1936 年的万里长征,是中华民族精神的高光刻度。把这…

作者头像 李华
网站建设 2026/4/18 8:15:46

正则表达式的全面介绍

正则表达式的全面介绍 一、正则表达式的由来与发展 1.1 起源(1950s-1960s) 正则表达式的概念最早可以追溯到20世纪50年代,由数学家斯蒂芬科尔克莱尼(Stephen Cole Kleene)提出。他当时在研究神经网络的数学模型时&…

作者头像 李华
网站建设 2026/4/18 11:04:29

掉电保护电路分析

这个电路是MCU(微控制器)的掉电保护电路,核心作用是在主电源(+12V)掉电时,延迟切断 MCU 的供电,给 MCU 留出时间保存数据、完成收尾操作。 一、电路作用 当系统的主电源(+12V)正常供电时,MCU 能稳定工作;当 + 12V 意外掉电时,电路会延迟一段时间再断开 MCU 的电源…

作者头像 李华
网站建设 2026/3/22 19:43:44

从零实现es数据库高并发检索优化方案

如何让 Elasticsearch 在百万 QPS 下依然稳如泰山?—— 一套从零构建的高并发检索优化实战方案你有没有经历过这样的场景?大促刚一开始,商品搜索接口突然开始超时。监控面板上,Elasticsearch 集群的 CPU 直冲 95%,GC 时…

作者头像 李华
网站建设 2026/4/17 19:22:41

从零开始部署Qwen2.5-7B|vLLM助力高效推理

从零开始部署Qwen2.5-7B|vLLM助力高效推理 一、引言:为何选择Qwen2.5-7B与vLLM组合? 在大模型落地实践中,推理效率和部署成本是决定项目能否规模化应用的核心因素。传统基于HuggingFace Transformers的推理方式虽然灵活&#xf…

作者头像 李华
网站建设 2026/4/18 6:10:58

2012-2024年常态化财会监督改革试点城市数据DID

数据简介 自2020年12月起,中央展开了开展了财汇监督的力度并选取了11个地区作为改革试点的对象。该改革有效增强了企业的监管力度并且有效检测会计实务所的审查机制,对于企业经营守则意识形成唤醒和教育具有重要的意义。本次DID数据,根据财会…

作者头像 李华