【发布时间】:2015-02-17 09:35:05
【问题描述】:
我对 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)
然后我使用了这个分类器
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)])
分类器
classifier = classifier.fit(X_train, y_train)
K-Fold 精度测试
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))
通过以上,我得到 [0.92494226327944573, 0.91974595842956119, 0.93360277136258663] 的准确度 使用 k 折,k = 3。
正如我在 TfidfTransformer 的代码中看到的那样,我发现它只是一种数据预处理。 这是否意味着如果我使用 sklearn ,我不需要像 nltk 中给出的那样进行预处理。
我的问题是 -
如果我可以直接在 scikit 库上运行数据集而无需任何预处理并获得相当好的结果,那么场景是什么时候 在运行数据之前我必须使用预处理(nltk) 在 skicit 上?
【问题讨论】:
-
标题与这里提出的众多问题略有不同。尝试将其缩小到一个问题。另外请检查您的问题并修复代码格式。
-
你可以使用 NLTK 来标记你的语料库一旦被标记和安排你可以使用 scikit-learn 进行分类。我不明白你的问题帮我帮你。
-
没有使用 corpus 进行任何 nltk 标记,我直接通过 scikit-learn 获得了很好的准确性,那么究竟为什么我需要对语料库进行标记?
标签: python scikit-learn