22222153513 2023-02-10 22:12 采纳率: 60%
浏览 64
已结题

TF-IDF特征选取和划分数据集

接下来怎么进行TF-IDF特征选取和划分数据集
数据来源:https://github.com/aceimnorstuvwxz/toutiao-text-classfication-dataset

img

import numpy as np
import pandas as pd
import time
import jieba
import re
import string
import pickle
import matplotlib.pyplot as plt
from sklearn.metrics import accuracy_score, precision_score, recall_score
from sklearn.feature_extraction.text import TfidfTransformer, CountVectorizer
from sklearn.model_selection import StratifiedKFold

# # Pandas设置
# pd.set_option("display.max_columns", None)  # 设置显示完整的列
# pd.set_option("display.max_rows", None)  # 设置显示完整的行
# pd.set_option("display.expand_frame_repr", False)  # 设置不折叠数据
# pd.set_option("display.max_colwidth", 100)  # 设置列的最大宽度

# 加载数据集
def data():
    a=[]
    with open(r'D:\桌面\文本分类\data.txt',encoding='utf-8') as f:
        a.append(f.readlines())
    df = pd.DataFrame(a[0])
    df['label']=df[0].apply(lambda x:x.split('_!_')[1])      #对第二个!前的数据名称设置为label
    df['label_desc']=df[0].apply(lambda x:x.split('_!_')[2]) #对第三个!前的数据名称设置为label_desc
    df['sentence']=df[0].apply(lambda x:x.split('_!_')[3])   #对第四个!前的数据名称设置为sentence
    return df.iloc[0:,1:] 
df=data()

#去重仅保留第一次出现的评论
df=df.drop_duplicates(keep='first',inplace=False)
#去除空白行
df= df.dropna(axis=0)

STOPWORDS = r'D:\桌面\文本分类\停用词\stopwords-master\哈工大停用词表.txt'
stoplist = []
content_list = []
for word in open(STOPWORDS,encoding='utf-8'):
    stoplist.append(word.strip())   #添加停用词表

#去除无效符号
def qu_dian(text):
    punc = r'[~`!#$%^&*()_+-=|\';":/.,?><~·!@#¥%……&*()——+-=“:’;、。,?》《{}]'
    ff=re.sub(punc, "",text)
    f1=jieba.lcut(ff,cut_all=False)     #中文分词
    def rn(x):
        return x.replace(' ','')
    ben=list(filter(rn,f1))
    return ben

df['quchu']=df['sentence'].apply(qu_dian)

#去除停用词
def qu_word(x):
    real=[]
    for i in x:
        if i not in stoplist:
            real.append(i)
    return real

df['quchu']=df['quchu'].apply(qu_word)

  • 写回答

2条回答 默认 最新

  • GISer Liu 2023-02-10 22:42
    关注

    首先,我们需要把文本数据处理为特征矩阵。这可以使用sklearn库中的CountVectorizer和TfidfTransformer实现:

    # 实例化CountVectorizer
    vectorizer = CountVectorizer()
    
    # 将文本数据转化为特征矩阵
    X = vectorizer.fit_transform(df['sentence'].tolist())
    
    # 实例化TfidfTransformer
    transformer = TfidfTransformer()
    
    # 对特征矩阵进行tf-idf转换
    X = transformer.fit_transform(X)
    

    然后,我们可以使用sklearn库中的StratifiedKFold类来划分数据集:

    # 实例化StratifiedKFold
    skf = StratifiedKFold(n_splits=5)
    
    # 对数据进行划分
    for train_index, test_index in skf.split(X, df['label']):
        X_train, X_test = X[train_index], X[test_index]
        y_train, y_test = df['label'][train_index], df['label'][test_index]
    

    此时,我们已经完成了TF-IDF特征选取和数据集划分。接下来,你可以使用你所选择的分类器对划分好的数据集进行训练和预测,并评估它的性能。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 2月18日
  • 已采纳回答 2月10日
  • 修改了问题 2月10日
  • 创建了问题 2月10日

悬赏问题

  • ¥15 2020长安杯与连接网探
  • ¥15 关于#matlab#的问题:在模糊控制器中选出线路信息,在simulink中根据线路信息生成速度时间目标曲线(初速度为20m/s,15秒后减为0的速度时间图像)我想问线路信息是什么
  • ¥15 banner广告展示设置多少时间不怎么会消耗用户价值
  • ¥16 mybatis的代理对象无法通过@Autowired装填
  • ¥15 可见光定位matlab仿真
  • ¥15 arduino 四自由度机械臂
  • ¥15 wordpress 产品图片 GIF 没法显示
  • ¥15 求三国群英传pl国战时间的修改方法
  • ¥15 matlab代码代写,需写出详细代码,代价私
  • ¥15 ROS系统搭建请教(跨境电商用途)