NLP_情感分类_机器学习方案

文章目录


项目背景

项目的目的,是为了对情感评论数据集进行预测打标。在训练之前,需要对数据进行数据清洗环节,前面已对数据进行清洗,详情可移步至NLP_情感分类_数据清洗

下面对已清洗的数据集,用机器学习方案进行处理

数据清洗

导包

python 复制代码
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
from tqdm import tqdm
import pickle
import numpy as np
import gc
#import swifter
from sklearn.neural_network import MLPClassifier
import os
from sklearn.metrics import accuracy_score,f1_score,recall_score,precision_score
from sklearn.ensemble import GradientBoostingClassifier
from sklearn.model_selection import GridSearchCV
from sklearn.linear_model import LogisticRegression
from sklearn.neighbors import KNeighborsClassifier
from sklearn.naive_bayes import MultinomialNB
from sklearn.tree import DecisionTreeClassifier
from lightgbm import LGBMClassifier
from sklearn.ensemble import RandomForestClassifier
from sklearn import svm

导入数据

python 复制代码
df = pd.read_csv('data/sentiment_analysis_clean.csv')
df = df.dropna()

切分评论及标签

python 复制代码
X_tfidf = df['text']
y_tfidf = df['label']

TF-IDF

TfidfVectorizer是用于文本处理的重要工具之一,它将文本数据转换成数值向量形式,以便于后续的机器学习模型进行训练。TF-IDF代表Term Frequency-Inverse Document Frequency,即词频-逆文档频率算法。

TF-IDFVectorizer可以根据应用场景灵活地控制特征提取的过程,提高文本分析的效率和精度。

TF-IDF 分数由两部分组成:第一部分是词语频率(Term Frequency),第二部分是逆文档频率(Inverse Document Frequency)。其中计算语料库中文档总数除以含有该词语的文档数量,然后再取对数就是逆文档频率。

TF(t)= 该词语在当前文档出现的次数 / 当前文档中词语的总数

IDF(t)= log_e(文档总数 / 出现该词语的文档总数)

构造TF-IDF特征

python 复制代码
from sklearn.feature_extraction.text import TfidfVectorizer

vec_tfidf = TfidfVectorizer(use_idf=True, smooth_idf=True, norm=None, max_features=1000)
array_TFIDF = vec_tfidf.fit_transform(X_tfidf)

数据切分

python 复制代码
from sklearn.model_selection import train_test_split, StratifiedKFold
# 这里指定了random_state是为了保证每次切分数据集的结果都是一样的
Xidf_train, Xidf_test, yidf_train, yidf_test = train_test_split(array_TFIDF, y_tfidf,test_size=0.2,random_state=2024)
Xidf_train = Xidf_train.toarray()
Xidf_test = Xidf_test.toarray()

del df,array_TFIDF
gc.collect()

模型训练

python 复制代码
def train_model(model, X_train, X_test, y_train, y_test):
    
    dic = {'lr':'Logistic Regression',
          'nb':'Naive Bayes',
          'svm':'Support Vector Machine',
          'dt':'Decision Tree',
          'rf':'Random Forest',
          'lgb':'LightGBM'}
    
    train_acc, test_acc = [], []
    
    if model == 'lr':
        clf = LogisticRegression(C=0.01, solver='liblinear')
    elif model == 'nb':
        clf = MultinomialNB(alpha=100)
    elif model == 'svm':
        clf = svm.LinearSVC(C=0.01)
    elif model == 'dt':
        clf = DecisionTreeClassifier(max_depth=100, min_samples_split= 2)
    elif model == 'rf':
        clf = RandomForestClassifier(max_depth=100,min_samples_split=5)
    elif model == 'lgb':
        clf = LGBMClassifier(learning_rate=1.0)
    else:
        print('Model doesn\'t exist')

    clf.fit(X_train, y_train)

    # predict using train data
    train_pred = clf.predict(X_train)
    train_acc = accuracy_score(y_train, train_pred)
    
    # predict using test data
    test_pred = clf.predict(X_test)
    test_acc = accuracy_score(y_test, test_pred)   

    print()
    print("Model: ", dic[model])
    print("Training accuracy: {}".format(train_acc))
    print("Test accuracy: {}".format(test_acc))
    print()

    return {
        'model_name':dic[model],
        'Train Accuracy':train_acc,
        'Test Accuracy':test_acc
    }

查看结果

python 复制代码
metric_df = pd.DataFrame(columns=['model_name','Train Accuracy','Test Accuracy'])
for model in ['lr', 'nb', 'svm', 'dt', 'rf', 'lgb']:
    metric = train_model(model ,Xidf_train, Xidf_test, yidf_train, yidf_test)
    # 将metric转换成一个DataFrame
    metric_df = pd.concat([metric_df, pd.DataFrame([metric])], ignore_index=True)
python 复制代码
metric_df

同类型项目

阿里云-零基础入门NLP【基于机器学习的文本分类】

阿里云-零基础入门NLP【基于深度学习的文本分类3-BERT】

也可以参考进行学习


学习的参考资料:

深度之眼

相关推荐
乾元3 分钟前
社交工程 2.0:生成式 AI 驱动的高拟真钓鱼与认知对抗
网络·人工智能·安全·机器学习·架构
Liue612312313 分钟前
瓦楞纸箱缺陷检测与分类——YOLOv26实战应用详解_1
yolo·分类·数据挖掘
KmjJgWeb9 分钟前
YOLOv26赋能车辆表面缺陷检测:我如何实现高精度缺陷分类与识别系统
yolo·分类·数据挖掘
红队it20 分钟前
【数据分析+机器学习】基于机器学习的招聘数据分析可视化预测推荐系统(完整系统源码+数据库+开发笔记+详细部署教程)✅
数据库·机器学习·数据分析
STLearner1 小时前
MM 2025 | 时间序列(Time Series)论文总结【预测,分类,异常检测,医疗时序】
论文阅读·人工智能·深度学习·神经网络·算法·机器学习·数据挖掘
春日见1 小时前
Git 相关操作大全
linux·人工智能·驱动开发·git·算法·机器学习
Kingfar_11 小时前
高速列车驾驶员情境意识动态建模及生理反应机制研究
人工智能·机器学习
zy_destiny2 小时前
SegEarth-OV系列(二):面向遥感图像的无训练开放词汇分割
人工智能·深度学习·算法·机器学习·计算机视觉·语义分割·开放词汇
武汉唯众智创2 小时前
基于大语言模型的自助式 AI 心理咨询系统
人工智能·语言模型·自然语言处理·大语言模型·自助式 ai 心理咨询系统·ai 心理咨询系统·ai 心理咨询
Benaldo_Y2 小时前
大语言模型(LLM)
人工智能·语言模型·自然语言处理