中文垃圾邮件分类。2种特征提取,词袋特征,IFIDF分布特征,贝叶斯NB,LR,SVM各自表现的实战示例代码

结论:

数据:

ham_data.txt

spam_data.txt

stop_words.utf8

数据处理:

"""

@author: liushuchun
"""
import re
import string
import jieba

# 加载停用词
with open("dict/stop_words.utf8", encoding="utf8") as f:
    stopword_list = f.readlines()


def tokenize_text(text):
    tokens = jieba.cut(text)
    tokens = [token.strip() for token in tokens]
    return tokens


def remove_special_characters(text):
    tokens = tokenize_text(text)
    pattern = re.compile('[{}]'.format(re.escape(string.punctuation)))
    filtered_tokens = filter(None, [pattern.sub('', token) for token in tokens])
    filtered_text = ' '.join(filtered_tokens)
    return filtered_text


def remove_stopwords(text):
    tokens = tokenize_text(text)
    filtered_tokens = [token for token in tokens if token not in stopword_list]
    filtered_text = ''.join(filtered_tokens)
    return filtered_text


def normalize_corpus(corpus, tokenize=False):
    normalized_corpus = []
    for text in corpus:

        text = remove_special_characters(text)
        text = remove_stopwords(text)
        normalized_corpus.append(text)
        if tokenize:
            text = tokenize_text(text)
            normalized_corpus.append(text)

    return normalized_corpus

特征提取

"""

@author: liushuchun
"""

from sklearn.feature_extraction.text import CountVectorizer


def bow_extractor(corpus, ngram_range=(1, 1)):
    vectorizer = CountVectorizer(min_df=1, ngram_range=ngram_range)
    features = vectorizer.fit_transform(corpus)
    return vectorizer, features


from sklearn.feature_extraction.text import TfidfTransformer


def tfidf_transformer(bow_matrix):
    transformer = TfidfTransformer(norm='l2',
                                   smooth_idf=True,
                                   use_idf=True)
    tfidf_matrix = transformer.fit_transform(bow_matrix)
    return transformer, tfidf_matrix


from sklearn
  • 5
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
以下是基于课程提供的不同字体数字手写体识别的数对手写体进行识别的MATLAB代码实现,以及朴素贝叶斯分类器、SVM分类器、最小近邻、logistics回归等四种模型的分类结果比较和分析。 MATLAB代码实现: 1. 数据预处理 ```matlab % 读取数据 data = load('digit.mat'); X = data.X; y = data.y; % 数据预处理 X = double(X); X = X / 255; X = reshape(X, size(X, 1) * size(X, 2), size(X, 3))'; ``` 2. 数据划分 ```matlab % 数据划分 cv = cvpartition(size(X, 1), 'HoldOut', 0.3); X_train = X(training(cv), :); y_train = y(training(cv)); X_test = X(test(cv), :); y_test = y(test(cv)); ``` 3. 模型训练与测试 朴素贝叶斯分类器: ```matlab % 训练朴素贝叶斯分类nb = fitcnb(X_train, y_train); % 测试朴素贝叶斯分类器 y_pred_nb = predict(nb, X_test); % 计算分类准确率 acc_nb = sum(y_pred_nb == y_test) / length(y_test); ``` 支持向量机(SVM分类器: ```matlab % 训练SVM分类svm = fitcecoc(X_train, y_train); % 测试SVM分类器 y_pred_svm = predict(svm, X_test); % 计算分类准确率 acc_svm = sum(y_pred_svm == y_test) / length(y_test); ``` 最近邻(KNN)分类器: ```matlab % 训练KNN分类器 knn = fitcknn(X_train, y_train); % 测试KNN分类器 y_pred_knn = predict(knn, X_test); % 计算分类准确率 acc_knn = sum(y_pred_knn == y_test) / length(y_test); ``` logistics回归分类器: ```matlab % 训练logistics回归分类lr = fitcecoc(X_train, y_train); % 测试logistics回归分类器 y_pred_lr = predict(lr, X_test); % 计算分类准确率 acc_lr = sum(y_pred_lr == y_test) / length(y_test); ``` 4. 结果比较和分析 通过比较以上四种模型的分类结果,可以得出以下结论: - 朴素贝叶斯分类器的分类准确率最低,可能是由于手写数字的特征之间具有较强的相关性,而朴素贝叶斯分类器假设特征之间相互独立,导致分类效果不佳。 - SVM分类器的分类准确率较高,可能是由于SVM分类器能够处理高维数据,对于手写数字的特征提取分类具有较好的效果。 - KNN分类器的分类准确率也较高,但对于大规模数据的训练和预测速度较慢,需要更多的时间和计算资源。 - logistics回归分类器的分类准确率较高,但对于非线性分类问题的处理效果不如SVM分类器。 综上所述,针对不同的数据和任务需求,我们可以选择不同的分类器来进行数字手写体识别的任务。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值