逻辑回归二分类-利用贝叶斯公式判断邮件是否为垃圾邮件

# spam.csv训练样本可以百度或者google一下

import pandas as pd
import numpy as np
import matplotlib.mlab as mlab
import matplotlib.pyplot as plt

# read data from the dataset
df = pd.read_csv("C:\\ai_work_space\dataset\spam.csv", encoding='latin')
# read 5 rows of the spam.csv
context = df.head()
print(context)
# rename the title of the spam.csv so that it is easier to read
# rename方法作用: 复制 DataFrame并对其索引index和列标签columns进行赋值。如果希望就地修改某个数据集,传入inplace=True即可
# columns:dict-like or function,指定哪个列名,一般是字典形式,如:{'name':‘姓名’},name是要替换的久列名,姓名是替换后的列名
# inplace:bool, default False :是否覆盖原来的数据

df.rename(columns={'v1': 'Label', 'v2': 'Text'}, inplace=True)
df.head()
df['numLabel'] = df['Label'].map({'ham': 0, 'spam': 1})

print("ham email numbers:", len(df[df.numLabel == 0]), "spam email numbers:", len(df[df.numLabel==1]))
print("totals:", len(df))

# get the length of every email text content from 0 row to the end of the datasets
text_lengths = [len(df.loc[i, 'Text']) for i in range(len(df))]
print(text_lengths)
# 设置图像,以text_lengths数组为数据,高度分段为100,蓝色,透明度0.5
plt.hist(text_lengths, 100, facecolor='blue', alpha=0.5)
# 设置x轴从0到200
plt.xlim([0, 200])
plt.show()

# 导入库,用来把文本转化为向量形式
from sklearn.feature_extraction.text import CountVectorizer
# 构建文本的向量,基于词频的表示
vectorizer = CountVectorizer()
X = vectorizer.fit_transform(df.Text)
y = df.numLabel
# 把数据分成测试集和训练集
from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.20, random_state=100)
print("训练数据中的样本个数:", X_train.shape[0], "测试数据中的样本个数:", X_test.shape[0])
# 利用朴素贝叶斯做训练
from sklearn.naive_bayes import MultinomialNB
from sklearn.metrics import accuracy_score
clf = MultinomialNB(alpha=1.0, fit_prior=True)
clf.fit(X_train, y_train)
y_pred = clf.predict(X_test)
print("accuracy on test data:", accuracy_score(y_test, y_pred))
# print 混淆矩阵
from sklearn.metrics import confusion_matrix
confusion_matrix = confusion_matrix(y_test, y_pred, labels=[0, 1])
print(confusion_matrix)
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
贝叶斯分类器和逻辑回归分类器是两种常见的分类算法,它们在原理和应用上有一些区别。 贝叶斯分类器是基于贝叶斯公式的概率分类器,它假设特征之间是独立的。贝叶斯分类器通过计算后验概率来进行分类,即给定特征条件下目标变量的概率。它可以处理多类别分类问题,并且对于小样本数据表现较好。贝叶斯分类器的参数估计可以使用最大似然法。 逻辑回归分类器是一种广义线性模型,它通过将线性回归模型的输出映射到一个概率值来进行分类。逻辑回归分类器假设特征和目标变量之间存在一个线性关系,并使用逻辑函数(如sigmoid函数)将线性输出转换为概率。逻辑回归分类器通常用于二分类问题,但也可以扩展到多类别分类问题。参数估计通常使用最大似然法或正则化方法。 两者的区别主要在于: 1. 假设:贝叶斯分类器假设特征之间是独立的,而逻辑回归分类器假设特征和目标变量之间存在一个线性关系。 2. 概率计算:贝叶斯分类器通过计算后验概率来进行分类,而逻辑回归分类器通过将线性输出映射到概率来进行分类。 3. 多类别分类:贝叶斯分类器可以处理多类别分类问题,而逻辑回归分类器通常用于二分类问题,但也可以扩展到多类别分类问题。 下面是一个示例代码,演示了如何使用贝叶斯分类器和逻辑回归分类器进行分类: ```python # 使用贝叶斯分类器进行分类 from sklearn.naive_bayes import GaussianNB # 创建贝叶斯分类器对象 nb_classifier = GaussianNB() # 训练模型 nb_classifier.fit(X_train, y_train) # 预测 nb_predictions = nb_classifier.predict(X_test) # 使用逻辑回归分类器进行分类 from sklearn.linear_model import LogisticRegression # 创建逻辑回归分类器对象 lr_classifier = LogisticRegression() # 训练模型 lr_classifier.fit(X_train, y_train) # 预测 lr_predictions = lr_classifier.predict(X_test) ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值