我正在尝试训练一个后勤分类器。我的数据集包含以下列。
名称,审核,评分, reviews_cleaned , word_count ,情绪,
根据评级是否大于3或更低,情绪为+1或-1。单词count包含一个带有出现的单词的词典,而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:使用graphLab
创建的等效声明是
sentiment_model = graphlab.logistic_classifier.create(train_data,
target = 'sentiment',
features=['word_count'],
validation_set=None)
我做错了什么?
答案 0 :(得分:1)
你的训练数据看起来像是一维矢量,但是sklearn要求它是二维的 - 如果你reshape
它你应该没问题。您也可以进行训练/测试分割,但实际上并没有使用您正在生成的数据(而是使用train_data)。
答案 1 :(得分:1)
在该课程中使用GraphLab 非常至少可以说是令人恼火。给这个旋转:
from sklearn.cross_validation import train_test_split
from sklearn.linear_model import LogisticRegression
from sklearn.feature_extraction.text import CountVectorizer
from sklearn.feature_extraction.text import CountVectorizer
df = pd.read_csv('amazon_baby.csv', header = 0)
df.dropna(how="any", inplace= True)
products = df[df['rating'] != 3] #drop the products with 3-star rating
products['sentiment'] = products['rating'] >= 4
X_train, X_test, y_train, y_test = train_test_split(products['review'], products['sentiment'], test_size = .2 ,random_state = 0)
vect = CountVectorizer()
X_train = vect.fit_transform(X_train.values)
X_test = vect.transform(X_test.values)
model = LogisticRegression(penalty ='l2', C = 1)
model.fit(X_train, y_train)
我不确定Sklearn / Pandas和GraphLab之间的直接翻译是什么,但这看起来就是他们正在做的事情。
当我为模特得分时,我得到:
model.score(X_test, y_test)
> .93155480
让我知道你得到的结果或者这对你有用。