保存机器学习模型后如何预测?以余弦相似度推荐系统为例
基于余弦相似度的推荐系统预测方案
你的核心问题是缺少对训练组件的持久化保存,以及外部输入的标准化处理流程。以下是具体实现步骤和代码:
1. 保存训练好的核心组件
要支持外部输入预测,必须保存训练阶段生成的三个关键资源:TF-IDF向量器、数据集的TF-IDF矩阵、原帖子Caption列表。使用joblib(sklearn官方推荐)保存:
import joblib # 你的原有训练代码 captions = data["Caption"].tolist() vectorizer = TfidfVectorizer() uni_tfidf = vectorizer.fit_transform(captions) # 保存到本地文件 joblib.dump(vectorizer, 'tfidf_vectorizer.pkl') joblib.dump(uni_tfidf, 'dataset_tfidf_matrix.pkl') joblib.dump(captions, 'captions_list.pkl')
2. 加载组件并处理外部输入
预测阶段只需加载保存的资源,对外部输入做统一的向量转换,再计算余弦相似度生成推荐:
import joblib from sklearn.metrics.pairwise import cosine_similarity # 加载保存的组件 vectorizer = joblib.load('tfidf_vectorizer.pkl') dataset_tfidf = joblib.load('dataset_tfidf_matrix.pkl') captions = joblib.load('captions_list.pkl') # 处理外部输入的Caption(示例) external_input = "用户新发布的帖子描述内容" # 用训练好的向量器转换输入(必须用transform,不能重新fit) input_tfidf = vectorizer.transform([external_input]) # 计算与数据集所有样本的余弦相似度 similarity_scores = cosine_similarity(input_tfidf, dataset_tfidf).flatten() # 获取Top4相似的帖子(和你原有逻辑一致) top_similar_indices = similarity_scores.argsort()[:-5:-1] # 输出推荐结果 for idx in top_similar_indices: print(captions[idx])
关键注意点
- 禁止重新fit向量器:预测时必须使用训练阶段的
vectorizer做transform,否则输入向量的空间和数据集向量空间不匹配,相似度计算完全无效。 - 数据集更新同步:如果你的帖子数据集有新增或删除,需要重新训练并保存新的TF-IDF矩阵和Caption列表,保证推荐结果基于最新数据。
- 存储选择:
joblib比原生pickle更适合存储sklearn模型和大型稀疏矩阵,读写效率更高。
内容的提问来源于stack exchange,提问作者Dark Light
相关产品推荐
相关产品推荐

