无法在逻辑回归中使用 decision_function() 评估分数

Posted

技术标签:

【中文标题】无法在逻辑回归中使用 decision_function() 评估分数【英文标题】:Unable to evaluate score using decision_function() in Logistic Regression 【发布时间】:2018-04-22 15:04:55 【问题描述】:

我正在做这所大学。在华盛顿作业中,我必须使用 LogisticRegression 中的 decision_function() 预测 sample_test_matrix (最后几行)的分数。但我得到的错误是

    ValueError: X has 145 features per sample; expecting 113092

代码如下:

   import pandas as pd 
   import numpy as np 
   from sklearn.linear_model import LogisticRegression

   products = pd.read_csv('amazon_baby.csv')

   def remove_punct (text) :
       import string 
       text = str(text)
       for i in string.punctuation:
          text = text.replace(i,"")
       return(text)

   products['review_clean'] = products['review'].apply(remove_punct)
   products = products[products.rating != 3]
   products['sentiment'] = products['rating'].apply(lambda x : +1 if x > 3 else  -1 )

   train_data_index = pd.read_json('module-2-assignment-train-idx.json')
   test_data_index = pd.read_json('module-2-assignment-test-idx.json')

   train_data = products.loc[train_data_index[0], :]
   test_data = products.loc[test_data_index[0], :]
   train_data = train_data.dropna()
   test_data = test_data.dropna()

   from sklearn.feature_extraction.text import CountVectorizer

   train_matrix = vectorizer.fit_transform(train_data['review_clean'])
   test_matrix = vectorizer.fit_transform(test_data['review_clean'])

   sentiment_model = LogisticRegression()
   sentiment_model.fit(train_matrix, train_data['sentiment'])
   print (sentiment_model.coef_)

   sample_data = test_data[10:13]
   print (sample_data)

   sample_test_matrix = vectorizer.transform(sample_data['review_clean'])
   scores = sentiment_model.decision_function(sample_test_matrix)
   print (scores)

这是产品数据:

          Name                                                         Review                                       Rating  

  0       Planetwise Flannel Wipes                              These flannel wipes are OK, but in my opinion ...       3  


  1       Planetwise Wipe Pouch                                 it came early and was not disappointed. i love...       5  


  2       Annas Dream Full Quilt with 2 Shams                   Very soft and comfortable and warmer than it l...       5  

  3       Stop Pacifier Sucking without tears with Thumb...     This is a product well worth the purchase.  I ...       5

  4       Stop Pacifier Sucking without tears with Thumb...      All of my kids have cried non-stop when I trie...       5 

【问题讨论】:

【参考方案1】:

此行导致后续行中的错误:

test_matrix = vectorizer.fit_transform(test_data['review_clean'])

把上面的改成这样:

test_matrix = vectorizer.transform(test_data['review_clean'])

说明: 使用 fit_transform() 将在测试数据上重新拟合 CountVectorizer。所以所有关于训练数据的信息都会丢失,词汇量只能从测试数据中计算出来。

然后您正在使用该 vectorizer 对象来转换 sample_data['review_clean']。因此,其中的功能将仅是从test_data 学习的功能。

但是sentiment_model 是使用来自train_data 的词汇进行训练的。因此功能不同。

在测试数据上始终使用transform(),从不使用fit_transform()

【讨论】:

太好了,成功了。谢谢 。你能告诉我为什么会这样吗? @harshi 我已经添加了解释。请仔细阅读,如果仍然不理解,请询问。此外,如果这有助于您考虑投票/接受答案。 当然。谢谢!

以上是关于无法在逻辑回归中使用 decision_function() 评估分数的主要内容,如果未能解决你的问题,请参考以下文章

负的 decision_function 值

逻辑回归中的概率校准错误:ValueError:无法将字符串转换为浮点数:'OLIFE'

我无法将逻辑回归拟合到模型中。如何解决这个问题?

在 sklearn 中使用交叉验证和 AUC-ROC 进行逻辑回归模型

Vowpal Wabbit中逻辑回归的正确性?

逻辑回归LR