机器学习基础-贝叶斯算法

1、背景

应用在跟文本相关的分类,分类效果较好

根据 先验信息判断

2、贝叶斯定理

 P(H|X )给定观测数据样本X ,假设H是成立的概率
   比如X是一份具有特定特征的邮件, H是垃圾邮件。它里面包含很多的单词(特征) , 然后我们判断这封邮件属于垃圾邮件的概率是多少。

P(H|X)是后验概率。比如一份特定邮件中,是垃圾邮件的概率。
P(H)是H的先验概率。比如总体邮件中垃圾邮件的概率。
P(X )是X的先验概率。比如总体邮件中带有特定特征的邮件概率。

可以通过抽样来计算先验概率。抽样的数量越大,得到的结果越接近于真实的概率分布-大数定理。

举例1:

  

举例2:

 多个特征计算量太大,可以采用朴素贝叶斯方法

朴素贝叶斯:假设X1,X2,X3,,,,之间相互独立

 大脑中的贝叶斯比如:

 

3、实践贝叶斯简单程序

sklearn中的classification_report函数用于显示主要分类指标的文本报告.在报告中显示每个类的精确度,召回率,F1值等信息。

#%%

# 导入算法包以及数据集
import numpy as np
from sklearn import datasets
from sklearn.model_selection import train_test_split
from sklearn.metrics import classification_report,confusion_matrix
from sklearn.naive_bayes import MultinomialNB,BernoulliNB,GaussianNB

#%%

# 载入数据
iris = datasets.load_iris()
x_train,x_test,y_train,y_test = train_test_split(iris.data, iris.target) 

#%%

mul_nb = GaussianNB()
mul_nb.fit(x_train,y_train)

#%%

print(classification_report(mul_nb.predict(x_test),y_test))

#%%

print(confusion_matrix(mul_nb.predict(x_test),y_test))

#%%

4、实践贝叶斯-新闻分类-词袋模型

    Bag-of-words model (BoW model)最早出现在自然语言处理( Natural Language Processing )和信息检索( Information Retrieval )领域。该模型忽略掉文本的语法和语序等要素,将其仅仅看作是若干个词汇的集合,文档中每个单词的出现都是独立。BoW使用一-组无序的单词(words)来表达一段文字或一个文档。

#%%

from sklearn.datasets import fetch_20newsgroups
from sklearn.model_selection import train_test_split

#%%

news = fetch_20newsgroups(subset='all')
print(news.target_names)
print(len(news.data))
print(len(news.target))

#%%

print(len(news.target_names))

#%%

news.data[0]

#%%

print(news.target[0])
print(news.target_names[news.target[0]])

#%%

x_train,x_test,y_train,y_test = train_test_split(news.data,news.target)

#%% md

CountVectorizer方法构建单词的字典,每个单词实例被转换为特征向量的一个数值特征,每个元素是特定单词在文本中出现的次数  

#%%

from sklearn.feature_extraction.text import CountVectorizer

texts=["dog cat fish","dog cat cat","fish bird", 'bird']
cv = CountVectorizer() #实例化这个方法
cv_fit=cv.fit_transform(texts) #调用fit_transform方法

# 
print(cv.get_feature_names()) #统计不同的单词名称
print(cv_fit.toarray())

print(cv_fit.toarray().sum(axis=0))

#%%

from sklearn import model_selection 
from sklearn.naive_bayes import MultinomialNB

cv = CountVectorizer()
cv_data = cv.fit_transform(x_train)
mul_nb = MultinomialNB()

scores = model_selection.cross_val_score(mul_nb, cv_data, y_train, cv=3, scoring='accuracy')  
print("Accuracy: %0.3f" % (scores.mean())) 

5、 TF-IDF算法

我们需要一个重要性调整系数,衡量一个词是不是常见词。如果某个词比较少见,但是它在这篇文章中多次出现那么它很可能就反映了这篇文章的特性,正是我们所需要的关键词。
用统计学语言表达,就是在词频的基础上, 要对每个词分配一个"重要性"权重。最常见的词( "的"、"是"、 "在")给予最小的权重,较常见的词( "中国" )给予较小的权重,较少见的词( "蜜蜂"、"养殖" )给予较大的权重。这个权重叫做"逆文档频率" ( Inverse Document Frequency ,缩写为IDF) ,它的大小与一个词的常见程度成反比。
 

 

举例:

 代码:

TfidfVectorizer使用了一个高级的计算方法,称为Term Frequency Inverse

Document Frequency (TF-IDF)。这是一个衡量一个词在文本或语料中重要性的统计方法。直觉上讲,该方法通过比较在整个语料库的词的频率,寻求在当前文档中频率较高的词。这是一种将结果进行标准化的方法,可以避免因为有些词出现太过频繁而对一个实例的特征化作用不大的情况(我猜测比如a和and在英语中出现的频率比较高,但是它们对于表征一个文本的作用没有什么作用)

#%%

from sklearn.feature_extraction.text import TfidfVectorizer
# 文本文档列表
text = ["The quick brown fox jumped over the lazy dog.",
"The dog.",
"The fox"]
# 创建变换函数
vectorizer = TfidfVectorizer()
# 词条化以及创建词汇表
vectorizer.fit(text)
# 总结
print(vectorizer.vocabulary_) #生成一个字典
print(vectorizer.idf_)
# 编码文档
vector = vectorizer.transform([text[0]])
# 总结编码文档
print(vector.shape)
print(vector.toarray())

