您当前的位置:首页 > IT编程 > 自然语言处理
| C语言 | Java | VB | VC | python | Android | TensorFlow | C++ | oracle | 学术与代码 | cnn卷积神经网络 | gnn | 图像修复 | Keras | 数据集 | Neo4j | 自然语言处理 | 深度学习 | 医学CAD | 医学影像 | 超参数 | pointnet | pytorch | 异常检测 | Transformers |

自学教程:使用文本数据预测一个人的性格

51自学网 2023-10-24 20:08:49
  自然语言处理
这篇教程使用文本数据预测一个人的性格写得很实用,希望能帮到您。
使用文本数据预测一个人的性格


我们使用的用 迈尔斯布里格斯类型(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模型
51自学网自学EXCEL、自学PS、自学CAD、自学C语言、自学css3实例,是一个通过网络自主学习工作技能的自学平台,网友喜欢的软件自学网站。
京ICP备13026421号-1