这篇教程使用文本数据预测一个人的性格写得很实用,希望能帮到您。 使用文本数据预测一个人的性格
我们使用的用 迈尔斯布里格斯类型(MBTI人格)标注的数据集。
一共有4个维度,每个维度有两个类型,所以常人的性格从MBTI指标来看,一共有16种性格。 读取数据
mbti数据集中有两个字段
type: 性格类型
posts: 每个用户的最近的50条推文,推文与推文之间用 ||| 间隔开
先查看前5行数据
import pandas as pd import warnings warnings.filterwarnings('ignore') df = pd.read_csv('data/mbti.csv') df.info()
<class 'pandas.core.frame.DataFrame'> RangeIndex: 8675 entries, 0 to 8674 Data columns (total 2 columns): type 8675 non-null object posts 8675 non-null object dtypes: object(2) memory usage: 135.7+ KB
mbti数据集一共有8675条数据 数据探索
这里我计算出每个推文的长度(没啥大用,复习apply和seaborn可视化)
df['words_per_comment'] = df['posts'].apply(lambda x: len(x.split()))/50 df['posts'] = df['posts'].apply(lambda x:x.lower()) df.head()
小提琴图show一下各个性格的wordspercomment信息
import seaborn as sns import matplotlib.pyplot as plt #画布设置及尺寸 sns.set(style='white', font_scale=1.5) plt.figure(figsize=(15, 10)) #绘制小提琴图 sns.violinplot(x='type', y='words_per_comment', data=df, color='lightgray') #绘制分类三点图,叠加到小提琴图图层上方 sns.stripplot(x='type', y='words_per_comment', data=df, size=2, jitter=True) #标题及y轴名 plt.title('The Violin Plot of Words Per Comment', size=18) plt.ylabel('Words Per Comment') #显示 plt.show()
分割数据
将数据集分为训练集和测试集
from sklearn.model_selection import train_test_split X_train, X_test, y_train, y_test = train_test_split(df['posts'], df['type'], test_size=0.2, random_state=123)
文本向量化
机器不理解文本,需要先编码为数字,这里使用tfidf方法进行编码。不熟悉的可以看看这个介绍
如何从文本中提取特征信息?
from sklearn.feature_extraction.text import TfidfVectorizer tfidf = TfidfVectorizer(stop_words='english') X_train = tfidf.fit_transform(X_train) X_test = tfidf.transform(X_test)
训练模型及模型得分
这里我选来三种模型,使用score得分评价模型表现
from sklearn.linear_model import LogisticRegression model1 = LogisticRegression() model1.fit(X_train, y_train) model1.score(X_test, y_test)
0.6357348703170029
from sklearn.linear_model import SGDClassifier model2 = SGDClassifier() model2.fit(X_train, y_train) model2.score(X_test, y_test)
0.6824207492795389
from sklearn.linear_model import Perceptron model3 = Perceptron() model3.fit(X_train, y_train) model3.score(X_test, y_test)
0.5994236311239193
找到的这个数据集标注的可能有问题,如果是经典的数据集,一般跑出来都能达到80+%的准确率。 ———————————————— 版权声明:本文为CSDN博主「邓旭东HIT」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。 原文链接:https://blog.csdn.net/weixin_38008864/article/details/103725004 返回列表 训练一个SentenceTransformer模型 |