首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将文本数据存储在熊猫框架中,如何用滑雪板实现简单的分类

将文本数据存储在熊猫框架中,如何用滑雪板实现简单的分类
EN

Stack Overflow用户
提问于 2015-12-16 16:52:22
回答 2查看 2.9K关注 0票数 3

我有一个框架,将文本评论存储在A栏中,评级(1至5)存储在B栏中。

代码语言:javascript
复制
id .....review ..............rating          
1  .....That was awful ......1...

我需要创建一个简单的(基于任何算法的)分类器,例如,基于word: predict词汇表这样的特性,它可以预测评级>3或<3(假设我们将添加另一个col,如果评分>3,则为0)。

我不擅长Python和机器学习,所以我被谷歌搜索过的所有样本卡住了。

请解释,如何在这个例子中提取特征,如何训练一个模型等等,或者为那个案例提供一个好的导师(我无法将学习指导翻译到我的案例中)。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-12-22 00:05:05

你可以非常容易地在科学工具中做到这一点。

假设您有X和y数据:

代码语言:javascript
复制
X = ['the food was really delicious', 'the food was really terrible']
y = [5,2]

使用CountVectorizer,您可以用2行代码将数据转换为数字:

代码语言:javascript
复制
from sklearn.feature_extraction.text import CountVectorizer
x_data = CountVectorizer().fit_transform(X)    

这将完全将数据转换为计数,然后可以输入任何您想要的算法:

代码语言:javascript
复制
from sklearn.neighbors import KNeighbors
clf = KNeighbors().fit(x_data, y)
票数 5
EN

Stack Overflow用户

发布于 2015-12-16 17:32:41

大约有两个一般步骤,可以详细解释。

特征提取

首先,您需要确定要使用哪些功能。这是主要的任务之一,由你来决定。标准方法是纸袋模型。这将计算每个文本中每个单词的出现情况。它是

相当简单,但在实践中却非常有用

也有专门的工具为您做tf-以色列国防军分析,例如萨利

让我们假设您希望在Python中使用scikit来完成这个任务--学习。数据已经可以作为一个具有textrating属性的rating来使用。从text中,您需要提取特性。

示例:

代码语言:javascript
复制
def extract(review):
    '''extracts features from review'''
    result = {}
    for word in review.text.split():
        if result[word] is not None:
            result[word] += 1
        else:
            result[word] = 1
    return result

会给出文本中所有单词的计数(还有一个库类Counter,它可能会为您提供)。这些,您可以组合成一个特征矩阵X。(这段代码可能经过了很大的优化)

代码语言:javascript
复制
X = []
y = []
words = []
# build an index of all occurring words
for review in reviews:
    for word in extract(review):
        if word not in words:
            words.append(word)
# creates the feature vectors for classification
for review in reviews:
    feature_vector = [0] * len(words)
    y.append(review.rating)
    for word, count in extract(review):
        feature_vector[words.index(word)] = count
    X.append(feature_vector)

分类

现在你已经得到了特征向量,你需要决定使用哪一个分类器。其中最简单的是K近邻

代码语言:javascript
复制
from sklearn import neighbors, cross_validation
X_train, X_test, y_train, y_test = cross_validation.train_test_split(
    X, y, test_size=0.33, random_state=42)
knn = neighbors.KNeighborsClassifier()
knn.fit(X_train, y_train)
knn.predict(X_test)

将此与y_test进行比较。

注释中的示例(略有编辑)

让我们考虑两个评论的例子:

  1. 那是可怕的评级1;
  2. 那真是太棒了5分。

创建了两个片段:{'that': 1, 'was': 1, 'awful': 1 }{'that': 1, 'was': 1, 'great': 1}。在这种情况下,X和y向量应该是什么样子呢?

首先,你的words可能是['that', 'was', 'awful', 'great']

然后,你可能会得到

代码语言:javascript
复制
X = [[1, 1, 1, 0],
     [1, 1, 0, 1]]
y = [1, 5]
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34317646

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档