简短NLP入门完整代码附详解附数据集

数据集: https://pan.baidu.com/s/13IMDPMz0rf8kM1JAea53uQ
密码: y6m4
数据集炒鸡炒鸡大TQT~~~
代码中涉及的具体的类或函数在对应的其他分支博客下谅解~
{第一次用markdown写代码块,排版不是很好,会越来越好~}

# -*- coding: utf-8 -*-
print("开始..............")

import pandas as pd
from sklearn.linear_model import LogisticRegression
from sklearn.feature_extraction.text import CountVectorizer

df_train = pd.read_csv('./train_set.csv')
df_test = pd.read_csv('./test_set.csv')
df_train.drop(columns=['article','id'],inplace=True)
#pandas的drop函数:删除表中的某一行或者某一列,当inplace手动设为True时(默认为false),改变原有的df中的数据,原数据直接就被替换。

df_test.drop(columns=['article'],inplace=True)

vectorizer = CountVectorizer(ngram_range=(1,2),min_df=3,max_df=0.9,max_features=100000)

#文本特征提取方法:CountVectorizer,它只考虑每种词汇在该训练文本中出现的频。
#CountVectorizer算法是将文本向量转换成稀疏表示数值向量(字符频率向量)。
#该数值向量可以传递给其他算法,譬如LDA 。在fitting过程中,CountVectorizer将会把频率高的单词排在前面。可选参数minDF表示文本中必须出现的次数(具体分析见另一篇博客啦~)

vectorizer.fit(df_train['word_seg'])
# 先拟合训练集'word_seg'列的数据

x_train = vectorizer.transform(df_train['word_seg'])
# 再标准化训练集'word_seg'列数据,tranform()的作用是通过找中心和缩放等实现标准化

x_test = vectorizer.transform(df_test['word_seg'])
# 标准化测试集'word_seg'列数据

y_train = df_train['class']-1
#将训练集y 标签为'class'列的数据全部减一

lg = LogisticRegression(C=4,dual=True)
# 使用LogisticRegression每次指定一个正则化系数C。

lg.fit(x_train,y_train)
#Fit the model according to the given training data

y_test = lg.predict(x_test)
#根据输入的测试集x输出预测的y值

df_test['class'] = y_test.tolist()
#将预测结果转化为list赋值给测试集中'class'一列 

df_test['class'] = df_test['class']+1
#该列每一个值加一

df_result = df_test.loc[:,['id','class']]
#选取'id','class'两列作为结果集

df_result.to_csv('./result.csv',index=False)
#保存结果
print("完成...............")

———-我是分隔线
如果碰到如下报错这里写图片描述
可尝试这么改,数据集一次读取太大了,限制下一次的读取最大值
这里写图片描述

猜你喜欢

转载自blog.csdn.net/weixin_38278334/article/details/82319070