You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于KNeighborsClassifier的有声书推荐系统预测结果固定问题求助

有声书推荐系统预测结果固定问题排查与解决

核心问题:用户输入数据未被使用

你的代码里,__init__方法的参数book被后续的book = pd.read_csv("dataset.csv", delimiter = ";")直接覆盖,导致用户输入的数据根本没传入预测环节。最后预测用的是数据集的第一行(dataframe.iloc[[0]]),所以不管输入什么,都会返回这一行对应的书名。

其他潜在问题

  • 未进行数据归一化:KNN算法对特征尺度敏感,像ratings_count_converted这类数值范围大的特征会主导距离计算,导致预测结果偏差。
  • 未拆分训练集与测试集:导入了train_test_split但未使用,无法验证模型泛化能力。
  • 模型参数未调整:默认K值(k=5)可能不适合你的数据集,需要根据情况调整。

修复后的代码示例

from sklearn.neighbors import KNeighborsClassifier
import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler

class SuggestAudiobook:
    def __init__(self, user_input_data):
        # 加载数据集
        book_df = pd.read_csv("dataset.csv", delimiter=";")
        
        # 分离特征与目标变量
        X = book_df[["audioRuntime_converted", "category_converted",
                     "average_rating_converted", "ratings_count_converted"]]
        y = book_df.Title.astype('string')
        
        # 特征归一化
        scaler = StandardScaler()
        X_scaled = scaler.fit_transform(X)
        
        # 拆分训练集和测试集
        X_train, X_test, y_train, y_test = train_test_split(X_scaled, y, test_size=0.2, random_state=42)
        
        # 初始化并训练模型(可调整K值,比如k=3)
        model = KNeighborsClassifier(n_neighbors=3)
        model.fit(X_train, y_train)
        
        # 处理用户输入数据:转为DataFrame并归一化
        user_df = pd.DataFrame([user_input_data], columns=X.columns)
        user_scaled = scaler.transform(user_df)
        
        # 进行预测
        prediction = model.predict(user_scaled)
        print("推荐的有声书是 --> ", prediction[0])

# 使用示例:传入用户输入的特征数据
# user_input = {"audioRuntime_converted": 120, "category_converted": 2, "average_rating_converted": 4, "ratings_count_converted": 500}
# SuggestAudiobook(user_input)

关键修复点说明

  1. 保留用户输入:将参数名改为user_input_data,避免与数据集变量冲突,确保用户数据传入预测。
  2. 特征归一化:用StandardScaler统一特征尺度,解决KNN对特征范围敏感的问题。
  3. 拆分数据集:使用train_test_split拆分训练集和测试集,便于评估模型效果。
  4. 正确预测用户输入:将用户输入转为符合模型要求的格式,经过归一化后再预测。

内容的提问来源于stack exchange,提问作者raffaele de france

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 13:06:29