#%%

# 创建变换函数
vectorizer = TfidfVectorizer()
# 词条化以及创建词汇表
tfidf_train = vectorizer.fit_transform(x_train)

scores = model_selection.cross_val_score(mul_nb, tfidf_train, y_train, cv=3, scoring='accuracy') 
print("Accuracy: %0.3f" % (scores.mean())) 

#%%

def get_stop_words():
    result = set()
    for line in open('stopwords_en.txt', 'r').readlines():
        result.add(line.strip())
    return result

# 加载停用词
stop_words = get_stop_words()
# 创建变换函数
vectorizer = TfidfVectorizer(stop_words=stop_words)


mul_nb = MultinomialNB(alpha=0.01)

# 词条化以及创建词汇表
tfidf_train = vectorizer.fit_transform(x_train)

scores = model_selection.cross_val_score(mul_nb, tfidf_train, y_train, cv=3, scoring='accuracy') 
print("Accuracy: %0.3f" % (scores.mean())) 

#%%

# 切分数据集
tfidf_data = vectorizer.fit_transform(news.data)
x_train,x_test,y_train,y_test = train_test_split(tfidf_data,news.target)

mul_nb.fit(x_train,y_train)
print(mul_nb.score(x_train, y_train))

print(mul_nb.score(x_test, y_test))

#%%
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: "python机器学习基础源码.zip" 是一个压缩文件,其中包含了一些用Python编写的机器学习基础源码。 机器学习是一门研究如何使计算机能够通过数据学习和改进的领域。通过使用机器学习算法和模型,我们可以让计算机自动从数据中发现规律和模式,并利用这些知识来做出预测和决策。 在这个压缩文件中,可能会有一些用于演示不同机器学习算法的源码。这些算法可以用于分类、回归、聚类、降维等各种机器学习任务。其中一些常见的机器学习算法可能包括决策树、支持向量机、朴素贝叶斯、神经网络等。 这些源码文件可能包含了一些常见的Python机器学习库的使用示例,例如Scikit-learn、Tensorflow、Keras等。这些库提供了许多高效的机器学习算法和工具,可以帮助开发者更方便地实现机器学习任务。 通过研究这些源码,我们可以学习到如何使用Python编写机器学习算法,如何准备数据、训练模型、评估性能等。同时,我们也可以了解到机器学习领域中的一些常见问题和解决方案。 总之,"python机器学习基础源码.zip" 这个压缩文件提供了一些机器学习基础源码,是学习和实践机器学习的很好的资源。 ### 回答2: Python机器学习基础源码.zip是一个压缩文件,其中包含了Python机器学习基础源码。 Python是一种强大的编程语言,也是数据科学和机器学习领域广泛使用的语言之一。机器学习是一种人工智能的分支,旨在让计算机能够通过数据学习,从而做出预测或进行决策。 Python机器学习基础源码.zip中的文件可能包含了各种用Python编写的机器学习算法或模型的源代码,例如线性回归、逻辑回归、决策树、支持向量机等等。这些源码的编写是为了解决机器学习问题,如分类、回归、聚类等。 学习源码对于理解机器学习算法的原理和实现非常有帮助。因为源码展示了算法的具体实现细节,包括数据准备、特征工程、模型构建、训练和预测等步骤。通过阅读和理解源码,我们可以更好地理解算法的工作原理,进一步优化和改进算法,或者将其应用于自己的项目中。 要使用Python机器学习基础源码.zip,首先需要解压缩文件,可以使用压缩软件如WinRAR或7-Zip等。然后,您可以查看源码文件,并在自己的机器上运行这些代码,了解算法的运行过程和输出结果。您还可以修改代码,测试不同的参数或修改算法逻辑,以适应自己的需求。 总之,Python机器学习基础源码.zip对于学习和实践机器学习领域非常有价值。通过研究源码,您可以加深对机器学习算法的理解,掌握其应用,并在实践中不断完善和优化算法。 ### 回答3: "python机器学习基础源码.zip" 是一个包含有关 Python 机器学习基础的源代码的压缩文件。Python 机器学习是一种应用机器学习算法和技术的方法,使用 Python 编程语言实现。该文件可能包含许多脚本和模块,用于展示与机器学习相关的基本概念和算法。 这个压缩文件可能包含以下类型的文件: 1. 数据集文件:用于训练和测试机器学习模型的数据集,这些文件可能采用常见的格式,如 CSV 或 JSON。 2. 模型训练文件:包含训练机器学习模型的源代码,这些文件可能使用各种 Python 库实现,如 scikit-learn 或 TensorFlow。 3. 模型评估文件:包含评估已训练模型性能的源代码,这些文件可能包括精确度、召回率、准确度和 F1 分数等指标的计算。 4. 数据预处理文件:包含对数据进行预处理和清洗的代码,例如数据缩放、特征选择和特征工程等操作。 5. 可视化文件:包含用于可视化机器学习模型和结果的源代码,例如绘制学习曲线、特征重要性图和混淆矩阵等图形。 这些源代码文件可以帮助学习者理解机器学习的基本概念,并为他们提供一个基础,用于进一步学习和实践更复杂的机器学习任务。学习者可以通过阅读和运行这些源代码,了解机器学习模型的构建过程、训练和评估技术,以及如何应用这些技术来解决现实世界的问题。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值