【发布时间】:2018-12-18 15:53:05
【问题描述】:
我目前正在大学完成我的数据分析课程的作业。我设法完成了前两个部分,没有很多问题(EDA 和文本处理)。我现在需要这样做:
建立一个回归模型,该模型将根据以下因素预测每个产品的评分 与评论中使用的一些非常常见的词相对应的属性 (选择多少字留给您作为决定)。所以,对于你的每一个产品 根据每个单词出现的次数,将有一个长的(ish)属性向量 在对该产品的评论中。您的目标变量是评级。
我发现自己对如何解决这个问题有点迷茫。 Here 是我正在使用的数据集的链接。 Review2 是 Review 的词形化版本。
任何有关如何解决此问题的见解将不胜感激!
P.S:我在这里发帖不是为了获得完整的解决方案……只是朝着正确的方向前进
编辑:
这是我为我的Ordinal回归写的代码(能不能有一些反馈):
# Create word matrix
bow = df.Review2.str.split().apply(pd.Series.value_counts)
rating = df['Rating']
df_rating = pd.DataFrame([rating])
df_rating = df_rating.transpose()
bow = bow.join(df_rating)
# Remove some columns and rows
bow = bow.loc[(bow['Rating'].notna()), ~(bow.sum(0) < 80)]
# Divide into train - validation - test
bow.fillna(0, inplace=True)
rating = bow['Rating']
bow = bow.drop('Rating', 1)
x_train, x_test, y_train, y_test = train_test_split(bow, rating, test_size=0.4, random_state=0)
# Run regression
regr = m.OrdinalRidge()
regr.fit(x_train, y_train)
y_pred = regr.predict(x_test)
scores = cross_val_score(regr, bow, rating, cv=5, scoring='accuracy'))
# Plot
pca = PCA(n_components = 1)
pca.fit(x_validate)
x_validate = pca.transform(x_validate)
plt.scatter(x_validate, y_validate, color='black')
plt.plot(x_validate, y_pred, color='blue', linewidth=1)
plt.show()
这就是剧情的样子(取自here):
是否有可能对代码有一些反馈,并可能以更好、更丰富的方式来绘制结果(我不太了解回归是否表现良好)
【问题讨论】:
-
嗨,您要求 SO 为您编写代码。虽然许多用户很乐意提供帮助,但您应该展示您为解决问题所做的工作 - 即向我们展示您认为可以如何完成的一些代码并制作minimal, complete and verifiable example (MCVE)。您已标记此帖子熊猫,所以这是我最喜欢的答案,解释如何制作MCVE in pandas。
-
@tobsecret 如果有的话,我会提供一些代码。我的问题实际上是关于如何开始解决这个问题,我真的不知道如何在
words和ratings之间建立关系。我是否应该使用评论中出现的前 50 个单词并与它们各自的平均评分相关联?我只是不知道如何开始;因此我无法提供任何代码。我只是在寻找“逻辑帮助”,而不是太多“实际帮助” -
@tobsecret,因为 OP 要求“只是朝着正确的方向推动”与“您要求 SO 为您编写代码”非常不同,我不明白您的评论。你能澄清一下你评论的那部分吗?
-
在我评论后编辑了正确方向的推动,感谢您的澄清。
-
words和ratings之间的关系正是您的模型所涵盖的内容。由于您正在处理一个序数变量(这意味着 5 的评级与 4 的评级比它与 3 的评级更相似),建模问题是序数回归的问题。您已使用scikit-learn标签标记了该问题,但您的问题尚不清楚您是否必须以某种方式使用该框架。无论如何,看起来pythonhosted.org/mord 有一个受 scikit-learn 启发的 API 设计,因此可能很有用。否则手动实现它是一个很好的练习。
标签: python pandas scikit-learn regression