python - 从推文中预测性别的文本分类器
问题描述
我正在尝试构建一个文本分类器来根据推文预测推特用户的性别。这是我第一次构建文本分类模型,我不确定我的步骤。
两个数据框
我有一个充当训练数据集的数据框。它包含每个用户 ID 及其性别。
train_lables=({'id':['33324','24442','3956'],
'gender':['female','male','male']})
train_lables=pd.DataFrame(train_lables)
我还有一个数据集作为训练和测试数据集。它包含用户的推文。
tweets=({'id':['33324','24442','3956'],
'tweets':[['hello','trump','today'],['blue','eyes','brown','hair'],['playstation','june']]})
tweets=pd.DataFrame(tweets)
元组?
我想执行特征提取来训练我的模型。到目前为止,我已经使用每个数据帧中的每一行创建了元组,如下所示。
#gender for each user id
training_labels_tuple=[tuple(x) for x in training_labels.to_records(index=False)]
输出是
[('33324', 'female'), ('24442', 'male'), ('3956', 'male')]
以及用户 ID 和推文的元组
tweets_tuple=[tuple(x) for x in tweets.to_records(index=False)]
输出是
[('33324', ['hello', 'trump', 'today']),
('24442', ['blue', 'eyes', 'brown', 'hair']),
('3956', ['playstation', 'june'])]
我不确定是否应该将推文和性别合并到一个元组中并用它来训练我的模型。
有人可以指导我完成正确的步骤来提取模型的特征吗?
解决方案
nltk 书的第 6 章有一个关于这个确切问题的重要部分(使用性别识别示例的文本分类)。
在这种情况下,最常用的方法是将推文用作单个字符串作为唯一的特征。这是一个使用朴素贝叶斯分类器的示例:
import random
import nltk
import pandas as pd
# input data
df = pd.DataFrame({
'id':['33324','24442','3956'],
'gender':['female','male','male'],
'tweets':[['hello','trump','today'],['blue','eyes','brown','hair'],['playstation','june']]
})
# featurize data to input into classifier
features = []
for tweet, gender in zip(df["tweets"], df["gender"]):
features.append(({"feature": " ".join(tweet)}, gender))
# shuffle features
random.shuffle(features)
# train test split, obvs use different split values for the real set or use sklearns train_test_split function
train_set, test_set = features[:2], features[2:]
# train
clf = nltk.NaiveBayesClassifier.train(train_set)
# test
print(nltk.classify.accuracy(clf, test_set))
nltk 这本书有更多关于策略的信息,您可以使用这些策略来提取比我上面所做的更多信息特征。
推荐阅读
- docker - Nextcloud:当用户退出时,从 SMB 共享的文件变得不可用
- mysql - MySQL - 使十进制字段的默认 NULL 是否节省空间?
- android - Android 11 AVD 比 Android 10 AVD 占用更多的存储空间
- awk - 如何比较一个字段中具有相同唯一子字符串的行并仅保留最后一个字段中具有最大数字的行?
- javascript - node js变量系统
- isabelle - 如何从 Windows 安装中导出 Isabelle 会话?
- django - Django os.getenv('SECRET_KEY') 抛出“SECRET_KEY 设置不能为空。”
- html - 链接到同一页面中的另一个元素时如何控制屏幕滚动到的点
- docker - 将 docker bridge 网络绑定到特定接口,或以其他方式支持 VLAN 标记网络
- css - 在反应中摆脱TextField内的矩形边框