【发布时间】:2019-08-08 01:45:52
【问题描述】:
我已经使用 sklearn 训练了一个线性回归模型,获得了 5 星评级,它已经足够好了。我已经使用 Doc2vec 创建了我的向量,并保存了该模型。然后我将线性回归模型保存到另一个文件中。我想要做的是加载 Doc2vec 模型和线性回归模型并尝试预测另一条评论。
这个预测有一点很奇怪:无论输入什么,它总是预测 2.1-3.0 左右。
问题是,我建议它预测的平均值约为 5(即 2.5 +/-),但事实并非如此。我在训练模型时打印了测试数据的预测值和实际值,它们的范围通常为 1-5。所以我的想法是,代码的加载部分有问题。这是我的加载代码:
from gensim.models.doc2vec import Doc2Vec, TaggedDocument
from bs4 import BeautifulSoup
from joblib import dump, load
import pickle
import re
model = Doc2Vec.load('../vectors/750000/doc2vec_model')
def cleanText(text):
text = BeautifulSoup(text, "lxml").text
text = re.sub(r'\|\|\|', r' ', text)
text = re.sub(r'http\S+', r'<URL>', text)
text = re.sub(r'[^\w\s]','',text)
text = text.lower()
text = text.replace('x', '')
return text
review = cleanText("Horrible movie! I don't recommend it to anyone!").split()
vector = model.infer_vector(review)
pkl_filename = "../vectors/750000/linear_regression_model.joblib"
with open(pkl_filename, 'rb') as file:
linreg = pickle.load(file)
review_vector = vector.reshape(1,-1)
predict_star = linreg.predict(review_vector)
print(predict_star)
【问题讨论】:
-
这可能更多地属于数据科学堆栈交换
-
您对平均响应的预测可能意味着两件事:(1)您的模型没有足够的数据可供学习; (2)你的模型太死板(高度偏颇)。对于第一种情况,您需要更多数据。其次,您可以尝试更灵活的模型,例如随机森林,而不是 linreg。
-
@Sergey Bushmanov 数据是 750000 条评论(来自每颗星的 150000 条评论),所以我认为有足够的数据。问题是,当我预测测试数据时,我实际上打印了实际评级和预测评级,它们不在平均响应附近。如果发生这种情况(我的模型太死板),那么我最后的预测将是 2.5 左右。但他们不是。唯一的问题(我认为)是我加载模型或重塑。我如何确定我的模型是否如您所说的那样过于僵化?
-
我不太明白你的意思。首先你说:“无论输入什么,它总是预测 2.1-3.0 左右。”然后你继续:“当我预测测试数据时,我实际上打印了实际评级和预测评级,它们不在平均响应附近”。这两者相互矛盾,不是吗?如果您想要一些与平均值不同的东西,请查看从您的测试中产生不同结果的原因并提供给您的预测算法。至于检查您的模型是否过于偏颇,只需尝试 RF,看看您是否获得更明智(“准确”?)的结果。
-
“无论输入什么”是指加载模型时。 “当我预测测试数据时”是指在训练模型并预测测试数据之后。对不起:D
标签: python machine-learning scikit-learn linear-regression doc2vec