我一直在关注本教程https://stackabuse.com/python-for-nlp-sentiment-analysis-with-scikit-learn/在python中创建情感分析。但是,这是我不了解的地方:在我看来,他们使用的数据已经被标记了?因此,如何使用对标记数据进行的训练,然后将其应用于未标记数据?
我想做某事:
假设我有2个数据框:df1是带有标签数据的小数据,df2是带有未标签数据的大数据。我刚刚完成了df1的培训。然后我该如何预测df2的值?
我认为这会像text_classifier.predict(df2.iloc [:,1] .values)一样直接,但这对我不起作用。
此外,如果这个问题看起来很愚蠢,请原谅我,但我在机器学习和nltk方面没有很多经验...
编辑:这是我正在处理的代码:
enc = preprocessing.LabelEncoder()
//chat_data = chat_data[:180]
//chat_labels = chat_labels[:180]
chat_labels = enc.fit_transform(chat_labels)
vectorizer = TfidfVectorizer (max_features=2500, min_df=1, max_df=1, stop_words=stopwords.words('english'))
features = vectorizer.fit_transform(chat_data).toarray()
print(chat_data)
X_train, X_test, y_train, y_test = train_test_split(features, chat_labels, test_size=0.2, random_state=0)
text_classifier = RandomForestClassifier(n_estimators=200, random_state=0)
text_classifier.fit(X_train, y_train)
predictions = text_classifier.predict(X_test)
print(confusion_matrix(y_test,predictions))
print(classification_report(y_test,predictions))
print(accuracy_score(y_test, predictions))
chatData = pd.read_csv(r"C:\Users\jgott\OneDrive\Dokumente\Thesis\chat.csv")
unlabeled = chatData.iloc[:,1].values
unlabeled = vectorizer.fit_transform(unlabeled.astype('U'))
print(unlabeled)
//features = vectorizer.fit_transform(unlabeled).toarray()
predictions = text_classifier.predict(unlabeled)
大部分内容完全来自本教程,除了其中包含astype的行,我用来转换未标记的数据,因为我遇到了valueError告诉我,如果我不这样做,则无法从String转换为float首先不要这样做。
我如何使用对标签数据进行的培训,然后将其应用于未标记的数据?
这确实是有监督的ML试图解决的问题:以known labeled数据作为(sample, label)
形式的输入,模型试图发现存在于其中的generic pattern这些数据。这些模式有望用于预测unseen unlabeled数据的标签。
例如,在情绪分析(悲伤,快乐)问题中,模型在训练过程后可能会发现的模式:
[一个或多个单词的存在意味着悲伤:
("misery" , 'sad', 'displaced people', 'homeless'...)
[一个或多个单词的存在表示高兴:
("win" , "delightful", "wedding", ...)
如果提供了新的文本文档,我们将在该文档中搜索这些模式,并对其进行相应的标记。
作为旁注:我们通常在训练过程中不使用整个标注的数据集,而是从数据集中获取一小部分(训练集除外)来验证我们的模型,并验证它发现了一个真正通用的模式,而不是专门为培训数据量身定制的产品。