Abh*_*ary 0 python scikit-learn
我对python和机器学习都很陌生.我正在努力研究Twitter数据的情感分析,所以在研究时我直接使用sklearn而不需要在nltk中进行任何预处理.
#reading data from csv having 1 column with text and other with sentiment as pos and neg
for index, row in val.iterrows():
statement = row['tweets'].strip() #get the tweet from csv
tweets.append((statement, row['emo'])) #append the tweet and emotion(pos,neg)
Run Code Online (Sandbox Code Playgroud)
然后我用了这个classfier
classifier = Pipeline([
('vectorizer', CountVectorizer()),
('tfidf', TfidfTransformer()),
('classifier', OneVsRestClassifier(LinearSVC())
)])
#Dividing data into training and Testing
np.random.shuffle(tweets)
for key, value in tweets:
keys.append(key)
values.append(value)
size = len(keys) * 1 / 2
X_train = np.array(keys[0:size])
y_train = np.array(values[0:size])
X_test = np.array(keys[size + 1: len(keys)])
y_test = np.array(values[size + 1: len(keys)])
Run Code Online (Sandbox Code Playgroud)
classifier = classifier.fit(X_train, y_train)
Run Code Online (Sandbox Code Playgroud)
X_folds = np.array_split(X_test, 3)
y_folds = np.array_split(y_test, 3)
scores = list()
for k in range(3):
X_train = list(X_folds)
X_test = X_train.pop(k)
X_train = np.concatenate(X_train)
y_train = list(y_folds)
y_test = y_train.pop(k)
y_train = np.concatenate(y_train)
clsf = classifier.fit(X_train, y_train)
scores.append(clsf.score(X_test, y_test))
Run Code Online (Sandbox Code Playgroud)
通过上述,我 使用k-fold 得到[0.92494226327944573,0.91974595842956119,0.93360277136258663]的准确度,其中k = 3.
正如我在TfidfTransformer的代码中看到的那样,我发现它只是一种数据预处理.所以这意味着如果我使用sklearn,我不需要像在nltk中给出的那样进行预处理.
我的问题是 -
如果我可以直接在scikit库上运行数据集而不进行任何预处理并获得相当好的结果,那么在skicit上运行数据之前我必须使用预处理(nltk)的情况何时?
你可能会发现这个话题与情绪共存(即大多数关于特蕾莎修女的文章都是积极的情绪,大多数关于谋杀的文章都是否定的).你的单词分类器可能是学习主题类别而不是情感类别.您可以通过检查分类器中术语的权重来验证这一点:我的猜测是最高加权术语是特定于主题的.
为什么这是个问题?因为您所学到的内容不会归结为不在训练集中的主题.这将是一个很大的问题,例如Twitter,主题转移迅速.尝试在M个月学习这样的模型,并在月M + 6中预测推文的情绪.我想它不会很好用!
| 归档时间: |
|
| 查看次数: |
2037 次 |
| 最近记录: |