【发布时间】:2017-08-10 21:20:16
【问题描述】:
我正在尝试训练一个逻辑分类器。我的数据集有以下列。
name、review、rating、reviews_cleaned、word_count、情绪,
根据评分是否大于或小于 3,情绪是 +1 或 -1。字数统计包含出现次数的单词字典,reviews_cleaned 只是将评论从标点符号中剔除。
这是我训练 LogisticClassifier 的代码。
train_data, test_data = train_test_split(products, test_size = 0.2)
sentiment_model = LogisticRegression(penalty='l2', C=1)
sentiment_model.fit(products['sentiment'], products['word_count'])
我收到以下错误,
ValueError: Found input variables with inconsistent numbers of samples: [1, 166752]
PS:使用graphLabcreate 的等效语句是
sentiment_model = graphlab.logistic_classifier.create(train_data,
target = 'sentiment',
features=['word_count'],
validation_set=None)
我做错了什么?
【问题讨论】:
-
试试
sentiment_model.fit(products[['word_count']], products['sentiment']) -
返回
ValueError: Unknown label type: 'unknown' -
我没有意识到您的目标和功能已被切换。在
fit方法中,输入是fit(X, y, ...),其中X是一个数组,y是一个向量。 -
进一步介绍 ssm 的 cmets。如果您使用单个括号进行子集化。例如df[colname] 它返回一个熊猫系列对象。然而,如果您使用双括号进行子集化,例如df[[colname]] 它将返回一个数据框。系列是一维的,而数据框是二维的。假设您的数据(即产品)实际上是 pandas.DataFrame。
-
不是那种形式。您将不得不转换数据。如果要将每个单词用作模型的特征,则需要为每个单词创建一个列,并且值将是相应的字数。请参阅 sklearn 的 CountVectorizer。它从原始文本生成这样一个二维矩阵并使用稀疏矩阵对象,这将确保它不会消耗太多内存。
标签: python machine-learning scikit-learn classification