为了账号安全,请及时绑定邮箱和手机立即绑定

线性回归负载模型未按预期进行预测

线性回归负载模型未按预期进行预测

慕森王 2021-12-08 16:19:01
我已经用 sklearn 训练了一个线性回归模型,获得 5 星评级,它已经足够好了。我已经使用 Doc2vec 创建了我的向量,并保存了该模型。然后我将线性回归模型保存到另一个文件中。我正在尝试做的是加载 Doc2vec 模型和线性回归模型并尝试预测另一个评论。这个预测有一些很奇怪的地方:无论输入什么,它总是预测在 2.1-3.0 左右。事情是,我有一个建议,它预测大约为 5(即 2.5 +/-)的平均值,但事实并非如此。我在训练模型时打印了测试数据的预测值和实际值,它们的范围通常为 1-5。所以我的想法是,代码的加载部分有问题。这是我的加载代码:from gensim.models.doc2vec import Doc2Vec, TaggedDocumentfrom bs4 import BeautifulSoupfrom joblib import dump, loadimport pickleimport remodel = 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 textreview = 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)
查看完整描述

2 回答

?
守着星空守着你

TA贡献1799条经验 获得超8个赞

您的示例代码显示了joblib.dump和的导入joblib.load- 即使在此摘录中都没有使用。而且,您文件的后缀暗示该模型最初可能是用 保存的joblib.dump(),而不是香草泡菜。

但是,此代码显示文件仅通过普通加载pickle.load()- 这可能是错误的根源。

joblib.load()文件表明,它load()可能会做这样的事情由它自己创建多个单独的文件中加载numpy的阵列dump()。(奇怪的是,dump()文档对此不太清楚,但据说dump()有一个可能是文件名列表的返回值。)

您可以检查文件的保存位置以查找似乎相关的额外文件,并尝试使用joblib.load()而不是普通的pickle,以查看是否加载了linreg对象的功能更多/更完整的版本。


查看完整回答
反对 回复 2021-12-08
?
肥皂起泡泡

TA贡献1829条经验 获得超6个赞

更新:我忽略了.split()在 之后的问题代码中进行的标记化.cleanText(),所以这不是真正的问题。但保留答案以供参考,因为真正的问题是在评论中发现的。)

很常见的是,当用户Doc2Vecinfer_vector()Doc2Vec infer_vector()需要一个单词列表,而不是一个字符串。

如果提供一个字符串,该函数会将其视为单字符单词列表 - 根据 Python 将字符串建模为字符列表以及字符和单字符字符串的类型合并。大部分这些单字符单词可能不被模型已知的,那些可能是- 'i''a'等等-都没有什么意义。因此推断的文档向量将是弱且毫无意义的。(而且,这样的向量,馈入您的线性回归,总是给出中等的预测值,这并不奇怪。)

如果您将文本分解为预期的单词列表,您的结果应该会有所改善。

但更一般地,提供的话infer_vector()应该进行预处理和记号化的确切不过的培训文档当中。

(对您是否正确进行推理的公平测试是为您的某些训练文档推断向量,然后向Doc2Vec模型询问与这些重新推断的向量最接近的文档标签。通常,同一文档的训练时间tag/ID 应该是排名靠前的结果,或者至少是排名靠前的几个结果之一。如果不是,则可能是数据、模型参数或推理中存在其他问题。)


查看完整回答
反对 回复 2021-12-08
  • 2 回答
  • 0 关注
  • 223 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信