基于逻辑回归的中文垃圾短信分类
一、数据预处理
- 去重
- 中文分词和停用词
二、建立模型
三、预测
一.数据预处理
源数据一共有80万条短信,我选1万条做我的源数据
后面做预测信息的时候选的2000条没做源数据的数据,一份去掉标签的用作预测,一份没去标签的我后面用来做计数处理。
1.数据去重
data=data.drop_duplicates(subset=['text']) # text列去重
其实源数据并没有重复数据…
2.中文分词和停用词
a.中文分词
中文分词使用目前流行的结巴(Jieba)
# 中文分词
x1=[]
x=[]
y=[]
x1=data['text'].values
# data["text"].apply(lambda x:' '.join(jieba.cut(x)))
for i in range(len(x1)):
words=jieba.cut(x1[i])
str1=""
for key in words:
if key not in stop_words:
if key != '\t':
str1+=key
str1+=' '
x.append(str1) #短信内容
y=data['label'].values
b.停用词
停用词表网上下载 根据源数据再添了一些
不得不吐槽我用的这个源数据是真的源数据 一堆乱七八糟的内容
# 停用词
stop_f = open('./stopwords.txt',"r",encoding='utf-8')
stop_words=[]
for line in stop_f.readlines():
line = line.strip()
if not len(line):
continue
stop_words.append(line)
stop_f.close
二、建立模型并训练
使用机器学习sklearn库 方便 简单
1.建立模型
#线性回归
train_x,test_x,y_train,y_test = train_test_split(x,y,test_size=0.3)#测试集:训练集 =1:9
# test_xrain
#通过TfidfVectorizer算出TF-IDF权重