使用sklearn进行包含分类特征的多元线性回归 – python

我有一个数据集,每个文档都有一个对应的分数/评级

dataset = [   {"text":"我不喜欢这个小设备", "rating":"2"},   {"text":"我真的很喜欢这个大设备", "rating":"5"},   ....]

此外,我还从同一数据集的text变量中提取了一个类别(变量)的术语列表

x1 = [short, slim, small, shrink]x2 = [big,huge,large]

那么,我如何使用上述单词列表(或者表示对应术语列表中任何词汇存在性的变量,因为列表中的每个术语都是唯一的)作为多个独立变量,以及评级作为因变量来进行线性回归呢?换句话说

我如何用sklearn评估术语列表对评级的影响

我使用TfidfVectorizer来导出文档-术语矩阵。如果可能的话,请提供一个简单的代码片段或示例。


回答:

根据评论中的讨论,似乎应该理解为,每个列表定义了一个二进制变量,其值取决于列表中的任何词是否出现在相关文本中。所以,我们首先要更改文本,使词汇实际出现:

dataset = [   {"text": "我不喜欢这个大设备", "rating": "2"},   {"text": "我真的很喜欢这个小设备", "rating": "5"},   {"text": "一些其他文本", "rating": "3"}]

为了简化我们的工作,我们接下来将这些数据加载到数据框架中,将评级更改为整数,并创建相关变量:

df = pd.DataFrame(dataset)df['rating'] = df['rating'].astype(int)df['text'] = df['text'].str.split().apply(set)x1 = ['short', 'slim', 'small', 'shrink']x2 = ['big', 'huge', 'large']df['x1'] =  df.text.apply(lambda x: x.intersection(x1)).astype(bool)df['x2'] =  df.text.apply(lambda x: x.intersection(x2)).astype(bool)

到这里,df是以下数据框架:

   rating                                   text     x1     x20       2  {this, large, don't, like, device, I}  False   True1       5    {this, small, love, Really, device}   True  False2       3                    {other, Some, text}  False  False

有了这个,我们可以创建相关的模型,并检查系数最终是什么:

model = LinearRegression()model.fit(df[['x1', 'x2']], df.rating)print(model.coef_)  # array([ 2., -1.])print(model.intercept_)  # 3.0

正如评论中提到的,这将会产生最多四种评级,每种评级对应x1x2TrueFalse的组合。在这种情况下,碰巧所有可能的输出都是整数,但在一般情况下,它们不一定是整数,也不一定局限于感兴趣的区间。考虑到评级的顺序性质,这实际上是一个适合某种顺序回归(例如,参见mord)的案例。

Related Posts

为什么我们在K-means聚类方法中使用kmeans.fit函数?

我在一个视频中使用K-means聚类技术,但我不明白为…

如何获取Keras中ImageDataGenerator的.flow_from_directory函数扫描的类名?

我想制作一个用户友好的GUI图像分类器,用户只需指向数…

如何查看每个词的tf-idf得分

我试图了解文档中每个词的tf-idf得分。然而,它只返…

如何修复 ‘ValueError: Found input variables with inconsistent numbers of samples: [32979, 21602]’?

我在制作一个用于情感分析的逻辑回归模型时遇到了这个问题…

如何向神经网络输入两个不同大小的输入?

我想向神经网络输入两个数据集。第一个数据集(元素)具有…

逻辑回归与机器学习有何关联

我们正在开会讨论聘请一位我们信任的顾问来做机器学习。一…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注